我有这个代码:
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);
}
这两个形状的坐标是由用户给出的,我如何知道它们之间是否有交集? (我不需要路口坐标,只需要知道是否有)
提前致谢!
最佳答案
这在很大程度上取决于上下文和实际意图。一种非常简单的解决方案是使用 Area
类:只需为要检查的每个形状创建一个 Area
对象,然后相交
这些领域:
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
对象。
关于Java:找到可能的交集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21268405/