2013-01-02 53 views
1

在我的程序中,我需要繪製一個與來自中心的線垂直的矩形。獲取矩形的所有頂點

要在3D空間中以這種方式定向矩形,我使用gluLookAt爲其指定了lookAt點並繪製了矩形圖。這對我來說是正確的。爲了繪製矩形(在我的框架中,在後面使用openGL),我現在使用一個矩形類並使用3D Node(其中節點是具有lookAt點的東西)擴展它。給定寬度,高度和頂部頂點,繪製矩形(節點位於左上頂點並使用lookAt定向矩形)。

Node也有一個getPosition()功能,給我它的三維位置(矩形左上角 - 說300,400,20)。我試圖在3D空間中獲得其他三個頂點的位置以用於我的操作。由於矩形面向三維空間,其他三個頂點不能僅通過增加寬度和高度來獲取。矩形以3D爲導向,我如何獲得其他三個頂點的位置?

+0

矩形如何垂直於某物? – AJMansfield

+0

OP可能是指矩形的法向量 – Kos

+0

@Kos是正確的關於法向量thingy。 – user1240679

回答

0

可以retreive使用正常的其它3點的位置的矩形。爲了在空間中定向矩形,需要2個信息:

  • 其位置,通常表示爲3或4分量矢量或4x4矩陣;
  • 它的方向,通常表示爲一個四元數。

如果你有一個正常的代表的方向,只有一個點,你剛纔無法推導出其他點(因爲你需要其他信息來解決周圍正常旋轉式)。我認爲最好的想法是使用四元數來定位太空中的東西(您仍然可以從中取回法線),但是您也可以使用矩形中的正常+一個矢量。你說你只有一個點,還有一個元組(寬度,高度),所以基於×操作的常用方法將無法通過。

我建議你:

  • 讓你Node類,正確處理方向的一類; lookAt不是爲那項工作設計的;
  • 將平移矩陣(位置)與來自四元數(方向)的投射矩陣組合以正確處理位置和方向;
  • 使用該矩陣提取您將使用的旋轉向量,如rotated × normal以獲得3點。
0

座標的最小數量略小於9:這是三維空間(Ax,Ay,Az,Bx,By,Bz,Cx,Cy,Cz)中一個通用矩形的三個頂點。

最後一個例如d = A +(B-A)+(C-A)= B + C-A。

爲什麼略少,A,B,C座標的任何三元組都不一定形成90度角 - 但對於追求簡單可能的安排並沒有多大意義,並且準備好計算交叉產品或歸一化向量。

A----B 
| | 
C---(D) 

編輯:矢量算術初級:

要加/減矢量,一個求和的元素。 A = B + C表示(ax = bx + cx; ay = by + cy; az = bz + cz)。點(A,B)= ax * bx + ay * by + az * bz;點(A),點B // 2,3,4,任意數量的元素/維度。

Cross product是一個特殊的運算符,它至少在2維和3維中都有明確定義。交叉乘積的幾何解釋之一是它產生一個垂直於它的參數矢量的矢量。如果A是一個向量(ax,ay,az),它也意味着從原點O =(0,0,0)即A = AO =(ax-0,ay-0,az- 0);同樣,(B-A)是從A到B(有時寫爲AB(有箭頭→頂部)的[方向]矢量。)

可以'添加'這些定向矢量,例如,爲:

o-----> 
      \ 
      \ 
     <------o 
    /
    /
    x 

所以,如果加上矢量A +(BA)+(CA),一個結束於點D.

+0

我不完全是什麼意思,但這是否意味着三點可以通過矢量等產品找到? – user1240679

+0

是的。如果你有一個平面的矢量和一個正交矢量(BA)是正交的(即它們的點積是零),那麼向上/向上矢量(CA)就是兩者的叉積,D = B + CA再次。 –

+0

感謝您的回覆。如果你可以擴大答案,用「CA」,「B + A」和數學術語來增加更多細節來獲得座標,因爲我對OpenGL沒有真正的經驗。 – user1240679