📐 Suite de cercle (3)⚓︎
Construire la figure suivante :
On pourra compléter le code suivant
🐍 Script Python
import drawSvg as draw
figure = draw.Drawing(500, 350)
def motif(x, y, r, dx, dy, k, e, n):
"""Dessine un motif, avec un premier cercle (x, y, r)
puis d'autres dans les 4 directions
sauf sens d'origine indiqué par (dx, dy)
L'épaisseur du trait est réduit avec ×0.65 au niveau suivant
Le rayon des cercles est réduit avec ×k au niveau suivant
"""
if n > 0:
figure.append(draw.Circle(x, y, r,
fill='none', stroke_width=e, stroke='red'))
decalage = r + k*r
r_ = r * k
e_ = e * 0.65
for dx_, dy_ in [(1, 0), (0, 1), (-1, 0), (0, -1)]:
if (dx_, dy_) != ...: # ← compléter ici
x_ = x + decalage * dx_
y_ = y + decalage * dy_
motif(...) # ← compléter ici
r = 100
x, y = 250, r + 10 # un peu de marge
k = 0.4 # facteur de réduction des cercles
n = 8 # profondeur de récursion
dx, dy = 0, -1 # au début, on vient du Sud
e = 3 # épaisseur du premier trait
motif(x, y, r, dx, dy, k, e, n)
figure
Réponse
🐍 Script Python
import drawSvg as draw
figure = draw.Drawing(500, 350)
def motif(x, y, r, dx, dy, k, e, n):
"""Dessine un motif, avec un premier cercle (x, y, r)
puis d'autres dans les 4 directions
sauf sens d'origine indiqué par (dx, dy)
L'épaisseur du trait est réduit avec ×0.65 au niveau suivant
Le rayon des cercles est réduit avec ×k au niveau suivant
"""
if n > 0:
figure.append(draw.Circle(x, y, r,
fill='none', stroke_width=e, stroke='red'))
decalage = r + k*r
r_ = r * k
e_ = e * 0.65
for dx_, dy_ in [(1, 0), (0, 1), (-1, 0), (0, -1)]:
if (dx_, dy_) != (dx, dy):
x_ = x + decalage * dx_
y_ = y + decalage * dy_
motif(x_, y_, r_, -dx_, -dy_, k, e_, n - 1)
r = 100
x, y = 250, r + 10 # un peu de marge
k = 0.4 # facteur de réduction des cercles
n = 8 # profondeur de récursion
dx, dy = 0, -1 # au début, on vient du Sud
e = 3 # épaisseur du premier trait
motif(x, y, r, dx, dy, k, e, n)
figure