【问题标题】:segment intersection in 3 dimension3维线段交点
【发布时间】:2013-11-13 06:04:27
【问题描述】:

我们可以在 O(nlgn) 时间内解决 2D 中的线段相交问题。在这个问题中,我们得到一组线段,我们必须看看是否有交点。现在她是 CLRS 的问题。

问题。 Charon 教授有一组 n 根棍子,在某些情况下这些棍子相互叠放 配置。每个棒由它的端点指定,每个端点是一个有序的三元组,给出它的 (x, y, z) 坐标。没有一根棍子是垂直的。他希望一次拿起所有的棍子,条件是他只能在上面没有其他棍子的情况下拿起一根棍子。 一种。给出一个程序,它需要两根棍子 a 和 b 并报告 a 是否在上面,下面, 或与 b 无关。 湾。描述一个有效的算法来确定是否有可能捡起所有的木棍,如果可以,提供一个合法的捡拾木棍的顺序。

我发现它是 3D 线段交叉点的扩展。在 2D 中,扫描线在“y”中移动,数组根据“x”坐标进行排序。我认为在 3D 中,扫描线应该在“z”维度上移动,但我现在不确定如何排序,因为我必须同时处理“x”和“y”。

如果我们以某种方式弄清楚,我猜,如果有一个交叉点,那么对于 (b) 部分,不可能挑出所有的棍子。

我的方向正确吗??

【问题讨论】:

    标签: algorithm computational-geometry intersection


    【解决方案1】:

    可以使用 2D 中的段相交来解决这个问题。

    检查一个线段高于另一个线段与检查 XY 投影中的交叉点相同,如果它们相交,则比较每个线段上交叉点的 Z 坐标。例如。对于线段a=((0,0,0), (2,2,2))b=((0,2,3), (2,0,5)),XY 上的投影是((0,0), (2,2))((0,2), (2,0))。二维交点为(1,1)a 中的 Z 值为 1,b 中的 Z 值为 4。这意味着 b 高于 a

    因此,使用 2D 中的线段相交来查找哪些线段是相关的。要查找删除段的顺序,请使用topological sorting

    【讨论】:

    • 第 1 部分的段相交很好。但我无法理解拓扑排序的最后一条语句
    • 有关系的棒集是partially ordered set,可以表示为有向图。找一个拿起棍子的顺序和找那个有向图中的拓扑排序是一样的。
    • 您的示例是否假设 +Z 指向向上或远离方向?我问的原因是因为 z 的值在您的示例中定义了上下。
    • 另外为什么上面或下面的测试需要在 x-y 计划中相交?例如,如果它们在 X-Y 平面中没有相交,但如果一个 z 大于另一个,那么无论如何都不应该考虑它们的上方和下方吗?
    • 描述不假设向上的方向。只需更改拓扑排序中使用的顺序。我假设棍子是垂直移除的,因此在 XY 中不相交的棍子不会相互阻挡。
    猜你喜欢
    • 2011-11-14
    • 2015-07-03
    • 1970-01-01
    • 2016-12-22
    • 2015-05-17
    • 2022-06-21
    • 1970-01-01
    • 1970-01-01
    • 2012-05-26
    相关资源
    最近更新 更多