gpt4 book ai didi

algorithm - 如何从现有的 "step list"定义匹配轴槽口

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:50:10 26 4
gpt4 key购买 nike

我需要一种方法来对齐两个单独轴上的刻度线,同时能够控制“步进”值(刻度线之间的值),其中两个轴都从标记 0 开始并以不同的最大值结束。

为什么会出现这个问题:

Flot,JS 图表包有对齐刻度线的选项,但当我这样做时,我无法控制步长值。但是我可以直接控制步长值,但是我失去了对齐刻度线的能力。然而,我可以恢复定义我自己的最大值和步长值,以获得我需要的东西(对齐刻度线,同时保持所需的步长值),但我需要一些帮助。产生这个问题(继续阅读以了解详细信息)。

示例

设a为A轴上的最大值,b为B轴上的最大值。

在这个例子中,设 a = 30,b = 82。假设我想要 6 个刻度线(不包括轴末端的额外刻度线)。实际上,我在尝试了几次之后猜到了 6。

一旦我有了所需数量的刻度线,我就可以这样做:

  • 30/6 = 5(我只是为轴 A 设置了所需的步长值)
  • 现在需要找出轴 B 的刻度对齐方式
  • 82/6 = 13.67(不是一个很好的值,我更喜欢更圆润的值)
  • 将 B 的最大值移动到 90 ,其中 90/6 = 15 (很好 - 我刚得到轴 B 所需的步长值)

最终结果

输入:

  • a_max = 30, b_max = 82
  • (实际上 a_max 可以是 28.5、29.42,b_max 可以是 84、85.345 等)

输出:

  • a_adjusted_max = 30,b_adjusted_max = 90,
  • a_step = 5, b_step = 15
  • 刻度数 = 6(如果计数结束则为 +1)

视觉:

|---------|---------|---------|---------|---------|---------> A
0 5 10 15 20 25 30

|---------|---------|---------|---------|---------|---------> B
0 15 30 45 60 75 90

“需求”总结

  • 需要每个轴的 步长值 为 1、2、5、10、15、20、25、50、100 之一(例如,A 为 5,B 为 15)
  • 需要为每个轴调整最大值(例如 A 为 30,B 为 90)
  • 需要两个轴的刻度数匹配
  • (可选)刻度的数量是灵活的,但应该是 4 到 12 之间的任何地方作为最佳点
  • 调整后的最大值等于或大于原始最大值,并且位于“四舍五入数”(即在我上面的示例中,90 优于 82)

问题(问题)

  • 我需要删除大部分猜测并自动生成刻度线。
  • 即起初,我需要更好的方法来获取刻度线的数量,因为我在上面猜测了我想要的刻度线数量,因为我想要一个好的“步长”值,可以是 1、2 , 5, 10, 15, 20, 25, 50, 100。最大值从 4 开始,最高可达 100。在极少数情况下,最高可达 500。在大多数情况下,最大值保持在 30-90 之间。<

我该怎么做?

最佳答案

这是我想出的一个过程。我假设您只需要整数。

  • 选择 4 到 12 之间的刻度数
  • 使用这个刻度数计算AB 轴所需的步数
  • 使用这些步长值计算我们需要将轴 A 和轴 B 延长多少;将这些数字加在一起并记住结果
  • 从头开始重复下一个刻度值
  • 我们选择给出最小分数的刻度数;如果有平局,我们选择较小数量的刻度数

以下是一些示例结果:

a=30, b=82 给出 4 个刻度

 0    10    20    30
0 28 56 84

a=8, b=5 给出 6 个刻度

 0     2     4     6     8    10
0 1 2 3 4 5

这是伪代码:

a = range of A axis
b = range of B axis

tickList[] = {4,5,6,7,8,9,10,11,12}

// calculate the scores for each number of ticks
for i from 0 to length(tickList)-1
ticks = tickList[i]

// find the number of steps we would use for this number of ticks
Astep = ceiling(a/(ticks-1))
Bstep = ceiling(b/(ticks-1))

// how much we would need to extend the A axis
if (a%Astep != 0)
Aextend[i] = Astep - a%Astep
else
Aextend[i] = 0
end

// how much we would need to extend the B axis
if (b%Bstep != 0)
Bextend[i] = Bstep - b%Bstep
else
Bextend[i] = 0
end

// the score is the total extending we would need to do
score[i] = Aextend[i] + Bextend[i]

end


// find the number of ticks that minimizes the score
bestIdx = 0
bestScore = 1000;

for i from 0 to length(tickList);
if (score[i] < bestScore)
bestIdx = i
bestScore = score[i]
end
end

bestTick = tickList[bestIdx]
bestAstep = ceiling(a/(bestTick-1))
bestBstep = ceiling(b/(bestTick-1))

A 轴从 0bestAstepbestAstep*bestTick

B 轴从 0bestBstepbestBstep*bestTick

关于algorithm - 如何从现有的 "step list"定义匹配轴槽口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28285412/

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