Algorithm 绘图仪GUI组件中的自缩放标尺算法
我正在使用C#/WPF为医疗数据设计(而不是编程)一个数据系列查看器程序。有一个显示数据的主面板,具有常用的鼠标平移/缩放功能(使用左拖动进行平移,使用滚动进行水平缩放,使用双击进行垂直自动调整,使用右拖动进行选择) 问题是:我需要垂直和水平网格,在顶部/左侧带有标尺,类似于音频编辑(goldwave、audacity)、制图(gpsTrackmaker)和ilustration(photoshop、inkscape)程序中看到的网格。此外,这些标尺甚至可以在大多数绘图API(Matlab、GNUPlot、Matplotlib)甚至office程序(Excel、Calc)中配置 除了始终与内容对齐和缩放外,主要的必要条件是要有一个“抗杂波”算法,该算法仅以尽可能大的粒度绘制勾号标签,而不会使标签相互“碰撞”或隐藏 下图显示了Inkscape上相同图形的两个缩放级别。第一行显示每一百个标签。第二行显示每个十年的标签 问题是:“由于这(查看标尺的自动分辨率)在许多程序中似乎是一个已解决的问题,我应该如何查找/哪些资源/教程可用,以便指定和实现这样一个适合我需要的控件?” 如果您有任何建议或示例,我将不胜感激,最好是用C#,但可以用任何语言Algorithm 绘图仪GUI组件中的自缩放标尺算法,algorithm,scaling,zooming,rulers,Algorithm,Scaling,Zooming,Rulers,我正在使用C#/WPF为医疗数据设计(而不是编程)一个数据系列查看器程序。有一个显示数据的主面板,具有常用的鼠标平移/缩放功能(使用左拖动进行平移,使用滚动进行水平缩放,使用双击进行垂直自动调整,使用右拖动进行选择) 问题是:我需要垂直和水平网格,在顶部/左侧带有标尺,类似于音频编辑(goldwave、audacity)、制图(gpsTrackmaker)和ilustration(photoshop、inkscape)程序中看到的网格。此外,这些标尺甚至可以在大多数绘图API(Matlab、GN
- 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
(刻度数)为了完美地工作,W
应该是最大标签的宽度。我没有测试它,但是我们最终使用的算法使用了这个概念。太棒了!超级惊人的答案!我们很长时间以来一直在试图弄清楚这一点,但由于四舍五入的原因,这种奇怪的行为让我们大吃一惊。你还可以提到它背后的理论数学概念的名称吗?缩放属于仿射变换。这是属于谁的@咖啡机