CODE:
from random import*
import time
# (x,y) sont les coordonnées de point ou on pose la tuile.
# n est le nombre de points pour approximer les arcs de cercles.
# col1 et col2 sont les couleurs.
# p3 est le polygone central de la tuile
# p1 et p2 sont les polygones des coins de la tuiles
# on défini deux tuiles , la tuile2 est l'image de la tuile1 par rotation d'un angle de 90º
def tuile1(x,y,n,col1,col2):
LP1=[]
for k in range(n+1):
O = Point(x,y,is_visible=False)
A = Point(x+0.5,y,is_visible=False)
P = Rotate(A,k/n*3.14/2,O)
P.is_visible=False
LP1.append(P)
LP2=[]
for k in range(n+1):
O = Point(x+1,y+1,is_visible=False)
A = Point(x+0.5,y+1,is_visible=False)
P = Rotate(A,k/n*3.14/2,O)
P.is_visible=False
LP2.append(P)
LC1 = LP1
LC2 = LP2
O = Point(x,y+1,is_visible=False)
LC1.append(O)
O = Point(x+1,y,is_visible=False)
LC2.append(O)
p3=Polygon(LC1+LC2,color=col2)
p3.opacity=1
p3.line_thickness=0
O=Point(x,y,is_visible=False)
LP1.append(O)
p1=Polygon(LP1,color=col1)
p1.opacity=1
p1.line_thickness=0
O=Point(x+1,y+1,is_visible=False)
LP2.append(O)
p2=Polygon(LP2,color=col1)
p2.opacity=1
p2.line_thickness=0
def tuile2(x,y,n,col1,col2):
LP1=[]
for k in range(n+1):
O = Point(x+1,y,is_visible=False)
A = Point(x+1,y+0.5,is_visible=False)
P = Rotate(A,k/n*3.14/2,O)
P.is_visible=False
LP1.append(P)
LP2=[]
for k in range(n+1):
O = Point(x,y+1,is_visible=False)
A = Point(x,y+0.5,is_visible=False)
P = Rotate(A,k/n*3.14/2,O)
P.is_visible=False
LP2.append(P)
LC1 = LP1
LC2 = LP2
O = Point(x,y,is_visible=False)
LC1.append(O)
O = Point(x+1,y+1,is_visible=False)
LC2.append(O)
p3=Polygon(LC1+LC2,color=col2)
p3.opacity=1
p3.line_thickness=0
O=Point(x+1,y,is_visible=False)
LP1.append(O)
p1=Polygon(LP1,color=col1)
p1.opacity=1
p1.line_thickness=0
O=Point(x,y+1,is_visible=False)
LP2.append(O)
p2=Polygon(LP2,color=col1)
p2.opacity=1
p2.line_thickness=0
def dessin(dim,n,col1,col2):
for y in range(dim):
for x in range(dim):
if (x+y)%2==0:
a = randint(0,1)
if a==0:
tuile1(x,y,n,col1,col2)
else:
tuile2(x,y,n,col2,col1)
else:
a = randint(0,1)
if a==0:
tuile1(x,y,n,col2,col1)
else:
tuile2(x,y,n,col1,col2)
time.sleep(0.001)
# Exécution: Attention pour n>10, dim >=8. La génération du pavage demande beaucoup de temps.
dim = 4 # dimension du pavage. dim*dim
n = 10
couleur1=[1,0,0]
couleur2=[0,1,1]
dessin(dim,n,couleur1,couleur2)