0

我有一张代表一些地形的地图。我已经研究出如何将这张地图分解为岛屿、海洋、海洋、大陆等“区域”。地图的分解方式完全是任意的,我可能会将其分解为政治边界。

对于每个“区域”,我知道作为该“区域”一部分的每个像素以及每个像素坐标。我现在想动态调整和定位标记它的文本。

首先,获取文本的大小似乎相当简单(类似于总面积 * 0.5),但让我感到困惑的是定位。我可以得到绝对中心坐标,但这不能保证在质量中心,因此将文本定位在此处可能使其完全位于“区域”之外(在 U 形区域的情况下)。

给定最大数量的曲线,弯曲路径以适应最大尺寸的文本会很好。因此,在 U 形中,它还会尽可能多地绘制 U 形(保持在最大曲线量以下),文本大小刚好足以适合该区域的范围。

有没有人有任何建议或链接来帮助解决这个问题?我正在使用 C++ 和 SFML2.1,但我很高兴得到一些理论。

4

2 回答 2

0

问题看起来不可能以某种线性方式解决。但是递归是可能的——这里是我的(临时编写的)算法:

计算两个可能最小的矩形(尽可能小以保持文本可读)和最大(形状的最大/最小 x/y 坐标)

计算结果矩形为最大矩形的 x/2, y/2

检查是否可以在地图上放置结果矩形(首先检查是否所有角都可以放置在地图上,然后检查其余矩形点 - 可以通过使用一些点网格进行优化,即彼此放置 5px)检查如果地图不是

如果可以放置设置用结果矩形替换最小的矩形,否则用结果矩形替换最大的其余部分

只要最小就重复!=最大 - 然后认为这是你的结果

质心计算很容易,但它对你没有多大帮助 - 想象一下 U 形的东西 - 质心在形状之外 - 无论如何:

计算形状的像素总数,找到将形状质量相等的垂直线,与水平线相同-您将获得质心的x,y(好的,类似的-从物理意义上计算它,您需要检查(像素质量*距质心的距离)

于 2013-09-08T09:47:29.090 回答
0

因此,我设法使用最大矩形问题找到了解决方案。

它为我提供了最适合将文本压缩到的区域的边界框。它并没有完全弯曲,但它是一个开始。如果我解决了,我会添加更多答案。

于 2013-09-09T10:24:36.610 回答