4

QuadCurve2D2つのインスタンスが交差するポイント(存在する場合)を概算する簡単な方法はありますか?

つまり、この図の赤い点の座標をどのように計算できますか?これを行うための明確な方法はありませQuadCurve2Dん。

2つの2次ベジェ曲線(青)、おおよその交点(赤)

(注:図のために手動で微調整したため、ポイントは正確ではありません。また、(無限の)放物線上にあるにもかかわらず、曲線セグメント上にない「欠落した」4番目のポイントにも注意してください。)

これらの2つの曲線セグメントは、次のコードで作成されました。

QuadCurve2D curve1 = new QuadCurve2D.Double(-2.00, -2.00, +0.75, +4.75, +2.00, -0.75);
QuadCurve2D curve2 = new QuadCurve2D.Double(-2.50, -0.75, +5.50, -0.50, +0.50, +1.25);

注2:直線と二次曲線を交差させたいのですが、これは、制御点の1つを端点と同一直線上に設定することで処理できると思います。

4

2 に答える 2

4

近似解または正確な解(最大倍精度)に関心があるかどうかによって異なります。近似値の場合、曲線を関数ft)として単純にパラメーター化し、間隔を入れ子にして、曲線間の距離を最小化するtの値を見つけることができます。

正確な解決策を得るには、2つの円錐曲線が交差する4つの点を見つける必要があります。ウィキペディアにこれについての短い段落があります。書籍「射影幾何学の展望」には、詳細を説明する長いセクションがあります。確かに、さまざまな言語で利用できる実装があります。Asymptote用のものが今頭に浮かびます。ただし、その一般的なケースの実装は非常に恐ろしいように見えるので、そこでは過度に複雑なことをしている可能性があります。

4つの交点がすべて揃った後でも、QuadCurveの端点で区切られた円錐曲線の一部にあるものを決定する必要がありますが、これは比較すると簡単です。したがって、合計すると、次の3つのステップがあります。

  1. 端点と制御点から円錐曲線セクションの行列を計算します
  2. 鉛筆の縮退要素を使用して円錐曲線を交差させます
  3. これらの交差点が端点の間にあるかどうかを決定します

これらのステップの1つの数学的な詳細に問題がある場合は、数学スタック交換について質問する方がよい場合があります。数学の問題を解く経験が豊富なだけでなく、数学を植字するためのMathJax機能により、ここでの回答よりもはるかに読みやすくなります。

直線についての注2については、これははるかに簡単です。なぜなら、その問題を座標で表現すると、次の単純なアプローチの次数4の方程式ではなく、2次方程式になってしまうからです。一般的な問題であり、上記の参考文献で説明されているように解決した場合でも、次数3です。円錐曲線と線を交差させることがソリューションのステップになるように一般的なアプローチを書くことができるので、このための方法があれば十分に機能する可能性があります。

于 2012-07-13T23:55:52.927 に答える
1

実用的なアプローチはArea、曲線を追加して結果を閉じることによって2つのを作成することです。これらAreaの交点は、いくつかのセグメントの端点としてすべての元の交点を持つ必要があります。したがって、結果のパスを繰り返し、ベジェ制御点を無視し、検出された各セグメントの終点について、それが元の曲線上にあるかどうかを確認します。

または、これがどのように行われるかを実装Areaして、ニーズに合わせて調整できるかどうかを確認してください。ライセンスでGPL2コードを含めることが許可されている場合。

于 2012-07-14T08:08:27.390 に答える