绘图仪GUI组件中自缩尺的算法

时间:2012-01-25 19:48:55

标签: algorithm scaling zooming rulers

我正在使用C#/ WPF设计(不编程)医疗数据的数据系列查看器程序。有一个主面板显示数据,具有常见的鼠标平移/缩放功能(左拖动平移,滚动水平缩放,双击垂直自动调整,右拖动选择)。

问题是:我需要在顶部/左侧带有标尺的垂直和水平网格,类似于在音频编辑(goldwave,audacity),制图(gpsTrackmaker)和ilustration(photoshop,inkscape)程序中看到的那些。此外,这些统治者甚至可以在大多数绘图API(Matlab,GNUPlot,Matplotlib)甚至办公程序(Excel,Calc)中进行配置。

除了始终对齐和缩放内容之外,主要的必要条件是具有“反杂波”算法,该算法仅以最大粒度绘制刻度标签,而不会使标签“碰到”或相互隐藏。

下图显示了Inkscape上同一图形的两个缩放级别。第一行显示每百个标签。第二行显示每个十年标签。

问题是:“由于这个(查看标尺的自动解析)似乎是许多程序中已解决的问题,我应该如何查找/可用的资源/教程是什么,以便我可以指定和实现这样的控制适合我的需要?“

我会感谢任何建议或示例,最好是在C#中,但可以使用任何语言。

enter image description here

1 个答案:

答案 0 :(得分:4)

  • W =标尺的可见角色
  • X =由W
  • 表示的范围(左右)
  • w =标签宽度

n = W/w(您可以显示的最大标签数量)

x = X*w/W(两个标签之间的最小范围)

然后你必须将x舍入到任意大小的较大,较冷的值1,2或5。

例如

  • x=18.4 => x1=20
  • x=539 => x1=1000

w1 = x1/X*W(标签宽度或刻度之间的空格)

n1 = W/w1(滴答数)