Java:找到可能的交集

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

这两个形状的坐标是由用户给出的,我如何知道它们之间是否有交集? (我不需要路口坐标,只需要知道是否有)

提前致谢!

最佳答案

这在很大程度上取决于上下文和实际意图。一种非常简单的解决方案是使用 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/

相关文章:

language-agnostic - 高效集交集——判断交集是否大于k

java - 将 infix 转换为 Postfix 时扫描多位数字

java - 多次执行 if(false) 不好吗?

java - 使用改造进行注册时遇到问题

python - 获取日期时间范围列表的并集和交集 python

c++ - 具有公共(public)交集的最大范围数

java - 如何修复使用 android Studio 3.5 和 3.5.0 gradle 编译的 Android Annotations 4.6.0

flash - 如何创建垂直颜色渐变(或除平面水平渐变之外的任何其他角度)

opencv - 在 OpenCV 中绘制透明图像

Java Graphics 清晰的弧线