javascript - 查找线或点是否在线附近

标签 javascript coordinates

我这里有这段代码可以确定一条线是否在一个圆圈中。 (也许你可以用它来作为你的答案的基础)

/**
*@param l1  Line point 1, containing latitude and longitude
*@param l2  Line point 2, containing latitude and longitude
*@param c   Center of circle, containing latitude and longitud
*@param r   Radius of the circle
**/
Maps.ui.inCircle = function(l1, l2, c, r){
    var a = l1.lat() - l2.lat()
    var b = l1.lng() - l2.lng()
    var x = Math.sqrt(a*a + b*b)
    return (Math.abs((c.lat() - l1.lat()) * (l2.lng() - l1.lng()) - (c.lng() - l1.lng()) * (l2.lat() - l1.lat())) / x <= r);
}

这非常适合。但是现在我需要找出一个点是否在一条线周围的区域内。例如,其中的蓝点将返回 true,而紫线 I 将返回 true。但不是绿线或点。我还需要找出一条线是否穿过这条线。

enter image description here

这是我的代码,用于查看一条线是否与这条线相交:

function getLineIntersaction(y1,x1,y2,x2, y3,x3,y4,x4){
    if (Math.max(X1,X2) < Math.min(X3,X4)) // This means no same coordinates
        return false;  
    m1 = (y1-y2)/(x1-x2); 
    m2 = (y3-y4)/(x3-x4); 
    c1 = y1-m1x1; 
    c2 = y3-m2x3; 
    if(m1=m2)//segments are parallel.
        return false;
    var x = (c1-c2)/(m2-m1); 
    if(!isNaN(x) && isFinite(x)){
        if( x < Math.max(Math.min(x1,x2),math.min(x3,x4)) || x > Math.min(Math.max(x1,x2),Math.max(x3,x4)))
            return false;
        else
            return true;
    }
    return false;
}

所以这需要与其他代码集成。

我该怎么做?我可以将函数传递给一行,也可以只传递一个点。

如果传递了一行,那么我们将运行上面的函数。我希望它返回一个数组。如果它靠近它(在红色区域),数组中的第一项将返回,如果线段切割线,数组中的第二项将返回。这意味着如果它只是一个点,那么第二项将始终为假。

问题

如何判断线或点是否位于红色区域内?

最佳答案

引用我对 this question 的回答

第一步是找到点在直线上的法线投影。这其实很简单:取点1到目标的距离,点2到目标的距离,分别称它们为D1和D2。然后计算D1+(D2-D1)/2。这是从点 1 到线上投影点的距离。

您现在可以找到那个点,并获得从那个点到目标的距离。如果距离为零,则目标正好在直线上。如果距离小于 5,则目标距离小于 5px,依此类推。

编辑:一张图片胜过一千个字。这是一个图表:

Diagram
(来源:adamhaskell.net)

(事后看来,可能应该把那些圆圈换成不同的颜色……另外,紫色线应该垂直于线 AB。蓝线归咎于我糟糕的瞄准!)

关于javascript - 查找线或点是否在线附近,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14553105/

相关文章:

javascript - 部分渲染 html5 canvas - 性能

javascript - NodeJs 以字节为单位获取变量的大小

javascript - 在上下文中使用 with 语句是个好主意吗?

python - Numpy:分别给定每个坐标的矩阵来构造点矩阵的替代方法

canvas - 围绕一系列坐标绘制轮廓

.net - 在 Windows 窗体应用程序 (.net) 中单击图像的 X/Y 坐标

javascript - 在 javascript 中调用自定义函数而不是 getfullyear()

javascript - 当我的数组已满时如何调用函数

php - MYSQL 按最近的 UTM 坐标对结果进行排序

android - 如何在动画之后将更改应用到 View 位置?