2016-12-29 13 views
2

角度を度で指定した線に沿って、特定の距離にポイントを平行移動したい。ポイントを指定された角度で指定された距離に平行移動する方法は?

var initialPoint = [0,0]; //Starting Point 
var distance = 100;   //Distance in pixels to be translated 
var degree = 45;   //Direction of move 
var translatedPoint = moveByDegree(initialPoint, degree, distance); 

function moveByDegree(initialPoint, degree, distance) 
{ 
    //formula to generate translatedPoint by degree & distance 
    // . . . 

    return translatedPoint; 
} 
  • 0度がUP移動する必要があります。
  • 180度は下に移動する必要があります。
  • 90度は右に移動する必要があります。
  • 270度は左に移動する必要があります。
  • 他のアングルはダイアゴナル方向に対応します。

簡単なアルゴリズムまたはJavaScriptコードを教えてください。

+1

基本的に、原点から: 'x:Math.cos(angle)* dist'と' y'は 'sin'で計算されます。ただし、この式では「0」が右にあり、「angle」はラジアンである必要があります。原点を始める場合は、結果に対応するオフセットを追加するだけです。 – Teemu

+0

スクリーン座標またはデカルト座標で通常の向きで計算しますか? – LutzL

答えて

3

初期点、角度、および移動単位を指定する必要があります。

Math.radians = function(degrees) { 
    return degrees * Math.PI/180; 
}; 

function move(point, angle, unit) { 
    var x = point[0]; 
    var y = point[1]; 
    var rad = Math.radians(angle % 360); 

    x += unit*Math.sin(rad); 
    y += unit*Math.cos(rad); 

    return [x, y]; 
} 

move([0,0], 180, 100); // [0, 100] 
+0

あなたは数式が上と下だけでうまく動作すると言うことを意味しますが、他の角度では逆の方向に点を動かしていますか? –

+0

開始点が[0,0]で、角度が90度の場合、単位の移動は100で、出力位置はどのようにする必要がありますか? [100、0]または[-100、0] –

+0

申し訳ありませんが、私は兄弟がいませんでした(角度360%)。どうもありがとうございます。 – Rashid

関連する問題