source file of the GNU LilyPond music typesetter
- (c) 2000 Jan Nieuwenhuizen <janneke@gnu.org>
+ (c) 2000--2004 Jan Nieuwenhuizen <janneke@gnu.org>
*/
-#include "debug.hh"
+#include "warn.hh"
#include "paper-def.hh"
#include "slur-bezier-bow.hh"
-#include "main.hh"
Slur_bezier_bow::Slur_bezier_bow (Array<Offset> encompass, Direction dir,
Real h_inf, Real r_0)
Real
-Slur_bezier_bow::enclosed_area_f () const
+Slur_bezier_bow::get_enclosed_area () const
{
Real a = 0;
for (int i=0; i < encompass_.size (); i++)
x = Interval ((encompass_[i-1][X_AXIS] + encompass_[i][X_AXIS])/2,
encompass_[i][X_AXIS]);
y = Interval (0,
- (curve_.get_other_coordinate (X_AXIS,
- (x[MIN] + x[MAX]) / 2)));
+ (curve_.get_other_coordinate (X_AXIS,
+ (x[MIN] + x[MAX]) / 2)));
}
else
{
x = Interval ((encompass_[i-1][X_AXIS] + encompass_[i][X_AXIS]) / 2,
- (encompass_[i][X_AXIS] + encompass_[i+1][X_AXIS]) / 2);
+ (encompass_[i][X_AXIS] + encompass_[i+1][X_AXIS]) / 2);
y = Interval (encompass_[i][Y_AXIS],
- (curve_.get_other_coordinate (X_AXIS, x[MIN])
+ (curve_.get_other_coordinate (X_AXIS, x[MIN])
+ curve_.get_other_coordinate (X_AXIS,
- (x[MIN] + x[MAX]) / 2)
+ (x[MIN] + x[MAX]) / 2)
+ curve_.get_other_coordinate (X_AXIS, x[MAX])) / 3);
}
}
Array<Real>
-Slur_bezier_bow::area_x_gradients_array (Real area)
+Slur_bezier_bow::area_x_gradientses (Real area)
{
Real len = curve_.control_[3][X_AXIS];
Real grow = len / 10.0;
{
Real r = curve_.control_[i+1][X_AXIS];
curve_.control_[i+1][X_AXIS] += grow;
- da[i] = (enclosed_area_f () - area) / grow;
+ da[i] = (get_enclosed_area () - area) / grow;
curve_.control_[i+1][X_AXIS] = r;
}
return da;
if (fit_factor () > 1.0)
blow_fit ();
- Real pct_c0 = gh_scm2double (gh_cdr (scm_assoc (ly_symbol2scm ("bezier-pct-c0"), bezier_props)));
- Real pct_c3 = gh_scm2double (gh_cdr (scm_assoc (ly_symbol2scm ("bezier-pct-c3"), bezier_props)));
- Real pct_in_max = gh_scm2double (gh_cdr (scm_assoc (ly_symbol2scm ("bezier-pct-in-max"), bezier_props)));
- Real pct_out_max = gh_scm2double (gh_cdr (scm_assoc (ly_symbol2scm ("bezier-pct-out-max"), bezier_props)));
- Real steps = gh_scm2double (gh_cdr (scm_assoc (ly_symbol2scm ("bezier-area-steps"),bezier_props)));
+ Real pct_c0 = gh_scm2double (ly_cdr (scm_assoc (ly_symbol2scm ("bezier-pct-c0"), bezier_props)));
+ Real pct_c3 = gh_scm2double (ly_cdr (scm_assoc (ly_symbol2scm ("bezier-pct-c3"), bezier_props)));
+ Real pct_in_max = gh_scm2double (ly_cdr (scm_assoc (ly_symbol2scm ("bezier-pct-in-max"), bezier_props)));
+ Real pct_out_max = gh_scm2double (ly_cdr (scm_assoc (ly_symbol2scm ("bezier-pct-out-max"), bezier_props)));
+ Real steps = gh_scm2double (ly_cdr (scm_assoc (ly_symbol2scm ("bezier-area-steps"),bezier_props)));
for (int i=0; i < steps; i++)
{
- Real area = enclosed_area_f ();
- if (!i)
- DEBUG_OUT << to_str ("Init area: %f\n", area);
-
+ Real area = get_enclosed_area ();
if (area <= beautiful)
break;
- Array<Real> da = area_x_gradients_array (area);
+ Array<Real> da = area_x_gradientses (area);
// urg
Real pct = pct_c0 + pct_c3 * length * length * length;
curve_.control_[1][X_AXIS] -= da[0] * u * pct;
curve_.control_[2][X_AXIS] -= da[1] * u * pct;
}
-
- // Real area = enclosed_area_f ();
}
/*
- max ( encompass.y / curve.y )
+ max (encompass.y / curve.y)
*/
Real