Difference between revisions of "BezierCurve:evaluate"

(Make a circle follow a curve)
(Undo revision 27963 by Darkfrei (talk). Mention the control point requirement in the description instead.)
(Tag: Undo)
 
(2 intermediate revisions by 2 users not shown)
Line 1: Line 1:
 
{{newin|[[0.9.0]]|090|type=function}}
 
{{newin|[[0.9.0]]|090|type=function}}
Evaluate Bézier curve at parameter t. The parameter must be between 0 and 1 (inclusive).
+
Evaluate Bézier curve at parameter t. The parameter must be between 0 and 1 (inclusive) and there must be at least two control points for the curve.
  
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.
+
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 ==
 
== Function ==
 
=== Synopsis ===
 
=== Synopsis ===
 
<source lang="lua">
 
<source lang="lua">
x,y = BezierCurve:evaluate(t)
+
x, y = BezierCurve:evaluate( t )
 
</source>
 
</source>
 
=== Arguments ===
 
=== Arguments ===
{{param|number|t|Where to evaluate the curve.}}
+
{{param|number|t|Where to evaluate the curve. Must be between 0 and 1.}}
 
=== Returns ===
 
=== Returns ===
 
{{param|number|x|x coordinate of the curve at parameter t.}}
 
{{param|number|x|x coordinate of the curve at parameter t.}}
Line 19: Line 19:
 
<source lang="lua">
 
<source lang="lua">
 
local controlPoints = {125,125, 125,225, 175,125, 225,125}
 
local controlPoints = {125,125, 125,225, 175,125, 225,125}
local curve = love.math.newBezierCurve(controlPoints)
+
local curve         = love.math.newBezierCurve(controlPoints)
  
 
function love.draw()
 
function love.draw()
Line 30: Line 30:
 
love.graphics.line(curve:render())
 
love.graphics.line(curve:render())
 
end
 
end
</source>
 
 
 
=== Calculate point at value t ===
 
<source lang="lua">
 
function evaluateBezier (controlPoints, t)
 
local nPts = #controlPoints /2
 
local Vtemp = {}
 
for i = 1,  #controlPoints, 2 do
 
table.insert (Vtemp, {x=controlPoints[i], y=controlPoints[i+1]})
 
end
 
for i = 2, nPts do
 
for j = 1, i-1 do
 
Vtemp[j].x = (1-t)*Vtemp[j].x + t*Vtemp[j+1].x
 
Vtemp[j].y = (1-t)*Vtemp[j].y + t*Vtemp[j+1].y
 
end
 
end
 
local Q = {x=Vtemp[1].x, y=Vtemp[1].y}
 
return Q
 
end
 
 
local controlPoints = {125,125, 125,225, 175,125, 225,125}
 
local t = 0.5
 
local point = evaluateBezier (controlPoints, t)
 
 
</source>
 
</source>
  

Latest revision as of 17:07, 14 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) and there must be at least two control points for the curve.

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. Must be between 0 and 1.

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

See Also


Other Languages