当前位置: 首页 > 面试题库 >

快速矩形到矩形相交

康锦
2023-03-14
问题内容

测试2个矩形是否相交的快速方法是什么?

在Internet上进行了搜索,找到了这种单行代码(WOOT!),但我不知道如何用Javascript编写它,它似乎是用C ++的古老形式编写的。

struct
{
    LONG    left;
    LONG    top;
    LONG    right;
    LONG    bottom;
} RECT;

bool IntersectRect(const RECT * r1, const RECT * r2)
{
    return ! ( r2->left > r1->right
        || r2->right < r1->left
        || r2->top > r1->bottom
        || r2->bottom < r1->top
        );
}

问题答案:

这就是将代码转换为JavaScript的方式。请注意,正如注释所建议的那样,您的代码和本文的代码中都有一个错字。该功能r2->right left应该r2->right < r1->left并且r2->bottom top应该具体r2->bottom < r1->top起作用。

function intersectRect(r1, r2) {
  return !(r2.left > r1.right || 
           r2.right < r1.left || 
           r2.top > r1.bottom ||
           r2.bottom < r1.top);
}

测试用例:

var rectA = {
  left:   10,
  top:    10,
  right:  30,
  bottom: 30
};

var rectB = {
  left:   20,
  top:    20,
  right:  50,
  bottom: 50
};

var rectC = {
  left:   70,
  top:    70,
  right:  90,
  bottom: 90
};

intersectRect(rectA, rectB);  // returns true
intersectRect(rectA, rectC);  // returns false


 类似资料:
  • 我有两个矩形,每个矩形有4个值: 左侧位置< code>X、顶部位置< code>Y、宽度< code>W和高度< code>H: 矩形不旋转,如下所示: 判断两个矩形的交集是否为空的最佳解是什么?

  • 问题内容: 除了我的Rect类: 我有一种方法来检查两个Rect是否相交(无双关): 测试用例: 这堂课很好。 我想知道的是,是否还有另一种(也许更快)的方式来检查矩形是否相交。我可以以某种方式对其进行优化吗? 问题答案: 我倾向于将矩形存储为min x,min y,max x和max y。然后当发生重叠时 如果它们重叠,则交点定义为 如果它们具有相同的边界,则应根据您是否认为它们重叠来进行一些注

  • 给定一个矩形R1和一组矩形R2、R3、…。如何找到与主矩形R1相连的所有矩形。 我不仅需要直接连接到R1的矩形,还需要所有间接连接到R1的矩形。例如,如果 R2 连接到 R1,R3 连接到 R2。R3 被视为连接到 R1。 矩形的形式为(xmin,ymin,xmax,ymax)。所有矩形都与轴平行。当矩形重叠或接触时,它们被认为是连接的。当它们仅接触角落时,它们不被视为连接。 示例: 在该示例中,

  • 基础示例 <vuep template="#example"></vuep> <script v-pre type="text/x-template" id="example"> <template> <div class="amap-page-container"> <el-amap vid="amapDemo" :zoom="zoom" :center="c

  • SVG Shapes SVG有一些预定义的形状元素,可被开发者使用和操作: 矩形 <rect> 圆形 <circle> 椭圆 <ellipse> 线 <line> 折线 <polyline> 多边形 <polygon> 路径 <path> 下面的章节会为您讲解这些元素,首先从矩形元素开始。 SVG 矩形 - <rect> 实例 1 <rect> 标签可用来创建矩形,以及矩形的变种: 下面是SVG代

  • 现在假设我们要创建一个结构体来表示一个矩形。问题在于,我需要提供哪些信息来指定一个矩形?为了简化问题,我们假设矩形是垂直方向或水平方向的,没有倾斜角度。 存在几种可能:我可以指定矩形的中心(两个坐标)和大小(宽度和高度),我也可以指定矩形的一个角和矩形的大小,或是指定两个相对的角。 现有程序中最常见的选择是指定矩形的左上角和大小。在C++中,我们定义一个结构,包含着一个Point类型和两个doub