0

2 つのベクトルの相対角度を取得しようとしています。

ただし、コードが出力するものはかなりずれています。

誰がどこが間違っているのか知っていますか?

2 つのベクトルとこの線を使用して

ofDrawBitmapString(ofToString(point.angle(mouse), 5), 20, 40);

出力は vec2f 状態のように度である必要があります。さらに、2 つのベクトルを同じ角度に設定し、さらに離すと、再び異なる値が得られます。

... 混乱している ?

使って成功した人いますか?

独自の計算を作成しようとしましたが、set tan と atan を使用しても正しく機能しません..

非常に単純な計算のはずですが、私は困惑しました。

4

1 に答える 1

1

中心に対するマウスの角度を取得したい場合は、 atan2 を使用してソートする必要があります。

ofDrawBitmapString("mouse angle: " + ofToString(ofRadToDeg(atan2(mouseY,mouseX)), 3),30,30);

別のポイントと比較した回転が必要な場合は、最初に 2 つのポイント (マウス、その他のポイントなど) の間で減算を行うことを忘れないでください。

3D で 2 つのベクトル間の角度を取得する場合 ( ofxVec3f )、2 つのベクトルを正規化してから、ベクトル間の内積の aco を取得する必要があります。

angle_in_radians = acos(v1.dot(v2))

ofxVec3fはangle()およびangleRad()メソッドを介してこの機能を既に提供しています。ここで、角度は度数で角度を返し、ラジアンで angleRad を返します。

以下は、コンソールに 2 つのランダムなベクトル間の角度を表示する基本的なテストです。

ofxVec3f v1(ofRandom(0,20),ofRandom(0,20),ofRandom(0,20));
ofxVec3f v2(ofRandom(0,20),ofRandom(0,20),ofRandom(0,20));

printf("v1(%f,%f,%f)\tv2(%f%f%f)\tangle:%f",v1.x,v1.y,v1.z,v2.x,v2.y,v2.z,v1.angle(v2));
//here's a test print: v1(10.333943,16.629400,5.899722) v2(3.60652910.2126262.595955)   angle:12.418082
于 2011-01-28T10:54:40.463 に答える