-- Bezier Curve Class
BezierCurve = {}
BezierCurve.__index = BezierCurve
function BezierCurve.new(controlPoints)
local self = setmetatable({}, BezierCurve)
self.controlPoints = controlPoints
return self
end
function BezierCurve:getPoint(t)
local n = #self.controlPoints
local point = Vector3.new(0, 0, 0)
for i = 1, n do
local b = self:bernstein(n - 1, i - 1, t)
point = point + self.controlPoints[i] * b
end
return point
end
function BezierCurve:bernstein(n, i, t)
local b = self:binomial(n, i) * math.pow(t, i) * math.pow(1 - t, n - i)
return b
end
function BezierCurve:binomial(n, i)
local b = self:factorial(n) / (self:factorial(i) * self:factorial(n - i))
return b
end
function BezierCurve:factorial(n)
if n == 0 then
return 1
else
return n * self:factorial(n - 1)
end
end
8 Likes