2017-01-17 64 views
0

我需要編寫一個接受線段端點和附加點的函數(使用Javascript),並返回相對於起點的座標。因此,基於這樣的畫面:相對線段平移座標

enter image description here

function perpendicular_coords(x1,y1, x2,y2, xp,yp) 

返回[xp',yp']其中XP「爲選自(XP,YP)沿着垂直於所述線段的線的距離,和YP」是從距離( x1,y1)到垂直線與線段相交的點。

我試過到目前爲止:

function rotateRad(cx, cy, x, y, radians) { 
    var cos = Math.cos(radians), 
     sin = Math.sin(radians), 
     nx = (cos * (x - cx)) + (sin * (y - cy)) + cx, 
     ny = (cos * (y - cy)) - (sin * (x - cx)) + cy; 
    return [nx, ny]; 
} 

[xp', yp'] = rotateRad(x1,y1, xp, yp, Math.atan2(y2-y1,x2-x1)); 

我沒有寫的功能;從https://stackoverflow.com/a/17411276/1368860

+0

我假設你想返回'[XP,YP]',而不是提供'[XP 'YP']',否則這個問題是微不足道的... - ) –

+0

它看起來像有一個額外的'在圖片中。我有三個藍色點的座標,並希望沿着兩個橙色線段的距離。 – Sigfried

+0

@ScottSauyet,我加了我試過的問題。謝謝。 – Sigfried

回答

1

得到了它,我採取了不同的方法,通過結合兩種功能:

  1. 要獲得YP「我覺得使用答案從這裏交匯點:Perpendicular on a line from a given point
  2. 爲了讓XP」我計算(xp,yp)和線之間的距離,使用以下公式:https://en.wikipedia.org/wiki/Distance_from_a_point_to_a_line

不是最優雅的解決方案,但它似乎工作。

生成的代碼https://jsfiddle.net/qke0m4mb/

function perpendicular_coords(x1, y1, x2, y2, xp, yp) { 
    var dx = x2 - x1, 
     dy = y2 - y1; 

    //find intersection point  
    var k = (dy * (xp-x1) - dx * (yp-y1))/(dy*dy + dx*dx); 
    var x4 = xp - k * dy; 
    var y4 = yp + k * dx; 

    var ypt = Math.sqrt((y4-y1)*(y4-y1)+(x4-x1)*(x4-x1)); 
    var xpt = distance(x1, y1, x2, y2, xp, yp); 
    return [xpt, ypt]; 
} 

// Distance of point from line 
function distance(x1, y1, x2, y2, xp, yp) { 
    var dx = x2 - x1; 
    var dy = y2 - y1; 

    return Math.abs(dy*xp - dx*yp + x2*y1 - y2*x1)/Math.sqrt(dy*dy + dx*dx); 
} 
+0

所以,看起來問題不在於我的轉換代碼,而在於我後來的結果。我認爲你的解決方案與我的答案相同。 – Sigfried

+0

別管我剛纔說的。我的一切都搞砸了。你的作品。 +1 – Sigfried