Простое использование ofxVectorMath - PullRequest
0 голосов
/ 28 января 2011

Пытался получить относительный угол двух векторов.

Однако то, что выводит код, далеко.

Кто-нибудь знает, где я иду не так?

Использование двух векторов и этой строки

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

Вывод должен быть в градусах, как в состояниях vec2f. Кроме того, если вы установите два вектора под одним и тем же углом, но дальше друг от друга, это снова даст другое значение.

... в замешательстве?

Кто-нибудь использовал это с успехом?

Я пытался создать свои собственные кальки, но использование set tan и atan даже не помогло мне правильно.

То, что должно быть очень простым вычислением, поставило меня в тупик.

1 Ответ

1 голос
/ 28 января 2011

Если вы хотите получить угол наклона мыши относительно центра, при использовании atan2 вы должны отсортировать:

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

Если вы хотите, чтобы вращение сравнивалось с другой точкой, не забудьте сначала выполнить вычитание между двумя точками (например, мышью, другой точкой).

Если вы хотите получить угол между двумя векторами в 3D ( ofxVec3f ), вам нужно нормализовать два вектора, а затем получить число точечного произведения между векторами

angle_in_radians = acos(v1.dot(v2))

изxVec3f уже предоставляет вам эту функцию, хотя методы 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
...