蚂蚁能否走向或远离具有多边形障碍物的点?

Can an ant walk towards or away from a point with a polygon obstacle?

给定一个多边形 S 和一个位于 S 外部的点 p,想象一只蚂蚁只能沿着直线朝向或远离 p。

对于某些形状(图 1),可以选择 p,这样蚂蚁至少可以在以下两种可能性之一中畅通无阻地移动:朝向 (T) p 或远离 (A) p。此条件对应于从 p 投射的任何光线与 S 的周长相交恰好 0 或 2 次。

然而,对于相同的形状(图 2),也可能有一些点会导致阻塞 (B) 区域,蚂蚁会在该区域撞到它试图移动的任何方向的多边形。对于其他形状(图 3)可能没有选择导致没有阻塞区域的 p。具有阻挡区域对应于从 p 投射的一些光线与 S 的周长相交超过 2 次。

是否有一种算法可以确定是否存在满足某个给定多边形 S 条件的 p?如果存在这样的点,它是否也可以确定包含它们的区域?

找到多边形障碍物的所有凹角。对于每个角,无限延伸它的两条边。这两条光线之间的扇区,以及(正如 Nico Schertler 指出的那样)该扇区的点反射区域,定义了点必须位于的位置,以便障碍物不会隐藏点光线的角落。

在L型障碍物的例子中,有一个凹角。它的相邻边缘(右上)和它的点反射(左下)之间的扇区形成一个区域(以红色表示),点必须位于该区域。

在U型障碍物的例子中,有两个凹角,对应的两个区域(红色和蓝色)有重叠(紫色)。该点必须在这个紫色区域中。

在有S形障碍物的例子中,有两个重叠区域(紫色)。该点必须位于这两个区域之一。

在 H 形障碍物的示例中,红色和蓝色区域在 H 的水平光束上方有重叠(紫色),蓝色和绿色区域在 H 的右侧有重叠(蓝绿色)水平光束,绿色和黄色区域在水平光束下方有重叠(石灰),黄色和红色区域在光束左侧有重叠(橙色);但是,四个区域之间没有整体重叠,也没有满足约束条件的点。