【问题标题】:Math: Formula to scale a number to another number数学:将一个数字缩放为另一个数字的公式
【发布时间】:2017-08-28 13:14:45
【问题描述】:

我今天早些时候问了一个类似的问题,结果我只是数学很烂,因为我也想不通这个问题。

我正在通过宽度/高度计算屏幕比例。我需要一个函数来将结果数字转换为新的比例。

例如

function convertNum(ratio) {
  return //formula here
}

例子:

Given a resolution of 3000x1000 = ratio of 3 (i.e. 3000/1000).
I want it converted to 133.3 via the function, e.g. convertNum(3) spits out 133.33

2500x1000 = 2.5 (desired result: 100)
2000x1000 = 2   (desired result: 66.6)
1500x1000 = 1.5 (desired result: 33.3)
1000x1000 = 1   (desired result: 0)

对于所有高于 1.0 的屏幕比例,它应该保持这种缩放方式。

【问题讨论】:

  • "我想把它转换成 133.3" --- 133.3 是从哪里来的?
  • @danh 这是这种技术的一种变体:andyshora.com/css-image-container-padding-hack.html 我正在为各种分辨率的资产提供适当的填充。这些比率似乎与期望的结果成线性关系。因此,每增加 0.5 的比率会导致 33.3% 的额外填充。
  • @daveycroqet 所以((ratio - 1) / 0.5) * 0.333?
  • @Carcigenicate 是的,你明白了。提交作为答案!
  • @daveycroqet 检查我更新的答案。它实际上可以进一步简化并更精确。

标签: javascript math


【解决方案1】:

比率每增加 0.5,您需要额外增加 33.3%。

首先弄清楚你需要添加多少“填充块”:

// Subtracting 1 since 1 should result in a 0
(ratio - 1) / 0.5

然后将填充块的数量乘以填充量:

((ratio - 1) / 0.5) * 0.333

但是除以 0.5 和乘以 2 是一回事,所以可以进一步简化为:

(ratio - 1) * 2 * 0.333

但这显然与以下内容相同:

(ratio - 1) * 0.666

不过,您可以通过将其更改为:

(ratio - 1) * (2 / 3)

【讨论】:

  • 这是一个非常彻底的细分,我非常感激。我不知道为什么我的大脑无法破译这个数学,因为你让它看起来很简单!
  • @daveycroqet 编写代码的很大一部分是计算小的数学方程式。如果你练习它,你会随着时间的推移变得更好。我喜欢把东西画出来。即使这不是视觉问题,只是看到某物有形的帮助。在你写作的时候,在你身边放一张折叠的方格纸和一支笔可以鼓励它。复习基础代数也很有帮助,即使你以前学过。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多