【问题标题】:Tracing a 2D polygon in 3D space - Appropriate algorithm?在 3D 空间中跟踪 2D 多边形 - 适当的算法?
【发布时间】:2011-05-11 21:43:06
【问题描述】:

我目前正在解决一个问题,我需要正确排序(使用类似右手规则的东西)构成 3D 空间中的平面多边形的节点。到目前为止,我的想法是构建一个转换矩阵以将节点转换为 x-y 平面,然后使用 Graham 扫描。我需要确保用户只输入凸多边形,所以如果我发现任何“内部”节点,我知道多边形是凹的并且会抛出错误。除了检查凸性之外,格雷厄姆扫描的排序过程还会为我排序节点。

我对优化几何算法不是很熟悉。这似乎是一个适当/有效的过程吗?或者有没有更好的方法:

1) 通过某种规则(例如 RH 规则)对多边形的节点进行排序,并且 2)确保平面多边形(可能不在x-y平面内)是凸的?

【问题讨论】:

    标签: algorithm geometry computational-geometry


    【解决方案1】:

    是的,这是一个非常好的解决方案。以下是如何实现它以忽略数值不准确性。

    - take any 3 points; these determine the plane, rotate appropriately
    - check that abs(z)<THRESHOLD for all z-coordinates, now you can ignore them
    - perform Graham scan which is O(n log(n)) time
    - return order, else throw error if results.size < #points (non-convex)
    

    您可能希望选择相距足够远的 3 个点,或多个点的组合(仍然存在问题),并将 THRESHOLD 设为最大距离的一部分。

    通过一些假设,这可以渐进地证明尽可能好,因为否则,您可以使用它在不到 O(n log(n)) 的时间内执行比较排序,我们知道这是没有额外知识是不可能的(问题映射是将未排序数组的每个元素 X 放置在平面中的位置 [X,X^2] 加上 [0,max^2] 处的一个点)。

    【讨论】:

    猜你喜欢
    • 2013-08-20
    • 2014-10-09
    • 1970-01-01
    • 1970-01-01
    • 2017-12-07
    • 2011-05-02
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    相关资源
    最近更新 更多