Algorithm 三维线段相交

Algorithm 三维线段相交,algorithm,computational-geometry,intersection,Algorithm,Computational Geometry,Intersection,我们可以在O(nlgn)时间内解决二维线段相交问题。在这个问题中,我们得到一组线段,我们必须看看是否有交点。现在她是CLRS的问题了 问题。Charon教授有一套n根棍子,它们在某些地方相互叠放 配置每个杆由其端点指定,每个端点都是一个给出其(x,y,z)坐标的有序三元组。没有一根棍子是垂直的。他希望一次一根地捡起所有棍子,但条件是,只有当棍子上面没有其他棍子时,他才可以捡起一根棍子。 A.给出一个程序,该程序使用两根杆a和b,并报告a是否在上方、下方, 或与b无关。 B描述一种有效的算法,确定

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

问题。Charon教授有一套n根棍子,它们在某些地方相互叠放 配置每个杆由其端点指定,每个端点都是一个给出其(x,y,z)坐标的有序三元组。没有一根棍子是垂直的。他希望一次一根地捡起所有棍子,但条件是,只有当棍子上面没有其他棍子时,他才可以捡起一根棍子。 A.给出一个程序,该程序使用两根杆a和b,并报告a是否在上方、下方, 或与b无关。 B描述一种有效的算法,确定是否有可能拾取所有棍棒,如果有,提供合法的棍棒拾取顺序

我发现它是3D中线段相交的延伸。在2D中,扫描线在“y”方向移动,阵列根据“x”坐标进行排序。我认为在3D中,扫描线应该在“z”维度移动,但我现在不确定如何排序,因为我必须同时处理“x”和“y”

如果我们能找到答案,我想,如果有一个交叉点,那么对于(b)部分,不可能选择所有的棍子


我走的方向对吗?

可以使用二维线段相交来解决这个问题

检查一个线段是否高于另一个线段与检查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)
(1,1)
a
的Z值为1,
b
的Z值为4。这意味着
b
高于
a


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

第1部分的线段交点可以。但我不能理解带关系的树枝拓扑排序集的最后一句话,它可以表示为有向图。查找拾取棍棒的顺序与在该有向图中查找拓扑排序相同。您的示例假设+Z指向向上方向还是远离方向?我问的原因是,在你们的例子中,z的值定义了上下。还有,为什么上下测试需要在x-y平面中相交?例如,如果它们在X-Y平面中不相交,但如果一个平面的z大于另一个平面,那么它们不应该被视为上下两个平面吗?描述并没有假定什么方向是向上的。只需更改拓扑排序中使用的顺序。我假设木棒是垂直移除的,因此在XY中不相交的木棒不会相互阻挡。