rudolph.py

Created by schraf

Created on December 16, 2021

977 Bytes

Renne dessiné avec des morceaux de paraboles.

La fonction coeff permet de trouver les coefficients a,b,c de la parabole passant par le sommet S(xs,ys) et le point A(x1,y1).

La fonction parab trace la parabole passant par S et A pour les abscisses entre x1 et x1 + d (d pouvant être négatif)

Il suffit donc de repérer (avec un logiciel comme Gimp) les coordonnées de S et A ainsi que la distance d, en faisant attention au fait que le centre de l’écran a pour coordonnées (0,0). Si l’image Gimp fait 320x220 pixels, il faudra effectuer les translations X - 160 et 110 - Y pour passer aux coordonnées de la tortue.

Ci-dessous le visuel expliquant d’où vient par exemple le parabole(0,-100,-45,-12,90) dans le script :

Ma chaine Youtube Schraf - Maths info


from turtle import *

hideturtle()
speed(1)

def coeff(xs,ys,x1,y1):
 d = (x1 - xs) ** 2
 a = (y1 - ys) / d
 b = - 2 * xs * a
 c = y1 - a * x1 ** 2 - b * x1 
 return [a,b,c]

def point(x,a,b,c):
 goto(x, a * x * x + b * x + c)

def parab(xs,ys,x1,y1,d):
 [a,b,c] = coeff(xs,ys,x1,y1)
 penup()
 point(x1,a,b,c)
 pendown()
 for k in range(11):
  point(x1 + d * k / 10, a, b, c)

def verticale(x,y,d):
 penup()
 goto(x,y)
 pendown()
 goto(x,y - d)

pensize(5)
color(254,187,28)
# tete
parab(0,-100,-45,-12,90)
parab(0,13,-45,-12,90)
# oreilles + yeux
for k in [-1,1]:
    parab(54 * k,21,54 * k - 26,8,52)
    parab(54 * k,-5,54 * k - 26,8,52)
    parab(20 * k,-20,20 * k - 10,-25,20)
# bouche
color(247,175,184)
parab(0,-70,-20,-80,40)
# bois
color(254,141,3)
for k in [-1,1]:
    parab(0,36,83 * k,103,-70 * k)
    parab(0,55,102 * k,82,-50 * k)
    parab(0,30,45 * k,90,-28 * k)
    verticale(13 * k,40,28)
color(255,0,0)
penup()
goto(0,-55)
pendown()
circle(4)