2011-02-09 2 views
2

Я рисую несколько сплайнов с помощью 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: я нашел объяснение моей проблемы в документации, но это не помогает мне найти решение:

содержит и пересекающие методы рассмотреть интерьер формы, чтобы быть область, в которой она находится, как если бы она была заполнена . Это означает, что эти методы рассматривают незамкнутые формы как , неявно закрытые для целей , определяющие, содержит ли форма или , пересекает прямоугольник или если форма содержит точку.

+0

Можно ли оценить линию между точками путем вычисления линейного уравнения (y = ax + b, где a, b - постоянные)? Вы можете использовать это, чтобы оценить, находится ли (x, y) мыши над линией. – Mazyod

ответ

1

Просто сделайте кривую. Вернитесь к исходной точке. Но это будет действительно, очень сложно для пользователя получить ровно над вашей кривой!

+0

Я нашел решение. Я создал «путь выбора», который представляет область между моим сплайном и моим сплайном, переведенным на 6 пикселей в X (+ то же для Y). Спасибо за Ваш ответ! – NewbiZ