0

ポイントの周りの 3 次ベジエ スプラインを、外接接線で並べ替える必要があります。私の最初の試みは、外向きの接線角度を決定し、それによってソートすることでした。4 つの点を持つスプライン の場合p0, p1, p2, p3、外接接線角度は次のとおりです。

p0 != p1 ? angle(p0, p1) : p0 != p2 ? angle(p0, p2) : angle(p0, p3)

これは、実際には 2 次または直線である 3 次を退化させます。ただし、ポイントには、同じ接線角度を持つ 2 つの出力スプラインが含まれる場合がありますが、制御点または終点の位置は、スプラインの後で、並べ替え順序に影響を与えます。

退化したケースを処理し、スプラインの残りの部分を使用して接線が等しい場合のケースを明確にする、外向きの角度で 2 つの任意のベジェ スプラインを並べ替えるための優れた閉形式アルゴリズムはありますか? 曖昧さがなくなるまで値を試すことでそれを行うことtができますが、閉じた形式のアルゴリズムが存在する可能性があるようです。

4

1 に答える 1

0

私の知る限り、この特定の問題に対する閉じた形式の解決策はありません。曲線のセットをある点の外接線で並べ替えたいとします。しかし、接線がその時点で等しい場合、曲線はすでにソートされています! あなたが実際に望んでいるのは、開始点から離れて曲線に沿って移動するときに接線が発散するかどうかを調べることであることを理解しています.

では、そうしましょう。t = 0 から小さな増分で接線を比較します (t は、任意のパラメトリック カーブのカーブ時間パラメータです)。

これはJavaScriptの小さなデモです。

関数 compareTan は、小さい増分 (t = 1e-5) で接線の角度を比較します。依存するのは、特定の t パラメータでタンジェントを返すメソッドだけです。二次のケースを実装することはそれほど難しくありません — 線については、それらを直接比較できます。

于 2014-06-21T10:33:04.993 に答える