source file of the GNU LilyPond music typesetter
- (c) 2007 Joe Neeman <joeneeman@gmail.com>
+ (c) 2007--2009 Joe Neeman <joeneeman@gmail.com>
*/
#include "spring.hh"
Real avg_distance = 0;
Real min_distance = 0;
Real avg_stretch = 0;
+ Real avg_compress = 0;
for (vsize i = 0; i < springs.size (); i++)
{
avg_distance += springs[i].distance ();
avg_stretch += springs[i].inverse_stretch_strength ();
+ avg_compress += 1 / springs[i].inverse_compress_strength ();
min_distance = max (springs[i].min_distance (), min_distance);
}
avg_stretch /= springs.size ();
+ avg_compress /= springs.size ();
avg_distance /= springs.size ();
avg_distance = max (min_distance + 0.3, avg_distance);
Spring ret = Spring (avg_distance, min_distance);
ret.set_inverse_stretch_strength (avg_stretch);
+ ret.set_inverse_compress_strength (1 / avg_compress);
return ret;
}
{
Real force = max (f, blocking_force_);
Real inv_k = force < 0.0 ? inverse_compress_strength_ : inverse_stretch_strength_;
+
+ if (isinf (force))
+ {
+ programming_error ("cruelty to springs");
+ force = 0.0;
+ }
+
return distance_ + force * inv_k;
}