Я рисую несколько сплайнов с помощью GeneralPath следующим образом:Swing: обнаружить движение мыши на generalpath
GeneralPath path = new GeneralPath();
path.moveTo(x0, y0);
path.curveTo(x0 + 100, y0, x1 - 100, y1, x1, y1);
((Graphics2D) g).draw(path);
В основном, это втягивает сплайн, который похож на кабель или провод между точкой (х0; у0) и точки (x1; y1).
p0 --
\
\
`-- p1
Розыгрыш хорошо, но теперь я хотел бы, чтобы определить, когда курсор мыши парят этот сплайн. Проблема в том, что метод contains(Point)
, похоже, не делает то, что я хочу. Он возвращает true
, если Point
находится внутри области между сплайном и прямой линией между (x0; y0) и (x1; y1).
В приведенном выше примере, он возвращает истину для всей области «звезды»:
p0 -----------
*********\
******\
***\
*\*
\*******
`------------- p1
Но только хочу, чтобы определить, когда точка точно находится на сплайн.
Есть ли способ достичь того, чего я хочу?
Любые идеи очень ценятся!
EDIT: я нашел объяснение моей проблемы в документации, но это не помогает мне найти решение:
содержит и пересекающие методы рассмотреть интерьер формы, чтобы быть область, в которой она находится, как если бы она была заполнена . Это означает, что эти методы рассматривают незамкнутые формы как , неявно закрытые для целей , определяющие, содержит ли форма или , пересекает прямоугольник или если форма содержит точку.
Можно ли оценить линию между точками путем вычисления линейного уравнения (y = ax + b, где a, b - постоянные)? Вы можете использовать это, чтобы оценить, находится ли (x, y) мыши над линией. – Mazyod