将3个多边形放在3D中

时间:2016-08-15 12:27:07

标签: 3d geometry convex-polygon

给定3个多边形,它们都被定义为平面(从侧面看,它们没有与其余部分不相符的点,所以基本上它们是3D空间中的2D形状),由4个点组成,凸起并且与附加信息,每个poly附加到其他两个正好两个点...

从这些多边形“平放”开始,即:它们的值全部位于x,y平面上,并且所有的Z值均为0 ......

...如何确定如何在3D空间中放置这些多边形,使它们在连接点处连接?

2 个答案:

答案 0 :(得分:1)

标记多边形A,B,C。选择A使得B和C在折叠之前已经与它共享边缘,并将其视为在整个转换过程中保留在X-Y平面中。

在折叠之前,要么所有三个多边形都附着有一个点,要么没有(在这种情况下,折叠后产生的形状包含一个洞)。

在前一种情况下,考虑点(d)。折叠后,附加在其上的一条边将由B和C共享。设e是B上与d共享边但不接触A的点。类似于f的C.折叠后,e和f是相同的点。考虑通过围绕由A和B共享的边缘旋转e所描述的圆,并且类似地关于由A和C共享的边缘的f。圆圈恰好在两个点(一个在X-Y平面上方,一个在X-Y平面下方)相交。写出圆形方程,求解并任意选择两个解中的一个。现在,您现在可以看到B和C围绕它们与A共享的边缘旋转的角度,并且网格的其余部分完全受约束。

在后一种情况下,找到A的边缘,使得一端连接到B而另一端连接到C.如前所述,考虑B和C上与这些点共享边缘但不与A相交的点,围绕A的边缘并求解交集。

绘制图表;它会有所帮助。

答案 1 :(得分: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'对应BmOCC'O'A'对应COD

*注意:只有当角度AOB,BOC和COD总和小于360时,才有可能。