Есть ли способ проверить, находится ли данная точка на кривой? Я имею в виду ход кривой, а не границы.Мышь над кривой
Вот простой тест программы, которые вы можете запустить:
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import javax.swing.JFrame;
public class Test extends Canvas implements MouseMotionListener {
private JFrame frame;
private CubicCurve2D curve;
private static final int OFFSET = 1000;
public Test() {
frame = new JFrame();
addMouseMotionListener(this);
setPreferredSize(new Dimension(800, 600));
setBackground(Color.WHITE);
frame.add(this);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
@Override
public void paint(Graphics g) {
super.paint(g);
Graphics2D g2 = (Graphics2D) g;
curve = new CubicCurve2D.Double(10, 100, 700, -500
+ Math.random() * OFFSET, -500 + Math.random() * OFFSET, 700,
590, 500);
g2.setPaint(Color.RED);
g2.setStroke(new BasicStroke(2));
g2.draw(curve);
g2.setPaint(Color.lightGray);
g2.fill(curve);
}
@Override
public void mouseMoved(MouseEvent e) {
System.out.println(curve.contains(e.getX(), e.getY()));
}
@Override
public void mouseDragged(MouseEvent e) {}
public static void main(String[] args) {
new Test();
}
}
Я хочу mouseMoved
печать «истина» только тогда, когда мышь находится над инсультом (красная линия) и ложь в противном случае.
Это похоже на тривиальную вещь, но я не могу понять, как я могу заставить ее работать.
Пожалуйста, помогите.
Спасибо, миллион! Оно работает! Хотя мне пришлось исправить NullPointerException, так как в коде кто-то пытается установитьLocation неинициализированных точек ... Я дам разработчикам знать об этой проблеме. – Artur 2010-12-10 17:12:35