【问题标题】:Position 3 polygons together in 3D在 3D 中将 3 个多边形放在一起
【发布时间】:2016-12-21 15:48:00
【问题描述】:

给定 3 个多边形,它们都被定义为平面(从侧面看,它们没有与其他点不相符合的点,因此它们本质上是 3D 空间中的 2D 形状),正好由 4 个凸点组成,并且具有每个多边形在每个恰好两个点处附加到其他两个的附加信息...

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

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

【问题讨论】:

    标签: 3d geometry convex-polygon


    【解决方案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 平面上方,一个在 X-Y 平面下方)。写出圆方程,求解,并在两个解中任意选择一个。现在,您现在 B 和 C 已围绕它们与 A 共享的边旋转的角度,并且网格的其余部分已完全约束。

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

    画图;它有帮助。

    【讨论】:

    • 谢谢。你有解决这些角度的代码吗?在 3 个维度上做这件事让我很吃惊。
    【解决方案2】:

    我将假设您希望所有多边形在一个点相遇。这是解决三角形问题的方法(它可以很容易地适应四边形)。

    假设在 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 时才有可能。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-15
      • 2016-02-10
      • 1970-01-01
      • 2011-09-14
      • 2013-04-05
      • 2021-06-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多