Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 绘图仪GUI组件中的自缩放标尺算法_Algorithm_Scaling_Zooming_Rulers - Fatal编程技术网

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

Algorithm 绘图仪GUI组件中的自缩放标尺算法,algorithm,scaling,zooming,rulers,Algorithm,Scaling,Zooming,Rulers,我正在使用C#/WPF为医疗数据设计(而不是编程)一个数据系列查看器程序。有一个显示数据的主面板,具有常用的鼠标平移/缩放功能(使用左拖动进行平移,使用滚动进行水平缩放,使用双击进行垂直自动调整,使用右拖动进行选择) 问题是:我需要垂直和水平网格,在顶部/左侧带有标尺,类似于音频编辑(goldwave、audacity)、制图(gpsTrackmaker)和ilustration(photoshop、inkscape)程序中看到的网格。此外,这些标尺甚至可以在大多数绘图API(Matlab、GN

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

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

除了始终与内容对齐和缩放外,主要的必要条件是要有一个“抗杂波”算法,该算法仅以尽可能大的粒度绘制勾号标签,而不会使标签相互“碰撞”或隐藏

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

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

如果您有任何建议或示例,我将不胜感激,最好是用C#,但可以用任何语言

  • 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
应该是最大标签的宽度。我没有测试它,但是我们最终使用的算法使用了这个概念。太棒了!超级惊人的答案!我们很长时间以来一直在试图弄清楚这一点,但由于四舍五入的原因,这种奇怪的行为让我们大吃一惊。你还可以提到它背后的理论数学概念的名称吗?缩放属于仿射变换。这是属于谁的@咖啡机