找到最近的90度角点

时间:2014-12-02 14:25:17

标签: javascript math coordinates coordinate-systems

我已经走得很远,但似乎没有用。

enter image description here

A = 50.88259382849774,6.003988087177277
B = 50.88269282423443,6.0036662220954895
C = 50.882530369581545,6.003847271203995

C坐标距离90度线(x)略微偏离,我所做的这个函数应该将C放在离x线最近的位置。

this.snapCoords = function(a, b, c){
    var result = (b.x-a.x)*(c.x-b.x)+(b.y-a.y)*(c.y-b.y);

    var negative = false;
    if(result < 0){
        result = result*-1;
        negative = true;
    }
    result = Math.sqrt(result);
    result = result/2;

    if(negative === false){
        var d = {x: c.x+result, y: c.y-result};
    }
    else{
        var d = {x: c.x-result, y: c.y+result};
    }

    console.log(d); // returns : 50.88246729610898,6.003910344676565
}

确实获得了90度(x)线但不是最接近的线。我的功能仍然有问题,但我无法理解。

编辑:

所以这是我的问题

enter image description here

我的函数将第三个坐标放在C上,该坐标是90度,但不是它应该在哪里(红点)它以某种方式延伸到另一点。

1 个答案:

答案 0 :(得分:1)

我认为OP试图将C点投射到通过B点的直线上,并且垂直于AB线。如果是这种情况,则投影的数学运算不正确。您可以找到投影点D

D = C - 点(vec(BC),vec(AB))* vec(AB)/ | vec(AB)| ^ 2

通过该计算,投影点D将是(50.8825952820492,6.00363622113846)。

以下是A,B,C和D点的图片:
Pict1