我正在阅读关于矢量的在线教程,我在这里找到矢量之间的角度
这里作者使用下面的向量,通过替换方程得到角度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
现在,问题是,我使用了另一个使用不同向量的例子,只是替换了as3程序中的变量
f = (4, 3, 2)T
g = (-1, 4, 4)T
期望输出(来自网站)
0.51721
58.885
我期待正确的输出,但它与作者在网站上的答案不匹配。
0.3879049103011416
67.17580053566918
与另一个例子相同。
p = ( -2, 4, 3)T
q = ( 3, 1, -4)T
预期输出 -0.50985
120.654°
我的输出
0.2549249642552304
75.23086102240184
错误在哪里?我错过了什么?
我认为这是你的问题:
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);
如果你只是想让事情工作而不动手脏数学-你可以使用Vecotr3D类的angleBetween(Vecotr3D,Vecotr3D)方法。下面是一个示例代码:
var cameraPos:Vector3D=new Vector3D(view.camera.x,view.camera.y,view.camera.z);
var angleInRadians:Number=Vector3D.angleBetween(mesh[i].forwardVector,cameraPos);