2

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の内部を、塗りつぶされたかのように囲む領域と見なします。つまり、これらのメソッドは、形状に長方形が含まれるか交差するか、または形状に点が含まれるかどうかを判断する目的で、閉じられていない形状が暗黙的に閉じられていると見なします。

4

1 に答える 1

1

開始点に戻るには、curveToを実行するだけです。しかし、ユーザーがあなたのカーブを正確に乗り越えるのは本当に、本当に難しいでしょう!

于 2011-02-09T15:31:01.870 に答える