私はベジエ パスを使用して必要な曲線を描くプロジェクトに取り組んできました。私のプロジェクトの各基本形状は、3 つのキュービック ベジエ曲線で構成され、端から端まで配置され、勾配が交わる場所と一致します。
解決しなければならない基本的な問題は、3 つのベジエ曲線で構成される複合曲線がそれ自体と交差するかどうかです。しばらく考えた後、曲線の制約を考えると、タスクを別のものに単純化できることがわかりました。
3 つのベジエ パスのそれぞれの曲率は、隣接する曲線に対して曲率の方向が反対である必要があります。つまり、あるベジエ曲線が別のベジエ曲線に接する変曲点が存在する必要があります。そうでない場合は、カーブを生成したパラメータ セットを拒否して、別のセットを選択したいと考えています。
いずれにせよ、私の基本的な質問は、曲線が互いに接する変曲点があるかどうかを検出する方法です。
この図では、3 つのベジエ曲線がそれぞれ異なる色で示されています。左側の黒い曲線は、赤い曲線と交わる点で反対方向にカーブしていますが、右側の黒い曲線は同じ方向にカーブしています。赤と左の黒の曲線が交わる変曲点がありますが、赤と右の黒の曲線が交わる場所ではありません。
編集: 以下に、ベジエ パスを囲むポリゴンを示す別の画像を追加しました。黒い曲線で示されている多角形の交差線は、ループではなく変曲点をテストします。赤と青の曲線で示されているように、ある曲線が別の曲線と交差しているかどうかは、囲んでいるポリゴンが交差しているかどうかを確認することでテストできると思います。
PS 制約についていくつかの質問があったので、ここにそれらのいくつかをリストします。
- 一番左の点と一番右の点の y 値は同じです。
左端の制御点の x 値は、右端の制御点の x 値よりも小さいです。これにより
、黒と青の曲線が互いに交差しなくなります。- 左端と右端の点の傾斜は、水平から約 +/- 10 度以内です。
- 黒と赤の曲線の交点、および赤と青の曲線の交点は、曲線全体を約 3 分の 1 に分割します。正確な数値はわかりませんが、サンプル バウンドは、赤い曲線の左端の x 値が、右端の x 値の 25% から 40% の間のどこかにあるということです。
- 交点の y 値は、全体の幅の +/- の一部です。
- 交点の勾配は > 0.6 かつ < 3.0 (正または負) です。