GeneralPathを使用して次のようにスプラインを描画しています。
GeneralPath path = new GeneralPath();
path.moveTo(x0, y0);
path.curveTo(x0 + 100, y0, x1 - 100, y1, x1, y1);
((Graphics2D) g).draw(path);
基本的に、これは点(x0; y0)と点(x1; y1)の間にケーブルまたはワイヤーのように見えるスプラインを描画します。
p0 --
\
\
`-- p1
描画は大丈夫ですが、マウスがこのスプラインにカーソルを合わせたときに検出したいと思います。問題は、contains(Point)
メソッドが私が望むことをしていないように見えることです。がスプラインと(x0; y0)と(x1; y1)の間の直線の間の領域内にあるtrue
場合に返されます。Point
上記の例では、「星」領域全体に対してtrueが返されます。
p0 -----------
*********\
******\
***\
*\*
\*******
`------------- p1
ただし、ポイントがスプライン上に正確に配置されている場合にのみ検出する必要があります。
私が望むことを達成する方法はありますか?
どんなアイデアでも大歓迎です!
編集:ドキュメントで問題の説明を見つけましたが、これは解決策を見つけるのに役立ちません:
containsメソッドとintersectメソッドは、Shapeの内部を、塗りつぶされたかのように囲む領域と見なします。つまり、これらのメソッドは、形状に長方形が含まれるか交差するか、または形状に点が含まれるかどうかを判断する目的で、閉じられていない形状が暗黙的に閉じられていると見なします。