0

ベクトルに関するオンラインチュートリアルを読んでいて、ここでベクトル間の角度を見つけていました

ここで著者は以下のベクトルを使用し、式を置き換えることで角度 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 

期待される出力 (Web サイトから)

0.51721
58.885

正しい出力を期待していましたが、Web サイトの著者の回答と一致しません。

0.3879049103011416
67.17580053566918

別の例と同じケース。

p  =  ( -2, 4, 3)T
q  =  ( 3, 1, -4)T 

期待される出力

-0.50985 
120.654° 

私の出力

0.2549249642552304
75.23086102240184

間違いはどこですか?私は何が欠けていますか?

4

2 に答える 2

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);
于 2013-01-14T20:01:08.660 に答える
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);
于 2013-01-14T22:34:57.047 に答える