【问题标题】:Arrange the vertices of a 3D convex polygonal plane in counter clockwise direction in MATLAB在MATLAB中以逆时针方向排列3D凸多边形平面的顶点
【发布时间】:2013-02-12 18:44:56
【问题描述】:

我有一个 3D 凸多边形。为简单起见,让它成为一个有顶点的正方形,(0,0,0),(1,1,0),(1,1,1),(0,0,1).。我需要按逆时针顺序排列这些顶点。我找到了解决方案here。建议确定多边形中心的角度并对其进行排序。我不清楚这将如何工作。有没有人有办法解决吗?我需要一个强大的解决方案,甚至在顶点非常接近时也能工作。

非常感谢您提供示例 MATLAB 代码!

【问题讨论】:

  • 我会进行导数分析,但是当它们存在于 3D 空间中时,如何通过 2D 参数(即顺时针)来组织?
  • 点在 3D 空间但在平面上。我只需要然后订购 - 顺时针或逆时针。
  • 我的错,在标题中没有看到。我是白板,如果我想出一些不涉及旋转矩阵的可靠方法(这可能是最强大但最大的痛苦),我会告诉你。
  • 您的问题是否总是有 4 个输入点或可能更多/更少?
  • 它的正边形,所以n>3点。

标签: matlab polyhedra


【解决方案1】:

这实际上是一个相当乏味的问题,所以我没有实际执行它,而是仅解释我将如何执行它。首先find the equation of the plane(你只需要为此使用3分)然后找到你的rotation matrix。然后在新的旋转空间中找到你的向量。在那之后,find which quadrant 你的点就在其中,如果在特定象限中 n > 1,那么你必须找到每个点的角度 (theta = arctan(y/x))。然后只需按每个象限的角度对每个象限进行排序(可以说你可以用 pi 而不是象限进行分离(当 y 分量(旋转后)大于零时将点排序)。

抱歉,我没有时间实际测试它,但请试一试,随时发布您的代码,如果您愿意,我可以帮助调试它。

【讨论】:

  • 谢谢!你的cmets给了我一些想法。我的解决方案是基于您关于旋转飞机的评论。毕竟没那么难。
  • 没问题,很高兴大学的所有数学都在帮助某人。您应该详细说明您的答案并将其标记为已解决:)
【解决方案2】:

幸运的是,您有一个凸多边形,因此您可以使用角度技巧:在内部找到一个点(例如,找到两个不相邻点的中点),然后将向量绘制到所有顶点。选择一个向量作为基础,计算与其他向量的角度并排序。您可以使用点积计算角度: A · B = A B cos θ = |A||B| cos θ。

【讨论】:

    【解决方案3】:

    以下是我遵循的步骤。

    1. 可以使用已知的formulas 将 3D 平面多边形旋转到 2D 平面。使用从轴和角度旋转矩阵部分下的那个。

    2. 然后如@Glenn 所示,需要计算一个内部点来找到角度。我将该内部点作为顶点位置的mean

    3. 使用 x 轴作为参考轴,在 02pi 的刻度上,可以使用 atan2 函数计算每个顶点的角度,如 here 所述。

      如果a = [x1,y1]b = [x2,y2],在[0,2pi] 范围内,从向量a 到向量b 逆时针测量的非负角度由下式给出:

      angle = mod(atan2(y2-y1,x2-x1),2*pi);

    4. 最后,对角度进行排序,[~,XI] = sort(angle);

    【讨论】:

      【解决方案4】:

      我已经很久没有使用它了,所以我可能是错的,但我相信命令 convhull 可以满足您的需要 - 它返回一组点的凸包(因为您说您的点是一个凸集,应该是点本身的集合),按逆时针顺序排列。

      请注意,MathWorks 最近提供了一个新类 DelaunayTri,旨在取代 convhull 和其他较旧的计算几何内容的功能。我相信它更准确,尤其是当点非常接近时。不过我没试过。

      希望有帮助!

      【讨论】:

      • 如果多边形是二维的,您提到的函数将起作用。对于我的问题,他们不会。
      【解决方案5】:

      如果你想使用 convhull,这里有另一个答案。通过将一个坐标设置为零,可以轻松地将多边形投影到轴平面中。例如,在 (0,0,0),(1,1,0),(1,1,1),(0,0,1) 中设置 y=0 得到 (0,0),(1, 0),(1,1),(0,1)。现在你的问题是二维的。

      如果您的多边形平面与某个轴正交,您可能需要做一些工作来选择正确的坐标,如果是,请选择该轴。标准是确保您的投影点不会在一条线上。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-05-23
        • 1970-01-01
        • 1970-01-01
        • 2012-03-17
        • 1970-01-01
        • 2011-12-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多