2016-08-15 123 views
1

給定3個多邊形,這些多邊形全部被定義爲平坦的(當從側面看時,它們沒有與其餘部分不一致的點,因此基本上它們是3D空間中的2D形狀),由4點,凸和附加信息,每個聚合附加到其他兩個在每個正好兩個點...在3D中放置3個多邊形

從這些多邊形「鋪平」開始,即:它們的值都位於x,y飛機和所有的Z值爲0 ...

...我怎麼能解決如何定位這些多邊形在三維空間,使他們連接在他們的連接點?

回答

1

標註多邊形A,B,C。選擇A,使B和C在摺疊之前已經與它共享一條邊,並在整個轉換過程中將其視爲保留在X-Y平面中。

在摺疊之前,要麼是所有三個多邊形都連接到一個點,要麼沒有(在這種情況下摺疊後的結果形狀包含穿過它的孔)。

在前一種情況下,考慮點(d)。摺疊後,連接到其上的一條邊將由B和C共享。設e是B上與d共享邊但不碰A的點。對於C同樣f。在摺疊後,e和f是相同的點。考慮通過圍繞由A和B共享的邊緣旋轉e所描述的圓,並且類似地針對由A和C共享的邊緣的f。這些圓恰好在兩個點(在X-Y平面之上一個和一個)之間相交。寫出圓方程,求解並任意選擇兩個解中的一個。現在您已經知道B和C圍繞與A共享的邊緣旋轉的角度,而網格的其餘部分完全受到限制。

在後一種情況下,找到A的邊緣,使一端連接到B,另一端連接到C.與之前一樣,考慮B和C上與這些點共享邊但不與A旋轉的點A的邊緣並求解相交。

繪製圖表;它有助於。

+0

謝謝。你會有解決這些角度的代碼嗎?在三個維度上做這件事打我。 –

1

我打算假設你想讓所有多邊形在一個點上相遇。這裏是你如何做三角形的問題(它可以很容易地適應四邊形)。

讓我們假設在2D世界中,您的三角形已經排列成使得兩個相應的邊彼此相鄰,並且三角形的公共點是原點。換句話說,讓O爲原點,我們有點A,B,C,D,以便我們的三個三角形是AOB,BOC和COD。 (你總是可以應用一些轉換來達到這種情況。)現在,通過「摺疊」三角形,將OA與OD對齊(這些被假定爲具有相同的長度)。*以下是僞代碼中的操作:

assert(length(OA) == length(OD)) 
let L_A = line through A perpendicular to OB 
let L_D = line through D perpendicular to OC 
let E = intersection of L_A and L_D 
let z = sqrt(length(OA) * length(OA) - length(OE) * length(OE)) 

let O' = (0, 0, 0), B' = (B.x, B.y, 0), C' = (C.x, C.y, 0) 
let A' = (E.x, E.y, z) 

然後,A'O'B'對應於AOBB'O'C'對應於BmOC,和C'O'A'對應於COD

*注意:只有角度AOB,BOC和COD總和小於360時纔可以。