我正在开发一些java中的可视化。我有一个问题。我正在我的程序中绘制一个Arc2D,我想在我的Arc2D中添加一个MouseInputListener。问题是,Arc2D对象在一个矩形上延伸,而不仅仅是绘制的线。因此,当我想获得鼠标悬停效果时,它对整个矩形而不仅仅是Arc2D的线。你们有没有解决这个问题的方法?
我的代码如下所示:
final Arc2D arc =
new Arc2D.Double(x_pos, 10, x2_pos-x_pos, 190, 0, 360, Arc2D.OPEN);
JPanel jp = new JPanel();
addMouseInputListener(new MouseInputAdapter() {
@Override
public void mouseMoved(MouseEvent e) {
System.out.println( "X: " + e.getX() + " Y: " + e.getY() +
" Does it touch the arc?: " + arc.contains(e.getX(), e.getY()));
}
// More MouseInputListener methods...
});
ga.draw(arc);
答案 0 :(得分:0)
您需要计算点与曲线的距离。然后看看它是否在离曲线适当的距离内。你不会想要一个只有1个像素厚的热点吗?!
要做到这一点并不像看起来那么容易。你需要采取
rsquared = pow((e.getX()-circle_centre.x),2) + pow(e.getY()-circle_centre.y,2);
然后查看它是否位于间隔
rsquared<circle_radius+threshold && rsquared>circle_radius-threshold
然后检查角度
angle = Math.atan2(e.getX()-circle_centre.y, e.getY()-circle_centre.y);
也必须位于你想要的间隔内。