Javascript 如何以迭代方式缩放值,但仍然获得原始值的特定分数?

Javascript 如何以迭代方式缩放值,但仍然获得原始值的特定分数?,javascript,algorithm,Javascript,Algorithm,这是一道很简单的数学题,但我的数学不好。比如说,我在做类似的事情: let originalWidth = img.width; let originalHeight = img.height; for (let percent = 100; percent >= 10; percent -= 5) { let percentScale = percent / 100; let ctx = img.getContext("2d"); ctx.scale(percentScale

这是一道很简单的数学题,但我的数学不好。比如说,我在做类似的事情:

let originalWidth = img.width;
let originalHeight = img.height;
for (let percent = 100; percent >= 10; percent -= 5) {
  let percentScale = percent / 100;
  let ctx = img.getContext("2d");
  ctx.scale(percentScale, percentScale);
  img.width = originalWidth * percentScale;
  img.height = originalHeight * percentScale;
  ....
在本例中,
ctx.scale(percentScale,percentScale)
将根据上一次缩放迭代的结果缩放一个百分比,而我想要的是原始对象的一个百分比,但我不想每次都复制原始对象并从那里缩放,因为迭代缩放可以节省计算量,性能是这里的一个因素


如何更改代码以获得正确的数学结果?

您可以取消上次应用的比例因子:

let originalWidth = img.width;
let originalHeight = img.height;
let lastScale = 1;
for (let percent = 100; percent >= 10; percent -= 5) {
   let percentScale = percent / 100;
   let adjustedScale = percentScale / lastScale;
   lastScale = percentScale;
   let ctx = img.getContext("2d");
   ctx.scale(adjustedScale, adjustedScale);
...

如果您希望在n个步骤中以x为因子进行缩放,则每个步骤都应按pow(x,1.0/n)进行缩放。

您指的是原始步骤的百分比是多少?现在percentScale在每次迭代中下降5,这不好吗?百分位数应该是多少?看看两台发动机是如何做到这一点的,并检查缓解功能。以下是一些例子:和。