Bezier Curve Class

-- 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