2013-01-14 57 views
0

我閱讀在線教程約向量和我在尋找載體here故障轉換公式爲AS3

之間的夾角在這裏筆者使用下面的載體和更換式獲得角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 

哪裏錯了嗎?我錯過了什麼?

回答

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); 
+0

感謝捕捉,它是深夜2:30 AM :) –

0

如果你只是想要的東西沒有得到手髒的數學工作 - 你可以使用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); 
+0

什麼是網格[i] .forwardVector? –

+0

Vector3D類的實例 – Martin