Я рисую некоторые сплайны, используя 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)
, кажется, не делает то, что я хочу.Он возвращает true
, если Point
находится внутри области между сплайном и прямой линией между (x0; y0) и (x1; y1).
В приведенном выше примере он вернет true длявся область "звезд":
p0 -----------
*********\
******\
***\
*\*
\*******
`------------- p1
Но только хотите определить, когда точка точно расположена на сплайне.
Есть ли способ добиться того, чего я хочу?
Любые идеи с благодарностью!
РЕДАКТИРОВАТЬ: я нашел объяснение моей проблемы в документации, но это не помогает мне найти решение:
Содержит иМетоды intersects рассматривают внутреннюю часть Shape как область, которую он охватывает, как если бы он был заполнен.Это означает, что эти методы рассматривают незакрытые фигуры как неявно закрытые с целью определения, содержит ли фигура прямоугольник или пересекает его или фигура содержит точку.