【问题标题】:Scanning known locations on a plane扫描飞机上的已知位置
【发布时间】:2013-02-02 05:38:31
【问题描述】:

想象一个平面,在已知位置有许多点。大多数都聚集在一起,但有些是异常值,并且有很大的区域根本没有点。我有多个客户可以通过矩形视口查看飞机。每个客户的视口可能具有不同的尺寸,并且可以立即移动到平面上的任何位置。客户不知道点的位置;只有服务器可以。当客户端连接时,它会将其视口的大小传达给服务器,并且服务器应该响应一个位置,在该位置该客户端的视口可以看到一个或多个点。客户端访问该位置,从访问这些点收集数据,将该数据发送回服务器,然后请求下一个访问位置。这种情况一直持续到所有点都被至少一个客户访问过为止。

我需要一个高效的算法来选择要访问的位置。一个理想的解决方案将通过在视口位置中包含尽可能多的未访问点、最大限度地减少对点的重复访问以及不访问没有未访问点的位置来最小化客户需要访问的位置数量。你能推荐一个算法吗?

【问题讨论】:

  • 这类似于the set covering problem,尽管您有额外的皱纹,即您的集合是通过选择放置视口的位置来确定的,因此获取它们可能的集合列表可能比您需要的更昂贵去做。
  • 是的,它很相似,但正如你所提到的,找出所有可能的集合是非常昂贵的......平面上的网格并让客户访问包含任何点的所有经纬网,这应该是相当有效的。

标签: algorithm geometry


【解决方案1】:

为此:

   1) generate a Dalauney triangulation for the points  
   2) sort the triangles by size    
   3) for each vertex in the largest triangle:  
       3a) locate a corner of the viewport at the vertex  
       3b) try each neighboring point on the longest diameter of the viewport
       3c) determine orientation which encloses the maximum number of points  
       3d) position viewport at that orientation
       3e) goto step (3b)  
   4) delete the visited points
   5) goto step (3)

【讨论】:

  • 哇,这里面有很多有趣的数学。我必须在那个问题上回复你。但我意识到我没有说清楚的一件事是视口不能旋转,只能翻译。
  • 我不确定“尝试视口最长直径上的每个相邻点”是什么意思。你能详细说明一下吗?
  • 假设您的视口是一个带有点 ABCD 的菱形,菱形的长直径与 AC 对应。您将 A 放置在最大三角形的每个顶点上,然后通过旋转视口使 X 与 AC 共线来尝试三角形的每个相邻点 X。您在该方向记录视口内的点数。
  • 如果视口无法旋转,则执行相同的步骤,但跳过步骤 3b。
猜你喜欢
  • 2012-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-08
相关资源
最近更新 更多