0

如果我有一个产品:

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
}

这可能真的很简单,但我无法弄清楚!

4

2 回答 2

3

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

fac = exp(log(e/d)/3)
a *= fac
b *= fac
c *= fac
于 2013-08-09T11:06:02.983 回答
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);

于 2013-08-09T11:06:12.553 回答