2011-01-28 94 views
0

一直试图获得两个向量的相对角度。简单使用ofxVectorMath

但是代码输出的结果是失败的。

任何人都知道我哪里会出错?

使用两个矢量和这条线

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

输出应该以度为单位在vec2f状态。 此外,如果将两个矢量设置为相同的角度,但进一步分开,它会再次提供不同的值。

...困惑?

任何人都用它取得任何成功?

我试图创造我自己的Calcs(计算),但使用一套驼色ATAN甚至不正确的工作对我来说..

应该是什么一个非常简单的计算有我难住了。

回答

1

如果你想获得鼠标相对于中心的角度,用ATAN2应该让你排序:

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

,如果你想旋转相比还有一点,不要忘记做首先在两点(例如鼠标,其他点)之间进行减法。

如果你想获得2个载体之间的3D(ofxVec3f)的角度,你需要正常化两个向量然后得到向量的内积的ACOS

angle_in_radians = acos(v1.dot(v2)) 

ofxVec3f已经通过角度()角度()angleRad()方法提供此功能,其中角度以度为单位返回角度,角度以弧度为单位返回角度。

这里的一个基本的测试,在控制台显示两个随机向量之间的角度:

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

由于堆。到目前为止还不完全需要3d矢量实现,但是感谢您提供的信息丰富的回复!最后有效地使用atan2。 – aKiwi 2011-01-30 03:59:29