python - 滴答函数绘图器

标签 python algorithm math

我正在尝试解决以下问题。 我正在构建另一个数学函数绘图器,该函数是在其预定义的 x,y 范围内绘制的,这很好。

现在我正在处理背景和 X、Y 轴的刻度(如果显示任何轴)。

我解决了以下问题。 我的固定宽度为 250 p 跳动缺口应在 12.5 至 50 便士之间。

刻度线应指示单位或半单位范围,我的意思是以下内容。

x 范围 (-5, 5):一刻度 = 1

x 范围 (-1, 1):一刻度 = 0.5 或 0.1,具体取决于每个选项将生成的间隙。

x 范围(0.1,0.3):0.05

给定一个 Xrange 如何获得全单位范围或半单位范围之间的刻度数?

或者也许还有其他方法来解决此类问题。

最佳答案

实现此目的的一种方法是“标准化”最小值和最大值之间的差异,并对该值进行大小写区分。在Python中:

delta = maximum - minimum
factor = 10**math.ceil(math.log(delta,10))  # smallest power of 10 greater than delta
normalised_delta = delta / factor           # 0.1 <= normalised_delta < 1
if normalised_delta/5 >= 0.1:
  step_size = 0.1
elif normalised_delta/5 >= 0.05:
  step_size = 0.05
elif normalised_delta/20 <= 0.01:
  step_size = 0.01
step_size = step_size * factor

上面的代码假设您想要最大可能的间隙。对于最小的,您将使用以下 if:

if normalised_delta/20 == 0.005:
  step_size = 0.005
elif normalised_delta/20 <= 0.01:
  step_size = 0.01
elif normalised_delta/5 >= 0.05:
  step_size = 0.05

除了可能有多个合适的值之外,还有一种令人担忧的可能性是没有合适的值。以范围 [0,24] 为例,其中 12.5p 的间隙将给出 1.2 的步长,50p 的间隙将给出步长 4.8。中间没有“单位”或“半单位”。问题是 12.5p 和 50p 之间的差距是 4 倍,而 0.01 和 0.05 之间的差距是 5 倍。因此,您必须稍微扩大允许间隙的范围并相应地调整代码.

澄清一些神奇数字:除以 20 和 5 分别对应于具有最小和最大间隙大小的段数(即 250/12.5 和 250/50)。由于归一化增量在 [0.1,1) 范围内,因此将其除以 20 和 5 分别得到 [0.005,0.05) 和 [0.02,0.2)。这些范围导致第一个范围的可能(标准化)步长为 0.005 和 0.01,第二个范围为 0.05 和 0.1。

关于python - 滴答函数绘图器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/346823/

相关文章:

Python:使用几乎相同的代码 try catch 多个异常

python - 负常量和运算符优先级

algorithm - 关于AVL树的插入操作

objective-c - 需要帮助从分布中生成离散随机数

algorithm - 产生常数模 2 的幂的乘法链

java - 检查用户输入是否为 Int,无异常?

python - 如何在 Python 中将元组更改为数组?

python - 如何在 Pytorch 中实现上限 JSD 损失?

php - MySQL - 创建一个 SQL 算法来确定随机 'popular' 内容

java - 荷兰国旗 - 不适用于更大的阵列