javascript - 在 JavaScript 中检查正方形是否与直线相交

标签 javascript geometry line-intersection

给定正方形的位置和尺寸,JavaScript 中用于测试直线是否穿过矩形的等式是什么?

到目前为止我尝试过的是:

function isSquareIntersectingLine(square, line) {
    return (
        line.startX >= square.topLeftX &&
        line.startX <= square.topLeftX + square.width &&
        line.endX >= square.topLeftX + square.width
    );
}

这适用于尺寸为:

Square: {topLeftX: 0, topLeftY: 0, width: 5, height: 5}
Line: {startX: 2, startY: -4, endX: 6, endY: 3}

但是如果尺寸是这样的,那就不行了:

Square: {topLeftX: 0, topLeftY: 0, width: 5, height: 5}
Line: {startX: 2, startY: -4, endX: 3, endY: 10}

在 JavaScript 中检查线段是否与正方形相交的正确公式是什么?

最佳答案

使用Cohen-Sutherland clipping algorithm (或另一个 line clipping 一个)

获取两个段末端的代码并检查:

if both codes are zero, segment is inside (A-B case)
if code1 & code2 != 0 segment is outside  (K-L case)
if code1 & code2 = 0, analyze codes
    zero-nonzero: intersection exists (C-D)
    if code1 | code2 = 1100, 0011 : intersection exists (E-F)
         otherwise check for intersections with edges (GH)

enter image description here

关于javascript - 在 JavaScript 中检查正方形是否与直线相交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53908349/

相关文章:

javascript - 提交后清除表格

javascript - 基于 json 到数组数组的日期的平均值

java - 旋转后模型的顶点选择和状态

javascript - 形状(三 Angular 形)绘制不正确 - HTML5 Canvas/JavaScript 问题

c++ - 固定 z 轴上的简单线平面相交?

python - 找到点和线段(不是线)之间的最短距离

java - 直线与垂直线的交点精度

javascript - JSON 格式在 JSONLint 上失败

javascript - 如何在 javascript 中传递方法?

c# - 检查由三个 3D 点形成的平面是否与立方体相交