直線と傾きのある楕円の交点を求めたい
http://www17.ocn.ne.jp/~lite/pro97doc.html#TOP
こちらを参考にさせて頂き、直線と楕円の交点を求める関数を作成しております。
傾きを持たない楕円と直線の交点はこれで求められたのですが、
楕円に傾きがある場合、うまく交点を求められません。
どなたか足りない計算、誤っている箇所等お教え願えないでしょうか。
pt1:線の始点
pt2:線の終点
center:楕円の中心座標
radius:楕円の半径
angle:楕円の角度(傾き)
henpei:楕円の扁平率
'直線の勾配を求める
Dim m As Single = (pt2.Y - pt1.Y) / (pt2.X - pt1.X)
'扁平率(ここはかならず長辺/短編?)
Dim w As Double = henpei / 100
'楕円の傾き(ラジアン)
Dim radian As Single = angle * (Math.PI / 180)
'参考元のaとbの長さを求める?
Dim a1 As Single = center.X'原点Xからの中心Xまでの距離
Dim b1 As Single = center.Y'原点Yからの中心Yまでの距離
Dim A As Double = CDbl((m ^ 2) + (w ^ 2))
Dim B As Double = CDbl(-2 * (m ^ 2) * pt1.X + 2 * m * (pt1.Y - b1) - 2 * a1 * (w ^ 2))
Dim C As Double = CDbl((m ^ 2) * (pt1.X ^ 2) - 2 * m * (pt1.Y - b1) * pt1.X + ((pt1.Y - b1) ^ 2) - (radius * w) ^ 2 + (a1 * w) ^ 2)
Dim D As Double = CDbl((B ^ 2) - (4 * A * C))
'交点無し
If D < 0 Then Return crossPoints
'2点を求める
Dim x1 As Single = CSng((-B + Math.Sqrt(D)) / (2 * A))
Dim y1 As Single = pt1.Y + m * (x1 - pt1.X)
Dim x2 As Single = CSng((-B - Math.Sqrt(D)) / (2 * A))
Dim y2 As Single = pt1.Y + m * (x2 - pt1.X)
No.1ベストアンサー
- 回答日時:
参考にしたサイトの「直線と楕円との交点を求める」解法は、
座標系を回転させ、傾きのない楕円にしてから交点を求めています。
楕円の傾きがθの場合は、
・直線と楕円を-θ回転する。(傾きのない楕円になる)
・交点の座標を求める。
・交点の座標をθ回転する。
回転の計算は、
座標(x,y)のθ回転=(x*cosθ-y*sinθ,x*sinθ+y*cosθ)
ご返信、誠にありがとう御座います。
お教え頂きました内容を反映致しましたところ無事、交点を求める事が出来ました。
本当に、本当に有難う御座いました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルで同じ数字同士を自動で線で結ぶVBAを教えてください 6 2022/04/26 23:13
- Visual Basic(VBA) vbaの計算 if elseと範囲について 6 2022/11/26 01:49
- Visual Basic(VBA) EXCEL VBAにて動的にCheckBOXを複数作成し、同BOXにイベントを追加したい 1 2023/03/16 07:05
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) VBAプログラミング 2 2022/11/27 12:13
- Excel(エクセル) excel2013 色付きセルの値合計 3 2023/02/28 11:48
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Excel(エクセル) excel ピポットテーブルの更新について 1 2022/05/13 16:12
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
グラフの交点の求め方(Excel)
-
マインクラフト(pc版)で座標...
-
3次元空間上の2つの座標から...
-
ダイアログ内コントロールの位...
-
任意の座標が、閉図形の内側か...
-
図形が重なりあっているかどうか
-
座標を持った平面範囲に座標を...
-
エクセルである点からの距離で...
-
ビットマップ画像の座標を小数...
-
OpenGLの線の太さ
-
住所から経緯経度を出したい
-
ClientToScreen
-
VB6→VS2005アップグレード後
-
C言語で制作するピラミッドアー...
-
始点、終点の二つの座標と半径...
-
ワード上Shapeの位置情報を統一...
-
OpenCvSharp4による画像判定解...
-
Fortranで直交座標から極座標変...
-
y=x^2の座標をプロットするプロ...
-
シーケンサー(PLC?)で制...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
グラフの交点の求め方(Excel)
-
マインクラフト(pc版)で座標...
-
エクセルで回転する座標の出し方
-
エクセルである点からの距離で...
-
3次元空間上の2つの座標から...
-
閉図形の座標の配列が右回りか...
-
ダイアログ内コントロールの位...
-
始点、終点の二つの座標と半径...
-
座標を持った平面範囲に座標を...
-
空間上の二点を結ぶ直線上に任...
-
エクセルシート上のマウスポイ...
-
多角形の内部かどうか判定する方法
-
ワード上Shapeの位置情報を統一...
-
Excel VBA で自在に図形を変化...
-
OpenCvSharp4による画像判定解...
-
C言語 配列で座標
-
シーケンサー(PLC?)で制...
-
以下のプログラムは重心を求め...
-
交差する2線分の交点座標の求め方
-
VB6のPrinter.ScaleWidth に対...
おすすめ情報