用角度计算cordanates

时间:2016-04-30 13:51:55

标签: javascript math angle

所以基本上我有起始向量和天使,但我正在处理的代码只更新了我的角度,我试图找到另一个向量。

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向量?我浏览了这个网站和其他网站,但我似乎无法找到答案。

3 个答案:

答案 0 :(得分:3)

好的,你your question in graph representation

首先你有速度,所以你需要花时间框架让我们假设我们需要1s后的坐标。测量速度的公式是V = S / T. 其中V是速度(一个方向的速度)S是距离,T是时间。 因此S = VxT 根据您的速度200,1秒钟内的距离为200M 现在我们也有角度你给它53deg。 因此,我们可以绘制一个假想的三角形来找到(x,y)未知的新坐标。 要知道x,y公式是

EventEmitter

其中theta等于53deg,距离为200 因此(x,y)=()

为了更具描述性,在我们想象的三角形中,y是相反的,x是相邻的,而x,y只是距离0,0的距离。三角学中有一个公式,表明

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

所以在java脚本中你可以使用

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)

我们使用弧度计算的不是度数,所以你可能需要转换成度数,但这并不困难只是将(x,y)交换为(y,x),这将是度数的结果。

答案 1 :(得分: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>";
&#13;
<div id="out"></div>
&#13;
&#13;
&#13;

答案 2 :(得分:-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