public override double calcVolumeFactor()
{
double volume = 0;
var pp = new Vector2(radialFactor, 0);
var slope = new BezierSlope(coneShape);
for (int i = 1; i <= heightSegments; ++i)
{
float v = (float)i / heightSegments;
Vector2 p;
if (radialFactor <= topFactor)
{
p = slope.interp(v);
p.x = Mathf.Lerp(radialFactor, topFactor, p.x);
}
else
{
p = slope.interp(1 - v);
p.y = 1 - p.y;
p.x = Mathf.Lerp(topFactor, radialFactor, p.x);
}
double r = (p.x + pp.x) * 0.5;
volume += r * r * (p.y - pp.y);
pp = p;
}
return volume * stretchFactor * volMultiplier * utilization / 0.8692f;
}