【问题标题】:How to find visibility of a polygon from a vertex v in a concave polygon如何从凹多边形中的顶点 v 找到多边形的可见性
【发布时间】:2019-11-09 22:18:44
【问题描述】:

我正在处理分配 2d 艺术画廊的问题,以找到最少数量的顶点守卫。作为使用遗传算法解决问题的一部分,我需要找出放置在顶点上的守卫可见的多边形区域。

输入是一个具有已知 2d (x,y) 坐标的多边形。你能帮我知道如何计算放置在多边形顶点上的守卫(即他可能看到的多边形的哪一部分)的可见性吗?

【问题讨论】:

  • 到目前为止您尝试过什么?你能缩小你的问题吗?您描述的一般问题已得到很好的研究和记录。首先从你的后卫通过凹角创建光线,找到它们与多边形的交点,并以合理的方式连接它们。
  • 我有这个对多边形进行三角剖分的想法。如果形成的三角形有一个与保护顶点共享的顶点,那么我可以说保护可以查看这个三角形。如果没有共享顶点,我会从保护顶点绘制线段到每个其他三角形顶点,如果这些线段中的任何一条切割多边形的边,我会认为三角形从保护顶点不完全可见。
  • 但是,我不确定这是否是一个优雅的解决方案。关于一般问题,我看过各种研究论文,但没有一篇谈到如何计算可见度的细节。如果您认为对我有帮助,请分享资源

标签: algorithm math geometry


【解决方案1】:

这是一种从多边形内的任意点查找可见区域的解决方案。您可以将其更改为将点限制为多边形顶点:

第 1 步: 从守卫向每个顶点绘制光线,并找到与多边形所有边的交点。

第 2 步:检查光线是穿过多边形(黄色)还是刚刚接触到它(紫色)。

第 3 步: 根据与守卫的距离对射线上的交叉点进行排序,并找到壁橱交叉点。将所有更远的点称为不可见(红色),将更近的点称为可见(绿色)。

步骤 4: 现在多边形的每条边都相当于一个或多个线段,其两端标记为可见的每个线段都是可见的。此类段的总长度。

这是一个更复杂的示例:

请记住,这只是一个开始,您可以对其进行优化。想想 Niko 关于第一次改进的评论。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-19
    • 2018-01-21
    • 2013-02-24
    • 2011-09-08
    • 1970-01-01
    • 2011-05-09
    • 1970-01-01
    • 2016-12-14
    相关资源
    最近更新 更多