我已经走得很远,但似乎没有用。
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)线但不是最接近的线。我的功能仍然有问题,但我无法理解。
编辑:
所以这是我的问题
我的函数将第三个坐标放在C上,该坐标是90度,但不是它应该在哪里(红点)它以某种方式延伸到另一点。
答案 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点的图片: