遇到的问题
在一个多边形上放置文本标签或工具提示的最佳位置通常位于其“视觉中心”的某个位置,即多边形内部的一个点,周围有尽可能多的空间。
计算这样一个中心首先想到的是多边形质心。你可以用一个简单快速的公式计算多边形中心,但如果形状是凹的或有一个洞,点可以落在形状外面。 我们如何定义我们需要的点?一个更可靠的定义是”不可到达的极点”或”最大内接圆”:多边形中离边缘最远的点。 不幸的是,计算不可访问性的极点既复杂又缓慢。公布的解决方案需要约束delaunay三角化(Constrained Delaunay Triangulation)或计算一个直线骨架作为预处理步骤——这两个步骤都是缓慢且容易出错的。 对于我们的用例,我们不需要一个精确解——我们愿意牺牲一些精度来获得更快的速度。当我们在地图上放置标签时,以毫秒为单位计算比精确计算更重要。我们为这个问题创建了一个新的启发式算法。现有的解决方案
这项在线任务的唯一近似算法是由加西亚-卡斯特利亚诺斯和伦巴多在2007年的论文中描述的。算法是这样的:
- 将点置于任意大小的网格上(本文中为24x24,或576个点),在其边界框内探测多边形,丢弃多边形外的所有点。