Есть ли способ проверить, лежит ли данная точка на кривой? Я имею в виду штрих кривой, а не ее границы.
Вот простая тестовая программа, которую вы можете запустить:
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
печатать «true» только тогда, когда мышь находится над чертой (красная линия) и false в противном случае.
Это кажется тривиальной вещью, но я не могу понять, как заставить ее работать.
Пожалуйста, помогите.