我有这段代码:
public void paint(Graphics g) {
g.setColor(Color.black);
g.fill3DRect(myX, myY, 20, 20,true);
g.setColor(Color.red);
g.fillOval(nX, nY, 20, 20);
}
两个形状的坐标由用户给出,我怎么知道它们之间是否有交叉? (我不需要交叉点的坐标,只需要知道是否有)
提前致谢!
答案 0 :(得分:0)
这在很大程度上取决于背景和实际意图。一个非常简单的解决方案是使用Area
类:只需为要检查的每个形状创建一个Area
对象,并intersect
这些区域:
Shape shape0 = new Rectangle2D.Double(mxY, myY, 20, 20);
Shape shape1 = new Ellipse2D.Double(nX, nY, 20, 20);
Area a0 = new Area(shape0);
Area a1 = new Area(shape1);
a0.intersect(a1);
if (!a0.isEmpty()) { /* They intersect! */ }
(顺便说一句:您可以将Graphics
对象转换为Graphics2D
,然后直接绘制Shape
个对象。
重要:请注意,与分析解决方案相比,此解决方案效率可能非常低。如果您只需检查交叉的“简单”对象(圆形,矩形......),您可能希望实现分析解决方案,特别是如果您必须检查这些简单对象中的“很多”。 Area
解决方案的优点是简单和通用:它适用于任意形状,甚至复杂的形状,如字体字母或手动创建的Path2D
对象。