Difference between revisions of "BezierCurve:evaluate"

(Examples: The new example tries to do the same thing as the evaluate() function (i.e. it's useless). It also produces the wrong result.)
(Make a circle follow a curve)
Line 29: Line 29:
 
love.graphics.circle("fill", x, y, 8)
 
love.graphics.circle("fill", x, y, 8)
 
love.graphics.line(curve:render())
 
love.graphics.line(curve:render())
 +
end
 +
</source>
 +
 +
=== Evaluate a point from any amoount of control points ===
 +
 +
<source lang="lua">
 +
local function evaluate (curve, t)
 +
local ccpc = curve:getControlPointCount( )
 +
if ccpc > 1 then
 +
return curve:evaluate(t)
 +
elseif ccpc == 1 then
 +
return curve:getControlPoint(1)
 +
else
 +
return 0, 0
 +
end
 
end
 
end
 
</source>
 
</source>

Revision as of 21:23, 13 August 2022

Available since LÖVE 0.9.0
This function is not supported in earlier versions.

Evaluate Bézier curve at parameter t. The parameter must be between 0 and 1 (inclusive).

This function can be used to move objects along paths or tween parameters. However it should not be used to render the curve, see BezierCurve:render for that purpose.

Function

Synopsis

x,y = BezierCurve:evaluate(t)

Arguments

number t
Where to evaluate the curve.

Returns

number x
x coordinate of the curve at parameter t.
number y
y coordinate of the curve at parameter t.

Examples

Make a circle follow a curve

local controlPoints = {125,125, 125,225, 175,125, 225,125}
local curve         = love.math.newBezierCurve(controlPoints)

function love.draw()
	local time     = love.timer.getTime()
	local loopTime = 4
	local t        = (time / loopTime) % 1
	local x, y     = curve:evaluate(t)

	love.graphics.circle("fill", x, y, 8)
	love.graphics.line(curve:render())
end

Evaluate a point from any amoount of control points

local function evaluate (curve, t)
	local ccpc = curve:getControlPointCount( )
	if ccpc > 1 then
		return curve:evaluate(t)
	elseif ccpc == 1 then
		return curve:getControlPoint(1)
	else
		return 0, 0
	end
end

See Also


Other Languages