0

一直在尝试获取两个向量的相对角度。

但是,代码输出的内容还很遥远。

有谁知道我哪里出错了?

使用两个向量和这条线

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

输出应以度为单位,如 vec2f 状态。此外,如果您将两个向量设置为相同的角度但距离更远,它会再次给出不同的值。

... 使困惑 ?

有人成功使用它吗?

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

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

4

1 回答 1

1

如果您想获得鼠标相对于中心的角度,使用 atan2 应该可以对您进行排序:

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

如果您想与另一点进行比较,请不要忘记先在两点(例如鼠标,其他点)之间进行减法运算。

如果您想获得 3D 中 2 个向量之间的角度(ofxVec3f),您需要对这两个向量进行归一化,然后获得向量之间的点积的 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
于 2011-01-28T10:54:40.463 回答