【问题标题】:Reducing product to a maximum total size将产品缩小到最大总尺寸
【发布时间】:2013-08-09 11:02:23
【问题描述】:

如果我有产品:

float d = ( a * b * c );

而且它超过了某个最大尺寸(在我的示例中为 e),我如何减少 a、b 和 c 项以使其适合?

if ( d > e )
{
    // reduce a, b and c by some fixed percentage, such that ( a * b * c ) == e
}

这可能真的很简单,但我想不通!

【问题讨论】:

  • 您想将它们减少相同的百分比吗?使abc 的比率保持不变?
  • 这个问题似乎跑题了,因为它是关于数学的

标签: math


【解决方案1】:

按整体比率的立方根缩放它们。

fac = exp(log(e/d)/3)
a *= fac
b *= fac
c *= fac

【讨论】:

    【解决方案2】:
    #include <math.h>
    …
    double scale = cbrt(e / d);
    float new_a = a * scale;
    float new_b = b * scale;
    float new_c = c * scale;
    

    请注意,上面计算的new_a * new_b * new_c 可能不完全是e。可能略高于。如果您希望产品绝对低于e,请采用scale = cbrt(0.5 * e / d); 之类的安全比率

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-19
      • 1970-01-01
      • 2018-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多