查找线或点是否在线附近

Fab*_*ook 7 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);
}
Run Code Online (Sandbox Code Playgroud)

这完美适用于此.但是现在我需要找出一个点是否在一条线的区域内.例如,此处的蓝点将返回true,紫色线将返回true.但不是绿线或点.此外,我需要找出一条线是否会切断线.

在此输入图像描述

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

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;
}
Run Code Online (Sandbox Code Playgroud)

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

我怎样才能做到这一点?我可以将函数传递给一行,或者我只能传递一个点.

如果传递了一行,那么我们将运行上述函数.我希望它返回一个数组.如果数组中的第一项靠近它(在红色区域中),则返回该数组中的第一项,如果该段切割该行,则该数组中的第二项将返回.意思是如果它只是一个点,那么第二个项将永远是假的.

如何确定线条或点是否位于红色区域内?

Nie*_*sol 7

引用我对这个问题的回答

第一步是找到点到线上的正常投影.这实际上非常简单:从第1点到目标的距离,从第2点到目标,分别称它们为D1和D2.然后计算D1+(D2-D1)/2.这是从点1到线上投影点的距离.

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

编辑:一张图片胜过千言万语.这是一个图表:

图http://adamhaskell.net/img/schematic.png

(事后看来,可能应该让那些圆圈变成不同的颜色......而且,紫色线应该垂直于AB线.用蓝线怪我可怕的目标!)