我有一张代表某些地形的地图。我已经弄清楚如何将这张地图划分为“地区”,如岛屿,海洋,海洋,大陆等。地图分解的方式完全是任意的,我可以将其分解为政治边界。
对于每个“区域”,我知道作为该“区域”的一部分的每个像素以及每个像素坐标。我现在想动态调整标注它的文本的大小和位置。
首先,获取文本的大小似乎相当直接(类似于总面积* 0.5),但这是让我困惑的定位。我可以获得绝对中心坐标,但不能保证它位于质量的中心,因此在此处定位文本可能使其完全位于“区域”之外(在U形区域的情况下)。
在给定最大曲线量的情况下,将路径曲线拟合以适应最大尺寸的文本会很好。因此,在U形状中,它也会尽可能多地绘制U形(保持在最大曲线量之下),文本大小足够大,以适应该区域的范围。
有没有人有任何建议或链接来帮助解决这个问题?我正在使用C ++和SFML2.1,但我很高兴得到一些理论。
答案 0 :(得分:0)
问题看起来不像是以某种线性方式解决。但是递归是可能的 - 这是我的(特别编写的)算法:
计算最小可能的两个矩形(尽可能小以保持文本可读)和最大(形状的最大/最小x / y坐标)
将结果矩形计算为x / 2,最大矩形的y / 2
检查是否可以在地图上放置结果矩形(首先检查是否所有角落都可以放置在地图上,然后检查其余的矩形点 - 可以通过使用一些点网格进行优化,即将5px放在其他点上)检查地图是否不是
如果可以放置set,则用结果rect替换最小的rect,否则用结果rect替换最大的rect
重复只要最小!=最大 - 然后walue这是你的结果
质量计算中心非常简单,但它对你没什么帮助 - 想象一下U形 - 质心在形状之外 - 无论如何:
计算你的形状的总像素数,找到划分你的形状质量的垂直线等于用水平线做同样的事情 - 你将得到质量中心的x,y(好的,类似的东西 - 在物理上计算它)感觉你需要检查(像素质量*距质心的距离)
答案 1 :(得分:0)
所以我设法使用Maximal Rectangle Problem找到了解决方案。
它给了我最适合区域的边界框来压缩文本。它没有全部曲线,但它是一个开始。如果我做完了,我会添加更多答案。