ポイント (マウスの位置) が、一連の B-スプライン コントロール ポイントによって定義された曲線上または近くにあるときを判断したいと考えています。
B スプラインに関する情報は、n 個のコントロール ポイント (x、y 座標) のリストです。制御点のリストは、任意の長さ (>= 4) にすることができ、(n−1)/3 の 3 次ベジエ曲線で構成される B スプラインを定義します。ベジエ曲線はすべて 3 次曲線です。曲線の「近く」に定義された距離のパラメータ k,(ピクセル単位) を設定したいと考えています。マウスの位置が曲線の k ピクセル以内にある場合は true、それ以外の場合は false を返す必要があります。
この情報を提供するアルゴリズムはありますか。どのソリューションも正確である必要はありません。1 ピクセル (または座標) の許容誤差で作業しています。
次の質問が役立つようですが、正確な質問には答えていません。特に、最初のリファレンスは 4 つのコントロール ポイントのみのソリューションのようであり、定義したい近さ係数が考慮されていません。
編集: 曲線の例:
e, 63.068, 127.26
29.124, 284.61
25.066, 258.56
20.926, 212.47
34, 176
38.706, 162.87
46.556, 149.82
54.393, 138.78
フォーマットの説明は次のとおりです。「すべてのエッジには、3n + 1 の位置のリストで構成される pos 属性が割り当てられます。これらは B スプライン制御点です。点 p0、p1、p2、p3 は最初のベジエ スプライン、p3 です。 , p4, p5, p6 は秒など. ポイントはコンマで区切られた 2 つの整数で表され, ポイント (1/72 インチ) で指定された位置の X 座標と Y 座標を表します. pos 属性では、制御点のリストは、開始点 ps および/または終了点 pe の前にある場合があります。これらは、それぞれ「s」または「e」接頭辞が付いた通常の位置表現を持っています。
EDIT2:「e」ポイント(および存在する場合はs)の詳細説明。
pos 属性では、制御点のリストの前に始点 ps および/または終点 pe が続く場合があります。これらは、それぞれ「s」または「e」の接頭辞が付いた通常の位置表現を持っています。p0 に矢印がある場合、始点が存在します。この場合、矢印は p0 から ps に向かっており、ps は実際にはノードの境界上にあります。矢じりの長さと方向はベクトル (ps −p0) で与えられます。矢印がない場合、p0 はノードの境界上にあります。同様に、点 pe は、エッジのもう一方の端にある矢印を指定し、最後のスプライン点に接続します。