所以基本上我有起始向量和天使,但我正在处理的代码只更新了我的角度,我试图找到另一个向量。
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 :(得分:3)
首先你有速度,所以你需要花时间框架让我们假设我们需要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;
答案 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