3

複数のベジェ曲線と直線セグメントで構成される閉じたパスがあります。マウスポインタの現在の位置がパスの内側にあるか外側にあるかを確認するにはどうすればよいですか?

エリアを離れるマウスの例:
マウスを離れる

エリアに入るマウスの例:
マウスで入力

4

3 に答える 3

7

まず、使用しているグラフィックライブラリがすでにこのヒットテストを提供しているかどうかを確認する必要があります。

自分でコーディングする必要がある場合、完全に正確な答えを得るには、2次方程式または3次方程式(ベジェ曲線の次数に応じて)を解いて、これらのパスとの交点を決定する必要があります。まさにこの問題に関する論文があるようです。

ただし、パスの線形近似を作成して(つまり、パスを密に評価して)、標準のポリゴン内ポイントテストを使用する方がはるかに賢明だと思います。これは、選択した許容誤差(1ピクセルなど)に対して正確である可能性があります。

于 2011-06-22T18:34:12.727 に答える
1

領域が比較的小さい場合は、マウスの位置から開始してフラッドフィルを実行できます。塗りつぶしがバウンディングボックス(事前計算可能)の外側にある場合は、領域の外側にあります。

参照: http: //en.wikipedia.org/wiki/Flood_fill

于 2011-06-22T19:32:38.570 に答える
1

ポイントがベジェパスの内側にあるか外側にあるかをテストするには、ポイントから任意の方向に線を引き、その線がパスを横切る回数を数えます。数が奇数の場合は内側にあり、偶数の場合は外側にあります。

したがって、内部性テストは交差テストとして再表現できます。交差点にはいくつかの方法で取り組むことができます。比較的簡単なアプローチは、deCasteljauのアルゴリズムを使用して、ベジェパッチを直線セグメントで近似し、ベジェ線交叉テストを一連の線線交叉テストに減らすことです。

計算にはいくつかのショートカットを使用できることに注意してください。たとえば、描画している線が特定のベジェパッチのコントロールポイントの境界ボックスの完全に外側にある場合、パッチを横切ることはないと想定できます。deCasteljauを使用して曲線を再帰的に分割する場合は、この特定のショートカットを利用して、線分と交差しない曲線の分割セクションを破棄できます。

于 2013-04-01T19:05:41.473 に答える