2016-04-30 10 views
0

基本的に私は開始ベクトルと天使を持っていますが、私が作業しているコードでは角度だけが更新され、別のベクトルに到達しようとしています。角度でカーデナートを計算する

var start_x = 0; 
var start_y = 0; 
var speed = 200; 
var current_x; //This needs to be calculated 
var current_y; //This needs to be calculated 
var current_angle = 53; 

速度と開始位置を使用して現在のXベクトルとYベクトルを計算するにはどうすればよいですか?私はこのサイトと他の人の周りをブラウズしましたが、私は答えを見つけることができません。そこ

+0

これは実際にプログラミング上の問題ではなく、数学の問題です。適切な数式を見つけたら、JavaScriptの部分が簡単になります。あなたはhttp://math.stackexchange.com/を試しましたか? – nnnnnn

+0

以下の答えは、これを解決するための数学的アプローチを示していますが、実装が異なる場合があります。あなたはあなたのプロジェクトについてより具体的になりますか?あなたはキャンバスのアニメーションを作っていますか?あなたのコードでxとyを正確に計算したいところはどこですか?あなたはそれで何をしていますか? – akinuri

+0

すでに良い回答があるにもかかわらず、[trigonometry](https://www.mathsisfun.com/algebra/trigonometry.html)を読んでみてください。なぜそれがうまくいくのか理解すれば楽しいです。 – miraculixx

答えて

3

オーケー、あなたはyour question in graph representation

まず、あなたはスピードを持っているので、あなたもそう、私たちは私たちが1秒​​後に座標を必要とすると仮定しましょう、時間枠を取る必要があります。測定する式はV = S/T です。ここで、Vは速度(方向の速度)、Sは距離、Tは時間です。 したがってS = VxT あなたのスピード200によると、1秒間に移動する距離は200Mです 今私たちはあなたが53degとしてそれを与えた角度を持っています。 したがって、未知の新しい座標を(x、y)見つけるために、想像上の三角形を描くことができます。 式

シータが53degに等しく、距離が私たちの想像で、もう少し説明的には200 したがって(X、Y)=()

ある

y= sin(theta) x Distance 
x = cos(theta) x Distance 

あるY、Xを知っています三角形yは反対であり、xは隣接し、x、yは0,0からの距離だけである。あなたは度が、thatsのに必要な変換が必要になる場合がありますので、

Sin(theta) = opposite/Hypotenuse 
hence 53 = unknown/200 
similarly 
Cos(theta) = Adjacent/Hypotenuse 
hence 53 = unknown/200 
So after calculating we get the result (120.36,159.72) 

だからJavaスクリプトでは、あなたが、度をラジアンを使用していない私たちは、計算した

// since Math.cos takes input in radians you have to convert it into degrees. 

    var speed = 200; 
    var time = 1; 
    var angle = 53; 
    x = (Math.cos(angle*(Math.PI/100))* (speed*time); 
    y = (Math.sin(angle*(Math.PI/100))* (speed*time); 

使用することができると述べて三角法で式があり、 (x、y)から(y、x)への交換は難しくありません。これは度との結果になります。

+0

ありがとうございます。 –

+0

ようこそ。 –

1

ベクトル数学ので、私はすべての重労働を行うには少しクラスを記述しにくいです。

function LameVector(x,y) { 
 
    this.startx = this.x = x; 
 
    this.starty = this.y = y; 
 
    this.angle = false; 
 
    this.mag = 0; 
 
    
 
    this.moveXY = function (x, y) { 
 
    this.x += x; 
 
    this.y += y; 
 
    this.angle = Math.atan2(this.y - this.starty, this.x - this.startx) * 180/Math.PI; 
 
    this.mag = Math.sqrt(Math.pow(this.y - this.starty, 2) + Math.pow(this.x - this.startx, 2)); 
 
    } 
 
    
 
    this.move = function (speed, angle) { 
 
    var ang = angle/180 * Math.PI; 
 
    this.moveXY(speed * Math.cos(ang), speed * Math.sin(ang)); 
 
    } 
 
} 
 
var o = document.getElementById("out"); 
 
var vec1 = new LameVector(0, 0); // starting position 0,0 
 
o.innerHTML += "start x " + vec1.x + ", start y " + vec1.y + "<br>"; 
 

 
vec1.move(200, 53); // move 200 units at angle 53 deg 
 
o.innerHTML += "move1 x " + vec1.x + ", move1 y " + vec1.y + "<br>"; 
 

 
vec1.move(200, 27); // move 200 more units at angle 27 deg 
 
o.innerHTML += "move2 x " + vec1.x + ", move2 y " + vec1.y + "<br>"; 
 

 
// can also get the angle and length 
 
o.innerHTML += "final angle " + vec1.angle + ", magnitude " + vec1.mag + "<br>";
<div id="out"></div>

-1

私は(Calculate the position of an orbiting object)の前に、この問題に出くわしたと使用しました以下。

あなたはMath.cos()Math.sin()の方法を使用し、ラジアン単位の角度をパラメータとして使用します。したがって

var start_x = 0; 
var start_y = 0; 
var speed = 200; 
var current_x; //This needs to be calculated 
var current_y; //This needs to be calculated 
var current_angle = 53; 

// converting degrees to radian 
var angleInRad = current_angle * (Math.PI/180); 

var time = 1; // second 
var distance = speed * time; 

// calculate the x and y values 
current_x = Math.cos(angleInRad) * distance; 
current_y = Math.sin(angleInRad) * distance; 

console.log(current_x, current_y); // 120.36, 159.72 
+0

なぜdownvote? o.O – akinuri

+0

私は、座標を1秒で取得しない限り、パラメータとして速度を渡すことはできないと思います。 –

+0

より具体的には、速度=距離/時間 –

関連する問題