2016-04-30 162 views
0

所以基本上我有起始矢量和天使,但我正在使用的代碼只更新我的角度,我試圖去另一個向量。角度計算cordanates

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

儘管已經給出了很好的答案,但您可能需要閱讀[三角函數](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)未知的新座標。 要知道的x,y式是

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

其中θ等於53deg和距離爲200 因此(X,Y)=()

更一點的描述,在我們的假想三角形y是相反的,x是相鄰的,並且x,y只是距離0,0的距離。有一個在三角公式,其中規定,

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

我不認爲你可以通過速度作爲參數,除非你在一秒鐘內獲得座標。 –

+0

更具體你需要通過距離不是速度這是速度*時間,因爲速度=距離/時間 –