Class: BezierCurver::Calculator
- Inherits:
-
Object
- Object
- BezierCurver::Calculator
- Defined in:
- lib/bezier_curver/calculator.rb
Class Method Summary collapse
-
.calculate_point(p0, p1, p2, p3, p4, t) ⇒ Object
Calculate 4th degree Bezier curve (5 control points).
- .generate_curve_points(control_points, segments = 100) ⇒ Object
Class Method Details
.calculate_point(p0, p1, p2, p3, p4, t) ⇒ Object
Calculate 4th degree Bezier curve (5 control points)
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
# File 'lib/bezier_curver/calculator.rb', line 6 def self.calculate_point(p0, p1, p2, p3, p4, t) x = (((1 - t)**4) * p0[0]) + (4 * ((1 - t)**3) * t * p1[0]) + (6 * ((1 - t)**2) * (t**2) * p2[0]) + (4 * (1 - t) * (t**3) * p3[0]) + ((t**4) * p4[0]) y = (((1 - t)**4) * p0[1]) + (4 * ((1 - t)**3) * t * p1[1]) + (6 * ((1 - t)**2) * (t**2) * p2[1]) + (4 * (1 - t) * (t**3) * p3[1]) + ((t**4) * p4[1]) [x, y] end |
.generate_curve_points(control_points, segments = 100) ⇒ Object
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/bezier_curver/calculator.rb', line 22 def self.generate_curve_points(control_points, segments = 100) points = [] (0...control_points.length).step(5) do |i| next if i + 4 >= control_points.length curve_segment = [] (0..segments).each do |j| t = j.to_f / segments point = calculate_point( control_points[i], control_points[i + 1], control_points[i + 2], control_points[i + 3], control_points[i + 4], t ) curve_segment << point end points << curve_segment end points end |