2013-12-19 27 views
0

當使用GLM_GTX_vector_angle的glm :: orientedAngle時,我遇到了以下問題。 我只想繞Y軸旋轉。我想旋轉的是最初指向正Z軸的對象(例如,沿矢量(0.0, 0.0, 1.0))。物體的當前方向由不斷變化的矢量dir(歸一化)定義。輪換是根據(0.0, 1.0, 0.0)完成的。所以,glm :: rotatedAngle中的所有矢量都是常量,除了dir。下面是我發現:當x改變符號時,glm orientedAngle給出了大不相同的結果

代碼:

glm::orientedAngle(glm::vec3(0.0f, 0.0f, 1.0f), dir, glm::vec3(0.0f, 1.0f, 0.0f)) 

結果不同的dir S:

dir: (-0.00960893,-0.15582,-0.987739) -> rot: -171.018 
dir: (-0.00342022,-0.155258,-0.987868) -> rot: -171.066 
dir: (0.00282073,-0.154685,-0.98796) -> rot: 171.1 
dir: (0.00874247,-0.154136,-0.988011) -> rot: 171.119 

注意方向變化dir時的符號x座標改變。 -171和171遠沒有相同的角度(-171 + 360 = 189),所以18度左右。這是什麼造成的?矢量只改變0.005左右的增量,其他增量的大小不會影響旋轉度。任何幫助表示讚賞。代表問題


最小編譯代碼:

#include <iostream> 
#include <glm/glm.hpp> 
#include <glm/gtx/vector_angle.hpp> 

int main(void) 
{ 
    std::cout << "Results: " << std::endl; 
    std::cout << glm::orientedAngle(
    glm::vec3(0.0f, 0.0f, 1.0f), 
    glm::normalize(glm::vec3(-0.000209185,0.32454,-0.945872)), 
    glm::vec3(0.0f, 1.0f, 0.0f) 
) << std::endl; 

    std::cout << glm::orientedAngle(
    glm::vec3(0.0f, 0.0f, 1.0f), 
    glm::normalize(glm::vec3(0.0214591,0.326289,-0.945026)), 
    glm::vec3(0.0f, 1.0f, 0.0f) 
) << std::endl; 
    return 0; 
} 

回答

0

這聽起來是正確的實際。在2D和圖像中繪製圖像最簡單。

我們假設我有一個向量,比如(9,1)。我們將忽略Z軸並假定它出現在屏幕外面,這給了我們以下內容。我爲我的壞圖紙道歉,我沒有安裝真正的繪圖儀!

Image 1

所以,間(9,1)和(1,0)(即,x軸)圍繞z軸差爲約6度。現在,讓我們否定x分量的符號:

Image 2

矢量移動,當然,不過這不是180度的旋轉。相反,圍繞z軸的(-9,1)和(1,0)之間的差值現在爲-6度(arctan(-9/1))或174度(1,0)。問題是矢量(9,-1)和(-9,1)的角度是相同的,所以你將不得不應用一些額外的智能來確定是否應該從arctan的結果中減去180度。

+0

感謝您的輸入。你和我的例子的區別在於你的兩個向量相距甚遠。爲了將我的例子應用到你的例子中,想象兩個向量幾乎直接指向'(0.0002,1.0)'和'(-0.0002,1.0)'。他們都應該有一個大約90度的角度 –

相關問題