如果我有产品:
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
}
这可能很简单,但我无法理解!
答案 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);