我正在绘制高程剖面,显示沿路径的高程增益/损失,类似于下面的:
带有手工放置标签的示例海拔剖面 http://img38.imageshack.us/img38/4079/profilewithgoodlabels.png
这基本上是一个折线图,x 轴为起点,y 轴为高程。
我想在沿途的有趣点提供带有点高程的精美标签,就像我手动添加到示例图像中的那些。我正在寻找有关如何最好地放置这些标签的想法,以便:
- 它们不相互重叠
- 它们不与轮廓本身重叠,或者至少以一种看起来很干净的方式发生(例如,在陡峭的山谷中间可能有必要)
- 它们不会延伸到限制整体形象的盒子之外
为了实现这些目标,我认为我可以(至少):
- 翻转文本(参见示例)
- 为领导者选择合适的长度
- 为领导者选择合适的角度(但出于审美原因,可能需要尽量减少变化)
- 在拥挤区域中为不太重要的地方放置点高程
- 拥挤地区的缩写名称(
PlaceName
我的环境中的 s 已经以非常好的方式支持缩写,因此从“South Twin Mountain”切换到“S Twin Mtn”很容易) - 在拥挤的区域完全删除不太重要的注释
但我不知道如何最好地构造这个算法。这似乎是一个优化问题?(尽量减少与注释相关的臭味,并为我试图避免的每件事提供一个数值惩罚?)但是由于有很多离散变量需要优化,我并不真正关心“最佳”解决方案(只是一个好的,最好是稳定的)我不知道该怎么做。
通常如何处理图形中的此类问题?动态规划?分支和绑定?优化的想法是否有根据?是否有任何我可能想要查看的有用的 .NET 库?
(我不想把它完全交给一个通用的绘图库,因为它是整个产品的一个关键特性,而且我计划了一些更多的自定义特性,这些特性可能很难塞进一个通用的绘图库中)