X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Finclude%2Fbezier.hh;h=a04d449725ab17f346df4d20daa5286df7de0d4c;hb=38d7d319eabc906e82fb42002678c6d42a23b6f7;hp=f5c871ed059b006f741b3763878d6a69024a8574;hpb=63c9cee8ce190aaae4a5db3d2e200d35a570838d;p=lilypond.git diff --git a/lily/include/bezier.hh b/lily/include/bezier.hh index f5c871ed05..a04d449725 100644 --- a/lily/include/bezier.hh +++ b/lily/include/bezier.hh @@ -1,74 +1,56 @@ /* bezier.hh -- declare Bezier and Bezier_bow - (c) 1998 Jan Nieuwenhuizen + (c) 1998--2009 Jan Nieuwenhuizen */ #ifndef BEZIER_HH #define BEZIER_HH -#ifndef STANDALONE -#include "lily-proto.hh" -#endif - -#include "real.hh" -#include "curve.hh" +#include "interval.hh" +#include "offset.hh" +#include "polynomial.hh" /** - Simple bezier curve - */ + Simple bezier curve +*/ class Bezier { public: - Bezier (int steps_i); - - /** - Calculate bezier curve into Offset (x,y) array. - */ - void calc (); - - void set (Array points); - - /** - Return y that goes with x by interpolation. - */ - Real y (Real x); - - Curve curve_; - Curve control_; + void assert_sanity () const; + void scale (Real x, Real y); + void reverse (); + void rotate (Real); + void translate (Offset); + + Real get_other_coordinate (Axis a, Real x) const; + vector solve_point (Axis, Real coordinate) const; + vector solve_derivative (Offset) const; + Interval extent (Axis) const; + Interval control_point_extent (Axis) const; + + Polynomial polynomial (Axis)const; + Offset curve_point (Real t) const; + Real curve_coordinate (Real t, Axis) const; + + static const int CONTROL_COUNT = 4; + + /* + Bezier curves always have 4 control points. Making this into an + vector<> gives unnecessary overhead, and makes debugging a royal + pain. */ + + Offset control_[4]; }; -/** - Implement bow specific bezier curve - */ -class Bezier_bow : public Bezier -{ -public: - Bezier_bow (Paper_def* paper_l); - - /** - Calculate bezier curve for bow from bow parameters. - */ - void blow_fit (); - Real calc_f (Real height); - void calc (); - void calc_controls (); - void calc_default (Real h); - void calc_return (Real begin_alpha, Real end_alpha); - bool check_fit_bo (); - Real check_fit_f (); - void set (Array points, int dir); - void transform (); - void transform_controls_back (); - - Paper_def* paper_l_; - Curve encompass_; - int dir_; - Real alpha_; - Offset origin_; - Curve return_; -}; +void scale (vector *array, Real xscale, Real yscale); +void rotate (vector *array, Real phi); +void translate (vector *array, Offset o); +Bezier slur_shape (Real width, Real height_limit, + Real height_proportion); +Real slur_height (Real width, Real height_limit, Real height_proportion); +void get_slur_indent_height (Real *indent, Real *height, Real width, Real h_inf, Real r_0); #endif // BEZIER_HH