2014-03-25 74 views
1

我想模擬二維空間的深度,如果我有一個點P1我想我需要將給定點P1投影到一個平面x軸順時針旋轉「theta」rads,以獲得P1'點投影到yx旋轉的平面

似乎P1'.x coord必須與P1.x相同,而P1'.y必須短於P1.y.在3D世界中:

cosa = cos(theta) 
sina = sin(theta) 
P1'.x = P1.x 
P1'.y = P1.y * cosa - P1.z * sina 
P1'.z = P1.y * sina + P1.z * cosa 

是我的P1.z = 0嗎?我試過了,P1'.y = P1.y * cosa沒有按預期的結果

任何反應,將不勝感激,謝謝!

編輯:我想要什麼,我現在旋轉攝像頭和轉換矩陣 enter image description here

編輯2:用啓動1點和END1點(這是一個水平線上的單行的例子,結果預計是下降線「地面」只要傾斜角度的增加)

enter image description here

我認爲這是一個標誌錯誤或偏差需要(JAVA的畫布繪製(0,0)是在左上角),因爲我的傾斜度爲0的新行是所有行的下一行,其值爲90º e新行和原始匹配

+0

你能具體談談它是什麼,你想幹什麼?你有什麼想要改變的點P1?你想旋轉圍繞哪個軸theta?如果你有一個點在x,y,z(讓我們稱之爲p1(x,y,z)),並且你圍繞x軸旋轉θ,新的座標是p1'(x,y * cos )+ z * sin(theta),y * sin(theta)+ z * cos(theta))就是你想要做的嗎? –

+0

謝謝邁克,我的情況是一個真正的街道背景圖像,我畫了一個2D畫布(x,y)覆蓋線,我的目的是與傾斜角度(我認爲是斧軸旋轉)在我的那條線新的「xy傾斜平面」,也許我需要在一個3D空間中投影,就像我們用一個初始p1(x,y,0)所說的那樣,然後將p1'(x,y,z)投影到我的屏幕2D空間中。 – lluisruscalleda

+0

好的,你所描述的方程是圍繞x軸旋轉theta的正確方程。如果你不明白,有幾件事你需要檢查。我可以問你正在使用什麼語言?要檢查的是你的cos和sin函數是弧度的(你可以檢查sin(pi)是否爲0)?其次,你可以給出一個例子打印所有的點(顯示所有的輸入點和輸出點以及theta和中間點)你是正確的P1。z應該是0並且p1'.y應該是= p1.y * cosa –

回答

0

如果您想要順時針繞x軸執行旋轉,則執行的計算是正確的。如果你認爲你的線條是一張紙,那麼旋轉0度就是直接看着線條。

對於您給出的示例,該行與x軸是水平的。這在繞x軸旋轉時不會改變(旋轉的線和旋轉軸相互平行)。當你在0到90度之間旋轉時,線的y座標將隨着P1.y * cos(theta)在90度下降到0而減小(想想我們圍繞底部邊緣旋轉的那張紙, x軸,90度時紙張平坦,y軸垂直於頁面,因此頁面的兩邊都具有相同的y座標,即「x軸」的一側和相反的平行方將有y = 0)。

因此,正如你可以看到你的例子,這工作正常。

編輯:由90度乘以沒有給出一個確切的答案爲零的原因很簡單,floating point rounding

+0

這裏有一個解釋,爲什麼你正在做的是圍繞X軸旋轉是正確的,讓我知道你期望發生什麼,或者你是否需要任何關於點的澄清。 –

+0

好吧,計算是好的,但正如我所說的系統原點在左上角,所以解決方案是P1.y = canvasHeight - P1.y,然後P1'.y = canvasHeight - P1'.y,我明白了!現在的問題在於做到這一點,因爲該點的2D投影是正交的......感謝Mike的幫助和支持! – lluisruscalleda

+0

沒問題,很高興你得到了解決方案,如果答案幫助只需點擊接受。 –