2014-01-21 34 views
1

我有这样的代码:的Java:查找可能的交集

2个形状
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

[Circle-Rectangle碰撞检测(交集)]的可能重复(http://stackoverflow.com/questions/401847/circle-rectangle-collision-detection-intersection) – Ishtar

回答

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解决方案的优点在于其简单性和通用性:它适用于任意形状,甚至复杂形状(如字体字母或手动创建的对象)。