Class: BezierCurver::Calculator

Inherits:
Object
  • Object
show all
Defined in:
lib/bezier_curver/calculator.rb

Class Method Summary collapse

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