2017-01-17 6 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

私はあなたが返すようにしたいと仮定し、'結果のは他の問題は簡単です...: - ) –

+0

写真の中に余分なものがあるように見えます。私は3つの青い点の座標を持ち、2つのオレンジ色の部分に沿って距離を求めます。 – Sigfried

+0

@ScottSauyet、私は質問に私が試みたものを加えました。ありがとう。 – Sigfried

答えて

1

からそれを得た私は、2つの機能を組み合わせることにより、異なるアプローチを取った:

  1. をYPを取得するには「私はここからの回答を使用して交差点を見つける:Perpendicular on a line from a given point
  2. XPを取得するには」私は計算しますhttps://en.wikipedia.org/wiki/Distance_from_a_point_to_a_line

最も洗練された解決策ではありませんが、それはうまくいくようですが、次の式を使用して(xp、yp)と直線の距離を計算します。

、 `供給されず、` [YP、XP] [XP 'YPを'] `コード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

関連する問題