Java:找到可能的交集

时间:2014-01-21 20:26:50

标签: java draw intersection rect

我有这段代码:

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);
}

两个形状的坐标由用户给出,我怎么知道它们之间是否有交叉? (我不需要交叉点的坐标,只需要知道是否有)

提前致谢!

1 个答案:

答案 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对象。