bonjour,
je n'ai pas trouvé sur le net de tuto pour positionner un ovale par son centre sur turtle,
donc je me suis résolu à créer (bien modestement) une petite fonction qui le fait en faisant appel à mes bases de trigonométrie.
Si ca peut dépanner des débutants je vous en fait profiter et je le partage ci dessous, c'est très pratique pour dessiner par exemple des visages (on positionne les 2 yeux à leur place facilement par leur centre).
ca fonctionne pour des ovales courantes, c'est à dire :
- à 2 rayons (n'importe lesquels)
- verticales, horizontales ou à 45 degrés montant ou descendant
- raccord entre les 2 rayons sur un angle de 45°
ce n'est donc pas universel, mais ca dépanne bien et c'est super facile d'emploi
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
 
from turtle import *
def draw_oval(x,y,long_radius,short_radius,tilt):
    #tilt 90=> portrait départ Sud-Est
    #tilt 0 => paysage départ Sud-Ouest
    #tilt 45=> montante départ Sud
    #tilt 135=> descendante départ Est
    up()
    #si vertical
    if tilt==90: #tilt 90=> portrait départ Sud-Est
        depart_x = (long_radius-short_radius)/1.4142
        depart_y = (long_radius-short_radius)/1.4142*2
    elif tilt==0:#tilt 0 => paysage départ Sud-Ouest
        depart_x = -((long_radius-short_radius)/1.4142+short_radius/1.4142)
        depart_y = short_radius/1.4142
    elif tilt==45: #tilt 45=> montante départ Sud   
        depart_x = -((long_radius-short_radius)/2)
        depart_y = (long_radius-((long_radius-short_radius)/2))
    elif tilt==135:#tilt 135=> descendante départ Est
        depart_x = (long_radius-((long_radius-short_radius)/2))
        depart_y = ((long_radius-short_radius)/2)
    else:
        depart_x=0 # juste pour eviter une erreur si angle différent
        depart_y=0 # de ceux prévus(0,45,90,135)
    goto(depart_x,-depart_y)
    down()
    seth(-45+tilt)
    color('red')
    circle(long_radius,90)
    color('blue')
    circle(short_radius,90)
    color('yellow')
    circle(long_radius,90)
    color('green')
    circle(short_radius,90)
 
draw_oval(0,0,100,50,90)#portrait
draw_oval(0,0,100,30,0)#paysage
draw_oval(0,0,60,30,45) #montante
draw_oval(0,0,60,30,135) #descendante
#draw_oval(0,0,100,50,22)#angle non prévu => fera demarrer le tracé au centre de la fenetre
c'est ma première contribution, j'espère que ce sera utile à quelqu'un ;o))
Amicalement
Lucky