]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/bezier.cc
lilypond-manuals.css: edit color scheme and some spacing
[lilypond.git] / lily / bezier.cc
index 7d3ad6af14fff2d8d2a24267f6fc9e9b729dff6b..eacd4fe6a44e95f224d6a9f4894455198167710a 100644 (file)
@@ -1,7 +1,7 @@
 /*
   This file is part of LilyPond, the GNU music typesetter.
 
-  Copyright (C) 1998--2014 Jan Nieuwenhuizen <janneke@gnu.org>
+  Copyright (C) 1998--2015 Jan Nieuwenhuizen <janneke@gnu.org>
 
   LilyPond is free software: you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
@@ -38,9 +38,9 @@ scale (vector<Offset> *array, Real x, Real y)
 }
 
 void
-rotate (vector<Offset> *array, Real phi)
+rotate (vector<Offset> *array, Real deg)
 {
-  Offset rot (complex_exp (Offset (0, phi)));
+  Offset rot (offset_directed (deg));
   for (vsize i = 0; i < array->size (); i++)
     (*array)[i] = complex_multiply (rot, (*array)[i]);
 }
@@ -140,8 +140,9 @@ Bezier::curve_point (Real t) const
   return o;
 }
 
-Real
-Bezier::slope_at_point (Real t) const
+// The return value is normalized unless zero or indefinite.
+Offset
+Bezier::dir_at_point (Real t) const
 {
   Offset second_order[3];
   Offset third_order[2];
@@ -152,10 +153,7 @@ Bezier::slope_at_point (Real t) const
   for (vsize i = 0; i < 2; i++)
     third_order[i] = ((second_order[i + 1] - second_order[i]) * t) + second_order[i];
 
-  if (third_order[1][X_AXIS] - third_order[0][X_AXIS] == 0)
-    return infinity_f;
-
-  return (third_order[1][Y_AXIS] - third_order[0][Y_AXIS]) / (third_order[1][X_AXIS] - third_order[0][X_AXIS]);
+  return (third_order[1] - third_order[0]).direction ();
 }
 
 /*
@@ -324,9 +322,9 @@ Bezier::scale (Real x, Real y)
 }
 
 void
-Bezier::rotate (Real phi)
+Bezier::rotate (Real deg)
 {
-  Offset rot (complex_exp (Offset (0, phi)));
+  Offset rot (offset_directed (deg));
   for (int i = 0; i < CONTROL_COUNT; i++)
     control_[i] = complex_multiply (rot, control_[i]);
 }