如果我有一个产品:
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
}
这可能真的很简单,但我无法弄清楚!
如果我有一个产品:
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
}
这可能真的很简单,但我无法弄清楚!
按整体比率的立方根缩放它们。
fac = exp(log(e/d)/3)
a *= fac
b *= fac
c *= fac
#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);