android - 检查矩形是否相交或位于另一个矩形的一侧 (Android)

标签 android intersection rectangles

我有很多矩形,使用左上坐标描述,其中 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坐标确实很相似或很接近,但根据实际图像,它们并不相交。这是一个演示:

non-intersecting rectangles

在这张图中,我画了一条红线来描述两个矩形在代码上“有点相交”,这并不满足实际的相交。我认为这是我必须检查 y 坐标的事实,但我不再确定该怎么做,因为我认为我必须检查一系列值。

我希望我能得到一些帮助,看看一个矩形是否与另一个矩形相交或在另一个矩形旁边。也许使用库或修改我现有的代码,因为它不能正常工作。提前致谢!

最佳答案

您可以使用 Rect使用矩形,检查intersection特别是:

Rect r1 = new Rect(left1, top1, right1, bottom1);
Rect r2 = new Rect(left2, top2, right2, bottom2);

boolean result = r1.intersect(r2);

如果需要 float 坐标,可以使用RectF

关于android - 检查矩形是否相交或位于另一个矩形的一侧 (Android),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57585461/

相关文章:

android - Dagger 可以用来在 Content Provider 上执行注入(inject)吗?

javascript - 2 条 SVG 路径的交集

java - 如何平移矩形位置?

algorithm - 将 N 的长方体分成 M 体积的更小的长方体

android - 如何从android后端调用核心方法?

android.database.sqlite.SQLiteException : near "ON": syntax error (code 1):

android - 如何从 url 中获取大图像?

在字典列表中查找公共(public)键值对的pythonic方法

python - nD线与Python中凸包的交点

java - 如何在java中测试多个交叉点?