[Turtle] Comment Déterminer les points d'intersections de deux segments ?
pourkoisa
Messages postés3Date d'inscriptionmardi 27 mai 2008StatutMembreDernière intervention 9 novembre 2010
-
1 oct. 2010 à 18:43
pourkoisa
Messages postés3Date d'inscriptionmardi 27 mai 2008StatutMembreDernière intervention 9 novembre 2010
-
9 nov. 2010 à 23:36
Bonjour à tous :)
Je réalise actuellement un script avec les modules Turtle et Tkinter afin de représenter des chryzodes...
Je souhaite aller plus loin que ce que j'ai déjà, c'est à dire des chryzides tracés comme il faut. Je souhaite maintenant n'afficher QUE les points d'intersetions entre les différents segments dans le cercle...
Connaissez vous une fonction capable de faire ça, ou sauriez vous comment s'y prendre en bricolant un peu ? j'ai cherché, mais je n'ai rien trouvé...
Pour ceux qui ignorent ce qu'est un chryzode, voilà mon script :
from tkinter import *
from turtle import *
from math import *
## from pourkoisa import *
def chryz():
speed("fastest")
rayon = eval(entr3.get())
nbpoint = eval(entr1.get())
div = eval(entr2.get())
#fen1.destroy()
position(rayon)
up()
coordonee( nbpoint, 0 )
down()
i=0
while i<=2*div*nbpoint :
up()
speed("fastest")
goto(rayon*(cos((i*pi)/nbpoint)), (rayon*sin((i*pi)/nbpoint)))
down()
coloration=['red','green','blue','yellow','black','orange','pink','purple']
## defin = i%8
## color(coloration[defin])
## if i%2==0 :
## color('orange')
## else :
## color('black')
goto(rayon*cos(((i/div)*pi/nbpoint)), rayon* sin(((i/div)*pi/nbpoint)))
i=i+1
def chryzc() :
speed("fastest")
rayon = eval(entr3.get())
nbpoint = eval(entr1.get())
valeur = eval(entr2.get())
#fen1.destroy()
position(rayon)
up()
coordonee( nbpoint, 0 )
down()
i=0
while i<=2*6*nbpoint:
## *(valeur/pi):
up()
speed("fastest")
goto(rayon*(cos((i*pi)/nbpoint)), (rayon*sin((i*pi)/nbpoint)))
down()
## chr coloration=['red','green','blue','yellow','black','orange','pink','purple']
goto(rayon*cos((((i*valeur))*pi/nbpoint)), rayon* sin(((((i*valeur))*pi/nbpoint))))
## write(i)
i=i+1
def chryzs() :
speed("fastest")
rayon = eval(entr3.get())
nbpoint = eval(entr1.get())
valeur = eval(entr2.get())
#fen1.destroy()
position(rayon)
up()
coordonee( nbpoint, 0 )
down()
i=0
while i<=36*valeur*nbpoint:
## *(valeur/pi):
up()
speed("fastest")
goto(rayon*(cos((i*pi)/nbpoint)), (rayon*sin((i*pi)/nbpoint)))
down()
## chr coloration=['red','green','blue','yellow','black','orange','pink','purple']
goto(rayon*cos((((i*(valeur**(1/2))))*pi/nbpoint)), rayon* sin(((((i*(valeur**(1/2))))*pi/nbpoint))))
## write(i)
i=i+1
##def chryzp() :
##
## speed("fastest")
## rayon = eval(entr3.get())
## nbpoint = eval(entr1.get())
## div = eval(entr2.get())
## #fen1.destroy()
## position(rayon)
## up()
## coordonee( nbpoint, 0 )
##
## i=2
## speed("fastest")
## goto(rayon*(cos((pi)/nbpoint)), (rayon*sin((pi)/nbpoint)))
## down()
##
## while i<=nbpoint*div*50 :
## speed("fastest")
## if ispremier(i) == True :
##
## goto(rayon*cos(((i)*pi/nbpoint)), rayon* sin(((i)*pi/nbpoint)))
##
## i=i+1
def position (rayon) :
reset()
up()
goto(0,-rayon)
down()
circle(rayon)
up()
goto(0,0)
#A ce point,la tortue est au centre du cercle
#Il faut maintenant définir une règle pour tracer les points suivant une règle
def coordonee(nbpoint, position):
up()
goto(100*cos(position*pi/nbpoint), 100*sin(position*pi/nbpoint))
# Ceci permet d'aller n'importe ou sur le cercle
# Création du widget principal ("maître") :
fen1 = Tk()
bou1 = Button(fen1,text='Quitter',command=fen1.quit)
bou1.pack(side=BOTTOM)
bou2 = Button(fen1,text='Chryzode Division',command=chryz)
bou2.pack()
bou3 = Button(fen1,text='Chryzode Multiplication',command=chryzc)
bou3.pack()
bou4 = Button(fen1,text='Chryzode Racine',command=chryzs)
bou4.pack()
##bou4 = Button(fen1,text='/!\ BETA',command=chryzp)
##bou4.pack()
entr1 = Entry(fen1)
entr2 = Entry(fen1)
entr3 = Entry(fen1)
# création des widgets "esclaves" :
txt1 Label(fen1, text 'Nombre de points:')
txt2 Label(fen1, text 'Valeur :')
txt3 Label(fen1, text 'Rayon :')
txt1.pack()
entr1.pack()
txt2.pack()
entr2.pack()
txt3.pack()
entr3.pack()
##bou3 = Button(fen1,text='Autre couleur',command=changecolor)
##bou3.pack()
fen1.mainloop(n=0) # démarrage du réceptionnaire d'événements
fen1.destroy() # destruction (fermeture) de la fenêtre
J'ai également une petite question qui concerne l'aspect pratique :
Lorsque je ferme la fenètre de trutle, elle se réouvre tout seule et continue a exécuter le script, même si j'ai stoppé son execution en fermant le shell ! :O