Javascript 如何确定一个点是否位于另一个点的楔中

Javascript 如何确定一个点是否位于另一个点的楔中,javascript,canvas,Javascript,Canvas,我有一张画布,画了两个点。 我必须从每个点画两条直线。然后我们必须检查点u是否看到点v,反之亦然 要知道,有必要查看点v是否位于点u的楔块中,反之亦然: - - 如果两个点位于每个点的楔块中,则在这两个点之间绘制一段 如何在画布javascript中实现这种楔形?两个向量的叉积。 使用直线(x1,y1,x2,y2)ax的叉积,向量(x2-x1,y2-y1)和从直线起点到点x,y(x-x1,y-y1)的向量将给出一个数字,如果该点在直线的左侧,则该数字为负数;如果该点沿直线,则该数字为零;如果该点

我有一张画布,画了两个点。 我必须从每个点画两条直线。然后我们必须检查点u是否看到点v,反之亦然

要知道,有必要查看点v是否位于点u的楔块中,反之亦然:

-

-

如果两个点位于每个点的楔块中,则在这两个点之间绘制一段

如何在画布javascript中实现这种楔形?

两个向量的叉积。 使用直线(x1,y1,x2,y2)ax的叉积,向量(x2-x1,y2-y1)和从直线起点到点x,y(x-x1,y-y1)的向量将给出一个数字,如果该点在直线的左侧,则该数字为负数;如果该点沿直线,则该数字为零;如果该点在直线的右侧,则该数字为正数

因此,对于V视图中的点,它必须位于V左臂的右侧和V右臂的左侧

A V描述如下

const v = {
    lx : ?,  // point on left V
    ly : ?, 
    x : ?,  // point of V
    y : ?,
    rx : ?,
    ry : ?,
}
如果
V1
可以看到
V2
其中
V1
V2
是如上所述的对象,则以下函数将返回true

function canSee(v1,v2){
    const lx = v1.lx - v1.x;  // get vector from center to left line end
    const ly = v1.ly - v1.y;
    const cx = v2.x  - v1.x;  // get vector from center to v2's center
    const cy = v2.y  - v1.y;
    const rx = v1.rx - v1.x;  // get vector from center to right line end
    const ry = v1.ry - v1.y;

    // get the cross product of left and right arms to the other V's center
    const lc = lx * cy - ly * cx;
    const rc = rx * cy - ry * cx;
    
    return (lc > 0 && rc < 0);  // return true if V2 center is right of
                                // left arm and left of arm.
                                // else return false;
}

各点位于正确的侧面是很重要的。当站在测线起点并朝测线终点看时,定义左侧和右侧

这是无限距离吗?@LiamMacDonald点或测线的无限距离?如果是,是的,它在工作!Thx@Blindman67你能看到这个吗
if(canSee(v1, v2) && canSee(v2, v1)){ } // both can see each other
else { } //one or none can see the other