无法将方程式转换为as3

时间:2013-01-14 19:02:30

标签: actionscript-3 vector linear-algebra

我正在阅读有关矢量的在线教程,我正在寻找矢量here

之间的角度

这里作者使用下面的矢量并通过替换等式获得35.26度的角度。

Vector a is (4, 4, 4)T     Vector b is (4, 0, 4)T     Calculate: au · bu  =  cos θ 

我将其转换为as3并使用相同的向量来比较答案

代码:

var a:Vector3D = new Vector3D(4, 4, 4);
var b:Vector3D = new Vector3D(4, 0, 4);

//magnitute
var am:Number = Math.sqrt(a.x * a.x + a.y * a.y + a.z * a.z);
var bm:Number = Math.sqrt(b.x * b.x + b.y * b.y + b.z * b.z);
trace(am,bm);
//normalized
var aa:Vector3D = new Vector3D(a.x/am,a.y/am,a.z/am);
var bb:Vector3D = new Vector3D(b.x/bm,b.y/bm,a.z/bm);
//dot product
var costheta:Number = aa.x * bb.x + aa.y * bb.y + aa.z * bb.z;

trace(costheta);
//angle in degrees
trace( Math.acos(costheta) * 180 / Math.PI);

输出:

我在教程

中给出了正确的弧度和度数
0.816496580927726
35.264389682754654

现在,问题是,我使用another example使用不同的向量,只是替换了我的as3程序中的变量

f  =  (4, 3, 2)T
g  =  (-1, 4, 4)T 

预期输出(来自网站)

0.51721
58.885

我期待正确的输出,但它与网站上的作者答案不符。

0.3879049103011416
67.17580053566918

another example.

相同的情况
p  =  ( -2, 4, 3)T
q  =  ( 3, 1, -4)T 

预期输出

-0.50985 
120.654° 

我的输出

0.2549249642552304
75.23086102240184

错误在哪里?我缺少什么?

2 个答案:

答案 0 :(得分:1)

我认为这是你的问题:

var bb:Vector3D = new Vector3D(b.x/bm,b.y/bm,a.z/bm);
你打错了。它应该是

var bb:Vector3D = new Vector3D(b.x/bm,b.y/bm,b.z/bm);

答案 1 :(得分:0)

如果你只想让事情工作而不会弄脏数学 - 你可以使用Vector3D类的角度(Vector3D,Vector3D)方法。下面是一个示例代码:

var cameraPos:Vector3D=new Vector3D(view.camera.x,view.camera.y,view.camera.z);
var angleInRadians:Number=Vector3D.angleBetween(mesh[i].forwardVector,cameraPos);