【问题标题】:Find all polygons formed by intersections of lines查找由线的交点形成的所有多边形
【发布时间】:2014-02-06 07:37:13
【问题描述】:

我有一个由墙壁描述为线段的迷宫(没有给定顺序)。给定一个点,我需要确定它是否在迷宫内。一切都在笛卡尔平面内(没有离散化)。


我的想法是将问题转化为:

给定平面中的一些线段,找到所有多边形,其顶点位于给定线段的端点且边位于线段上(您可以在下图中看到,您不能假设边会形成子集段)。

然后只需检查:如果一个点仅在一个多边形内,则它在迷宫内,否则不。


我想到的解决方案是:散列端点和线交点,然后寻找循环。

还有其他建议吗? 谢谢!

(忽略图像中的颜色)

【问题讨论】:

    标签: geometry computational-geometry robotics maze


    【解决方案1】:

    找到边界(外部)多边形就足够了。这可以通过在边界上找到一个点并从该点沿一个方向逐段遍历来完成。如果有比选择“外部”更多的可能性。算法可以这样描述:

    find boundary point
    find first direction to go and go to that point
    while current point is different than fist one
      find next direction to go
      go to next point
    

    第一个点可以找到 Y 坐标最高的点,如果这样的点多于其中 X 最低的点。我们可以称之为左上角。

    第一个方向:第一个点连接到其他点并且这些点具有

    下一个方向:某个(传入)段到达当前点,下一段在正方向上距离传入段最远,与传入段顺时针方向的第一段相同。

    【讨论】:

    • 为什么找到外面的就够了?如果重点是在其中一个小孩里面怎么办?那不是迷宫的一部分。
    • 我没有意识到有洞,我以为那是“普通”的墙壁。比类似的方法可以工作。使来自给定点和第一个相交段的射线相交,找到包含该相交的循环(沿一个方向遍历)。如果该循环与外循环相同,则点位于多边形中,否则则位于孔中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-24
    • 1970-01-01
    • 2013-04-29
    • 2021-11-12
    • 2011-07-08
    相关资源
    最近更新 更多