意外的矢量旋转值
Unexpected vector rotation value
所以我有一个向量(为了学习目的分成两个单独的值)。
我将其设置为:
var px = 6*( Math.cos( originalAngle * (Math.PI/180)));
var py = 6*( Math.sin( originalAngle * (Math.PI/180)));
将X坐标(px)设置为6,将Y坐标(py)设置为0。
然后我使用旋转矩阵尝试将向量旋转 90 度:
var a = 90*(Math.PI/180);
var nx = px*Math.cos(a) - py * Math.sin(a);
var ny = px*Math.sin(a) + py * Math.cos(a);
我希望新坐标为 X(nx): 0 和 Y(ny): 6。
但我的实际结果是 X(nx): 3.6739403974420594e-16 和 Y(ny): Y: 6.
所以,我不确定为什么 X 是 return 那个值。
编辑* 我的 fiddle 是 here
这是由于计算 cos 和 sin 时进行的近似而产生的舍入误差。
3.6739403974420594e-16 几乎为 0,但如果您需要恰好获得 0,则可以设置一个阈值,使其小到足以为零:
if(nx<1e-10){
nx=0
}
if(ny<1e-10){
ny=0
}
所以我有一个向量(为了学习目的分成两个单独的值)。
我将其设置为:
var px = 6*( Math.cos( originalAngle * (Math.PI/180)));
var py = 6*( Math.sin( originalAngle * (Math.PI/180)));
将X坐标(px)设置为6,将Y坐标(py)设置为0。
然后我使用旋转矩阵尝试将向量旋转 90 度:
var a = 90*(Math.PI/180);
var nx = px*Math.cos(a) - py * Math.sin(a);
var ny = px*Math.sin(a) + py * Math.cos(a);
我希望新坐标为 X(nx): 0 和 Y(ny): 6。
但我的实际结果是 X(nx): 3.6739403974420594e-16 和 Y(ny): Y: 6.
所以,我不确定为什么 X 是 return 那个值。
编辑* 我的 fiddle 是 here
这是由于计算 cos 和 sin 时进行的近似而产生的舍入误差。 3.6739403974420594e-16 几乎为 0,但如果您需要恰好获得 0,则可以设置一个阈值,使其小到足以为零:
if(nx<1e-10){
nx=0
}
if(ny<1e-10){
ny=0
}