1

我有 6 个带有价格的图表条。
每个价格数字将通过尊重min和高度来表示其图形栏的max高度。
我想要的是图表栏的高度不会低于或高于minmax值。

所以我有min = 55和的值max = 110
并且price numbers是:

  1. 49
  2. 212
  3. 717
  4. 1081
  5. 93

通过哪种数学算法我可以达到预期的结果?
这是某种动态可伸缩条形图。

修改后
,价格表中的最小值和最大值将是:49(min price) => 55(min)1081 (max price) => 110(max)

4

2 回答 2

9

解决方案很简单:

  • 选择最小和最大的项目并找出差异。
  • (largest_item - minimum_item) 映射到 (max-min)。
  • 计算ratio = (max-min)/(largest_item-smallest_item)
  • final_value = min_value + ratio*(value-smallest_item)

作为数学函数:

f(x,max,min,largest,smallest) = min + (max-min)/(largest-smallest)*(x-smallest)
where:
x : Input item's price
max: Maximum value (here, 110)
min: Minimum value (here, 55)
largest: Largest item in input (Here, 1081)
smallest: Smallest item in input (Here, 49)

正如@amit 正确指出的那样,一项检查:确保最大和最小的项目是不同的。


所以让 x = 93。我们还有其他 4 个值。

f(x,max,min,largest,smallest) = min + (max-min)/(largest-smallest)*(x-smallest)

value = 55  +   ((110-55)/(1081-49)) * (93-49)
value = 57.344961

更远,

f(93,110,55,1081,49) = 57.344961
f(49,110,55,1081,49) = 55
f(1081,110,55,1081,49) = 110
于 2012-06-20T13:54:11.100 回答
1

功能:

[(x - min ) / (max-min)*55] + 55

确保您追求的边界 - 但您还应该考虑 - 图表应该显示什么?你希望读者从中理解什么?

为什么?

  • (x-min) / (max-min)给出一个范围内的数字[0,1]- 0 代表min, 1 代表max.
  • 将其与 55 相乘可确保范围内的数字[0,55]
  • 添加 55 可确保范围内的数字[55,110]- 正如预期的那样。

(*) 注意:对于 max = min - 由于除以 0,上述失败,请手动处理这些情况。

于 2012-06-20T13:53:35.560 回答