简单使用ofxVectorMath

时间:2011-01-28 02:27:17

标签: openframeworks

试图获得两个向量的相对角度。

但是代码输出的内容是关闭的。

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

使用两个向量和这一行

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

输出应与vec2f状态中的度数相同。 此外,如果您将两个矢量设置为相同的角度但相距更远,则会再次给出不同的值。

...困惑?

有人用它取得了成功吗?

我尝试创建自己的计算但是使用set tan和atan甚至不能正确地为我工作..

一个非常简单的计算应该让我感到难过。

1 个答案:

答案 0 :(得分:1)

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

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

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

如果你想获得3D中2个矢量之间的角度( of xVec3f ),你需要对两个矢量进行标准化,然后得到矢量之间的点积的acos

angle_in_radians = acos(v1.dot(v2))

ofxVec3f 已经通过 angle() angleRad()方法为您提供了此功能,其中角度返回以度为单位的角度和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