我找到了解决方案,但想确保我的逻辑是最有效的。我觉得有更好的方法。我有左下角的(x,y)坐标,2个矩形的高度和宽度,我需要返回第三个矩形,即它们的交点。我不想发布代码,因为我觉得它在作弊。
我可能会考虑这个问题并编写效率低下的代码。我已经提交了一个工作程序,但是想找到我所知的最佳方法。如果有人可以同意我或指出正确的方向,那就太好了!
为什么不使用JDK API为您做到这一点?
Rectangle rect1 = new Rectangle(100, 100, 200, 240);
Rectangle rect2 = new Rectangle(120, 80, 80, 120);
Rectangle intersection = rect1.intersection(rect2);
要使用java.awt.Rectangle
类,构造函数的参数为:x,y,宽度,高度,其中x,y是矩形的左上角。您可以轻松地将左下角的点转换为左上角。
我推荐上述方法,但是如果您真的想自己做,可以按照以下步骤操作:
比方说(x1, y1), (x2, y2)
分别(x3, y3), (x4, y4)
是Rect1的左下角和右下角 。
x1
,x3
和中较小的一个x2
,x4
比方说xL
, xR
分别
xL >= xR
,则不返回任何交集y1
,y3
和中较小的一个y2
,y4
比方说yT
, yB
分别
yT >= yB
,则不返回任何交集(xL, yB, xR-xL, yB-yT)
。更像Java的伪代码:
// Two rectangles, assume the class name is `Rect`
Rect r1 = new Rect(x1, y2, w1, h1);
Rect r2 = new Rect(x3, y4, w2, h2);
// get the coordinates of other points needed later:
int x2 = x1 + w1;
int x4 = x3 + w2;
int y1 = y2 - h1;
int y3 = y4 - h2;
// find intersection:
int xL = Math.max(x1, x3);
int xR = Math.min(x2, x4);
if (xR <= xL)
return null;
else {
int yT = Math.max(y1, y3);
int yB = Math.min(y2, y4);
if (yB <= yT)
return null;
else
return new Rect(xL, yB, xR-xL, yB-yT);
}
如您所见,如果您的矩形最初是由两个对角线定义的,则将更加容易,您只需要执行该// find intersection
部分即可。
我有两个矩形,每个矩形有4个值: 左侧位置< code>X、顶部位置< code>Y、宽度< code>W和高度< code>H: 矩形不旋转,如下所示: 判断两个矩形的交集是否为空的最佳解是什么?
问题内容: 除了我的Rect类: 我有一种方法来检查两个Rect是否相交(无双关): 测试用例: 这堂课很好。 我想知道的是,是否还有另一种(也许更快)的方式来检查矩形是否相交。我可以以某种方式对其进行优化吗? 问题答案: 我倾向于将矩形存储为min x,min y,max x和max y。然后当发生重叠时 如果它们重叠,则交点定义为 如果它们具有相同的边界,则应根据您是否认为它们重叠来进行一些注
问题内容: 测试2个矩形是否相交的快速方法是什么? 在Internet上进行了搜索,找到了这种单行代码(WOOT!),但我不知道如何用Javascript编写它,它似乎是用C ++的古老形式编写的。 问题答案: 这就是将代码转换为JavaScript的方式。请注意,正如注释所建议的那样,您的代码和本文的代码中都有一个错字。该功能应该并且应该具体起作用。 测试用例:
有人知道一种算法可以用来确定两个矩形重叠的程度和方向吗?我花了好几个小时试图弄清楚这一点,这样我就可以将它实现为一个用slick2d java编写的基本平铺游戏。
我试图找出两个矩形是否相互重叠。我将下面的矩形表示为< code>[x1,x2] x [y1,y2] 我只需要一个伪代码,我可以实现它来查找矩形是否彼此重叠。
本文向大家介绍canvas透明度是0.6的矩形和透明度是0.2的矩形叠加到一起,透明度是多少?相关面试题,主要包含被问及canvas透明度是0.6的矩形和透明度是0.2的矩形叠加到一起,透明度是多少?时的应答技巧和注意事项,需要的朋友参考一下 1-0.4*0.8 = 0.68 参考文章