주어진 점이 곡선에 있는지 확인하는 방법이 있습니까? 나는 경계선이 아니라 커브의 선을 의미합니다. 마우스 그렇지 않으면 스트로크 (레드 라인)과 거짓을 초과하는 경우에만 나는 mouseMoved
인쇄 "true"를 원하는마우스 오버 커브
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();
}
}
을 :
다음은 실행할 수있는 간단한 테스트 프로그램입니다.
그것은 할 수있는 사소한 것 같은 느낌,하지만 난 그것을 작동시킬 수있는 방법을 알아낼 수 없습니다.
도와주세요.
감사합니다. 그것은 작동합니다! 코드에서 NullPointerException을 고쳐야했지만 누군가 초기화되지 않은 점의 setLocation을 시도했습니다 ... 개발자에게이 문제를 알리도록하겠습니다. – Artur