2

線 (原点は楕円の中心) が 2D の楕円と交差する点を見つける必要があります...角度 F と円の半径 (R) がわかっているので、円上の点を簡単に見つけることができます。

x = x0 + R * cosF
y = y0 + R * sinF

ただし、楕円をどのように処理すればよいかわかりません... 寸法 (A & B) であることはわかっていますが、パラメーター T を見つける方法は何ですか?!

x = x0 + A * cosT
y = y0 + B * sinT

私が理解していることから、パラメーター T (T 角度) は F 角度 (場合によっては約 +-15 度) からそれほど遠くありませんが、計算方法がわかりません!!!

心優しい方がいらっしゃいましたら、この問題を解決してください...

4

4 に答える 4

8

0,0 に配置された楕円の標準方程式は次のとおりです。

1 = (x)^2 / (a)    +  (y)^2 / (b)

a は横軸の直径の 1/2、b は縦軸の直径の 1/2 です。

方程式を仮定すると、次の行があります。

y = (m)(x - x0) + y0

それでは、プラグアンドプレイしましょう!

1 = (x)^2 / (a)   +   (m(x - x0) + y0)^2 / (b)

1 = x^2 / a  +  (mx + (y0 - mx0))^2 / b

1 = x^2 / a  +  (m^2 * x^2 + 2mx*(y0 - mx0) + (y0 - mx0)^2) / b

1 = x^2 / a  + (m^2 x^2) / b + (2mx*(y0 - mx0) + (y0^2 - 2y0mx0 + m^2*x0^2)) / b

1 = ((x^2 * b) / (a * b)) + ((m^2 * x^2 * a) / (a * b)) + (2mxy0 - 2m^2xx0)/b + (y0^2 - 2y0mx0 + m^2*x0^2)/b

1 = ((bx^2 + am^2x^2)/(ab)) + (x*(2my0 - 2m^2x0))/b + (y0^2 - 2y0mx0 + m^2*x0^2)/b

0 = x^2*((b + a*m^2)/(ab)) + x*((2my0 - 2m^2x0)/b) + (((y0^2 - 2y0mx0 + m^2*x0^2)/b) - 1)

最後の方程式は、標準的な二次方程式の形式に従います。

したがって、次のように二次方程式を使用してください。

((b + a*m^2)/(ab))
((2my0 - 2m^2x0)/b)
and 
(((y0^2 - 2y0mx0 + m^2*x0^2)/b) - 1)

交点の X 値を取得します。次に、これらの値を元の直線方程式に代入して、Y 値を取得します。

幸運を!

于 2012-05-21T21:18:54.590 に答える
3

このようにしないでください。代わりに、楕円を形成する方程式と線を形成する方程式を確認して、セットを解きます。

楕円: (x/a)^2 + (y/b)^2 = 1 あなたの行: y = cx

a、b、c を知っているので、解決策を見つけるのは簡単です。直線が楕円を 2 回横切るため、2 つの解が見つかります。

編集:楕円の中心を(0,0)に移動したことに注意してください。それはすべてを簡単にします。(x0,y0) を解に追加するだけです。

于 2012-05-21T21:05:10.000 に答える
1

問題の C# コードを作成しました。お役に立てば幸いです。このコード内の距離関数は、空間内の 2 点間のユークリッド距離を計算します。

wXは楕円の水平ラジオをwY示し、垂直ラジオを示します。

private PointF LineIntersectEllipse(PointF A, PointF B, float wX, float wY)
{
      double dx = B.X - A.X;
      double dy = B.Y - A.Y;
      double theta = Math.Atan2(dy, dx);
      double r = distance(A, B) - ((wX * wY) / Math.Sqrt(Math.Pow(wY * Math.Cos(theta), 2) + Math.Pow(wX * Math.Sin(theta), 2)));
      return PointF((float)(A.X + r * Math.Cos(theta)), (float)(A.Y + r * Math.Sin(theta)));
}
于 2014-09-06T19:36:55.900 に答える