直線と傾きのある楕円の交点を求めたい
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)
お礼
ご返信、誠にありがとう御座います。 お教え頂きました内容を反映致しましたところ無事、交点を求める事が出来ました。 本当に、本当に有難う御座いました。