【发布时间】:2019-08-21 06:14:35
【问题描述】:
我有很多矩形,使用左上角坐标进行描述,其中 x 向右增加,y 向下增加。我需要找出矩形是否相互交叉。
我使用 Inkscape 绘制了我的矩形,并使用 SVG 文件中的 x 和 y 坐标(矩形的左上角)、高度、宽度和笔画宽度计算了它们,因此我进行了很多计算已经在这种方法之前做过,所以我有点假设我必须设置一个阈值或类似的东西才能真正看到它们是否相交(这解释了为什么我在我的代码中放置了 0.001,但这只是一个猜测/测试值)。
当我画它们时,我放置了它们的 x,y 坐标,我认为它们不相交,但我假设笔画宽度会对它们的 x,y 坐标产生影响。
我以为我可以在 Android 中使用 Java.Awt.Rectangle#intersects 方法,但显然我不能。我也不能使用 android.graphics.Rect#intersects,因为我正在处理 double,它只允许整数 而且我也不需要在我的屏幕上绘制它。
我已尝试根据我在网上阅读的内容为此创建自己的代码,但输出与我的预期不同,其中一些实际上是正确的,但有一些错误。下面是我尝试过的代码。
// x1_1, y1_1 = top-left coordinate of r1
// x1_2, y1_2 = top-right coordinate of r1
// x2_1, y2_1 = top-left coordinate of r2
// x2_2, y2_2 = top-right coordinate of r2
double a1 = Math.abs(x1_1-x2_2);
double a2 = Math.abs(x1_2-x2_1);
double b1 = Math.abs(y1_1 - y2_2);
double b2 = Math.abs(y1_2 - y2_1);
return !(a1>0.001 && a2>0.001 && b1>0.001 && b2>0.001);
通常,我可以看到 x 坐标确实相似或彼此接近,但根据实际图像,它们并不相交。这是一个演示:
在这张图片中,我画了一条红线来描述两个矩形在代码方面“有点相交”,它不满足实际的相交。我认为这是因为我还必须检查 y 坐标,但我不再确定该怎么做,因为我认为我必须检查一系列值。
我希望我能得到一些帮助,看看一个矩形是否与另一个矩形相交或在另一个矩形旁边。也许使用库或修改我现有的代码,因为它不能正常工作。提前致谢!
【问题讨论】:
标签: android intersection rectangles