将产品减少到最大总尺寸

时间:2013-08-09 11:02:23

标签: math

如果我有产品:

float d = ( a * b * c );

它超过了某个最大尺寸(例如,在我的例子中),如何减少术语a,b和c以使其适合?

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

这可能很简单,但我无法理解!

2 个答案:

答案 0 :(得分:3)

按照整体比例的立方根对它们进行缩放。

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

答案 1 :(得分: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);

等安全比率