gpt4 book ai didi

algorithm - 一种根据比例重新计算坐标线上标记的算法

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:31:41 25 4
gpt4 key购买 nike

我不知道如何用更少的文字表述我需要的算法的作用;很可能这里已经回答了这样的问题,但我不知道如何搜索它。

我需要的是以下内容。
我正在编写一种二维图形绘图程序。显然,只画主坐标线效果不是很好,因为图形可以远离原点,如果只画主坐标线,用户对其尺寸没有任何引用。
我决定绘制引用线,即以恒定间隔周期性出现的水平线和垂直线,对应于例如整数。然而,由于缩放的可能性,使用恒定间隔并不能很好地工作,也就是说,如果用户放大查看单位正方形的内部,他将再次看到几乎是空的盒子,没有任何尺寸引用。

因此,我需要以某种方式重新调整用于绘制引用线的间隔。换句话说,我需要一个类型为 double -> double 的函数,它接受当前比例系数(我使用的那个指定一个长度单位中有多少像素)或应用的某个函数的值到它(例如,可以沿某个轴在屏幕内容纳的最大单位长度数)并返回步长值(以像素为单位,以逻辑单位为单位,无关紧要),即引用线之间的间隔长度。

我相信此类函数的值集将是可数无限的,也就是说,此函数会将比例系数值的区间映射到步长的固定值。我可以给出算法的粗略描述,或者更准确地说,我需要的映射。它看起来类似于此(输入值是屏幕内的最大单位数):

  • ...
  • [5..9] -> 0.25
  • [9..15] -> 0.5
  • [15..30] -> 1
  • ...

此处的值纯粹是经验值,仅用于说明。

但是,我不知道如何将这组映射外推到更大范围的比例系数值,更不用说如何分析地表达这种依赖关系了。但我确信这是可能的,因为我在许多绘图程序中看到过这样的事情。

我找到了 this看起来非常接近我需要的问题,但我无法根据我的任务调整答案,因为它提到了标签宽度,而我没有任何标签。

最佳答案

您可以为一个数量级(十的幂)精确定义它,然后类似地处理其他数量级并转换回来,例如

double tickStep(double pixelDistance)
{
if(pixelDistance <= 3.0)
return(tickStep(pixelDistance * 10.0) / 10.0);
else if(pixelDistance > 3.0 && pixelDistance <= 5.0)
return(0.125);
else if(pixelDistance > 5.0 && pixelDistance <= 9.0)
return(0.25);
else if(pixelDistance > 9.0 && pixelDistance <= 15.0)
return(0.5);
else if(pixelDistance > 15.0 && pixelDistance <= 30.0)
return(1.0);
else if(pixelDistance > 30.0)
return(tickStep(pixelDistance / 10.0) * 10.0);
}

我使用递归来阐明这个想法,但使用 logpow 可能更有效。

关于algorithm - 一种根据比例重新计算坐标线上标记的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14468248/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com