Difference between revisions of "love.graphics.polygon (Français)"

(few correction)
(Tracer un boid tourné (triangle dirigé))
 
(4 intermediate revisions by the same user not shown)
Line 2: Line 2:
 
Trace un polygone.
 
Trace un polygone.
  
En suivant l'argument de mode, cette fonction accepte différents arguments numériques ou une table simple d'arguments numériques. Dans tous les cas, les arguments sont interprétés comme alternants les coordonnées x et y des sommets du polygone.
+
En fonction de l'argument de mode, cette fonction accepte différents arguments numériques ou une table simple d'arguments numériques. Dans tous les cas, les arguments sont interprétés comme alternants les coordonnées x et y des sommets du polygone.
  
 
{{notice (Français)|Lorsqu'utilisé en mode '''fill''' (remplissage), le polygone doit être [https://fr.wikipedia.org/wiki/Polygone_convexe convexe] et [https://fr.wikipedia.org/wiki/Polygone_simple simple] ou des erreurs de rendus pourraient apparaître. Les fonctions [[love.math.triangulate (Français)|love.math.triangulate]] et [[love.math.isConvex (Français)|love.math.isConvex]] peuvent être utilisées avec [[0.9.0]]+.}}
 
{{notice (Français)|Lorsqu'utilisé en mode '''fill''' (remplissage), le polygone doit être [https://fr.wikipedia.org/wiki/Polygone_convexe convexe] et [https://fr.wikipedia.org/wiki/Polygone_simple simple] ou des erreurs de rendus pourraient apparaître. Les fonctions [[love.math.triangulate (Français)|love.math.triangulate]] et [[love.math.isConvex (Français)|love.math.isConvex]] peuvent être utilisées avec [[0.9.0]]+.}}
Line 36: Line 36:
 
-- Définit une table avec les coordonnées
 
-- Définit une table avec les coordonnées
 
-- Cette table pourrait également être construite incrémentalement
 
-- Cette table pourrait également être construite incrémentalement
local vertices = {100, 100, 200, 100, 150, 200}
+
local vecteurs = {100, 100, 200, 100, 150, 200}
  
 
-- Passe la table à la fonction comme second argument
 
-- Passe la table à la fonction comme second argument
love.graphics.polygon('fill', vertices)
+
love.graphics.polygon('fill', vecteurs)
 +
</source>
 +
 
 +
=== Tracer un polygone concave ===
 +
<source lang="lua">
 +
local vecteurs  = {100,100, 200,100, 200,200, 300,200, 300,300, 100,300} -- forme concave en L.
 +
local triangles = love.math.triangulate(vecteurs)
 +
 
 +
for i, triangle in ipairs(triangles) do
 +
love.graphics.polygon("fill", triangle)
 +
end
 +
</source>
 +
 
 +
=== Tracer un rectangle avec rotation ===
 +
Voici une méthode pour tracer un rectangle avec rotation [[love.graphics.rectangle|rectangle]].
 +
 
 +
<source lang="lua">
 +
function drawRotatedRectangle(mode, x, y, largeur, hauteur, angle)
 +
local cosa, sina = math.cos(angle), math.sin(angle)
 +
 
 +
local dx1, dy1 = hauteur*cosa,  hauteur*sina
 +
local dx2, dy2 = -hauteur*sina, hauteur*cosa
 +
 
 +
local px1, py1 = x,        y
 +
local px2, py2 = x+dx1,    y+dy1
 +
local px3, py3 = x+dx1+dx2, y+dy1+dy2
 +
local px4, py4 = x+dx2,    y+dy2
 +
 +
love.graphics.polygon(mode, px1,py1, px2,py2, px3,py3, px4,py4)
 +
end
 +
</source>
 +
 
 +
=== Tracer un boid tourné (triangle dirigé) ===
 +
[[File:boid.png|upright=0.5|thumb|right|top|Triangle tracé en utilisant love.graphics.polygon]]
 +
<source lang="lua">
 +
function drawBoid (mode, x, y, longueur, largeur, angle) -- position, longueur, largeur et angle
 +
love.graphics.push()
 +
love.graphics.translate(x, y)
 +
love.graphics.rotate( angle )
 +
love.graphics.polygon(mode, -longueur/2, -largeur /2, -longueur/2, largeur /2, longueur/2, 0)
 +
love.graphics.pop()
 +
end
 +
x, y, angle = 200, 100, math.pi/4
 +
drawBoid ("fill", x, y, 20, 10 , angle)
 +
</source>
 +
 
 +
=== [https://fr.wikipedia.org/wiki/Hexadécagone Hexadécagone] Pixel-perfect ===
 +
[[File:hexadecagon.png|upright=0.5|thumb|right|top|Hexadécagone utilisant love.graphics.polygon]]
 +
Pour un meilleur résultat, il peut être utilisé avec le style de ligne "rough" (brut) et le filtre de canvas "nearest" (plus proche).
 +
<source lang="lua">
 +
function hexadecagon (mode, x, y, radius) -- identique à la fonction love.graphics.circle
 +
local w1, w2 = math.atan(0.21), math.atan(0.72) -- valeurs magiques
 +
local a = radius
 +
local b = radius*math.sin (w1)
 +
local c = radius*math.cos (w2)
 +
local d = radius*math.sin (w2)
 +
local vertices = {
 +
a, b,  c, d,  d, c,  b, a,
 +
-b, a, -d, c, -c, d, -a, b,
 +
-a,-b, -c,-d, -d,-c, -b,-a,
 +
b,-a,  d,-c,  c,-d,  a,-b}
 +
love.graphics.translate (x+0.5, y+0.5)
 +
love.graphics.polygon (mode, vertices)
 +
love.graphics.translate (-x-0.5, -y-0.5)
 +
end
 +
 
 +
canvas = love.graphics.newCanvas(width, height)
 +
canvas:setFilter("nearest", "nearest")
 +
love.graphics.setLineStyle("rough")
 +
love.graphics.setCanvas (canvas)
 +
love.graphics.setColor (0,1,0)
 +
hexadecagon ("line", 200, 100, 60)
 +
love.graphics.setCanvas ()
 +
 
 +
function love.draw()
 +
love.graphics.setColor (1,1,1)
 +
love.graphics.draw (canvas)
 +
end
 
</source>
 
</source>
  

Latest revision as of 22:21, 5 January 2023

Disponible depuis LÖVE 0.4.0
Ce-tte function n'est pas supporté-e par des versions plus anciennes.

Trace un polygone.

En fonction de l'argument de mode, cette fonction accepte différents arguments numériques ou une table simple d'arguments numériques. Dans tous les cas, les arguments sont interprétés comme alternants les coordonnées x et y des sommets du polygone.

O.png Lorsqu'utilisé en mode fill (remplissage), le polygone doit être convexe et simple ou des erreurs de rendus pourraient apparaître. Les fonctions love.math.triangulate et love.math.isConvex peuvent être utilisées avec 0.9.0+.  


Fonction

Synopsis

love.graphics.polygon( mode, ... )

Arguments

DrawMode (Français) mode
La façon dont le polygone doit être tracé.
number (Français) ...
Les sommets du polygone.

Retourne

Rien.

Fonction

Synopsis

love.graphics.polygon( mode, vertices )

Arguments

DrawMode (Français) mode
La façon dont le polygone doit être tracé.
table (Français) vertices
Les sommets du polygone sous forme de table.

Retourne

Rien.

Exemples

Deux façons de tracer le même triangle

Triangle tracé en utilisant love.graphics.polygon

Cet exemple montre comment passer les coordonnées explicitement et comment les passer par un table en argument.

-- Passe directement les coordonnées
love.graphics.polygon('fill', 100, 100, 200, 100, 150, 200)

-- Définit une table avec les coordonnées
-- Cette table pourrait également être construite incrémentalement
local vecteurs = {100, 100, 200, 100, 150, 200}

-- Passe la table à la fonction comme second argument
love.graphics.polygon('fill', vecteurs)

Tracer un polygone concave

local vecteurs  = {100,100, 200,100, 200,200, 300,200, 300,300, 100,300} -- forme concave en L.
local triangles = love.math.triangulate(vecteurs)

for i, triangle in ipairs(triangles) do
	love.graphics.polygon("fill", triangle)
end

Tracer un rectangle avec rotation

Voici une méthode pour tracer un rectangle avec rotation rectangle.

function drawRotatedRectangle(mode, x, y, largeur, hauteur, angle)
	local cosa, sina = math.cos(angle), math.sin(angle)

	local dx1, dy1 = hauteur*cosa,   hauteur*sina
	local dx2, dy2 = -hauteur*sina, hauteur*cosa

	local px1, py1 = x,         y
	local px2, py2 = x+dx1,     y+dy1
	local px3, py3 = x+dx1+dx2, y+dy1+dy2
	local px4, py4 = x+dx2,     y+dy2
	
	love.graphics.polygon(mode, px1,py1, px2,py2, px3,py3, px4,py4)
end

Tracer un boid tourné (triangle dirigé)

Triangle tracé en utilisant love.graphics.polygon
function drawBoid (mode, x, y, longueur, largeur, angle) -- position, longueur, largeur et angle
	love.graphics.push()
	love.graphics.translate(x, y)
	love.graphics.rotate( angle )
	love.graphics.polygon(mode, -longueur/2, -largeur /2, -longueur/2, largeur /2, longueur/2, 0)
	love.graphics.pop() 
end
x, y, angle = 200, 100, math.pi/4
drawBoid ("fill", x, y, 20, 10 , angle)

Hexadécagone Pixel-perfect

Hexadécagone utilisant love.graphics.polygon

Pour un meilleur résultat, il peut être utilisé avec le style de ligne "rough" (brut) et le filtre de canvas "nearest" (plus proche).

function hexadecagon (mode, x, y, radius) -- identique à la fonction love.graphics.circle
	local w1, w2 = math.atan(0.21), math.atan(0.72) -- valeurs magiques
	local a = radius
	local b = radius*math.sin (w1)
	local c = radius*math.cos (w2)
	local d = radius*math.sin (w2)
	local vertices = {
		 a, b,  c, d,  d, c,  b, a, 
		-b, a, -d, c, -c, d, -a, b, 
		-a,-b, -c,-d, -d,-c, -b,-a, 
		 b,-a,  d,-c,  c,-d,  a,-b}
	love.graphics.translate (x+0.5, y+0.5)
	love.graphics.polygon (mode, vertices)
	love.graphics.translate (-x-0.5, -y-0.5)
end

canvas = love.graphics.newCanvas(width, height)
canvas:setFilter("nearest", "nearest")
love.graphics.setLineStyle("rough")
love.graphics.setCanvas (canvas)
	love.graphics.setColor (0,1,0)
	hexadecagon ("line", 200, 100, 60)
love.graphics.setCanvas ()

function love.draw()
	love.graphics.setColor (1,1,1)
	love.graphics.draw (canvas)
end

Français


Autres langues