Moi et mon binome réalisons un projet de fin de semestre, cependant nous rencontrons une difficulté pour réaliser une tache répondant au cahier des charges.
Nous avons réussi a tracer un triangle isocèle, a le faire avancer et reculer en fonctions des commandes entrer par l'utilisateur, mais nous ne savons pas comment faire pour le faire pivoter en fonction d'un angle donner ?
voici le code (le module upemtk est interne a notre fac, il permet a l'aide de fonctions simple de tracer une fenetre, dessiner un cercle, une ligne etc...)
from upemtk import *
from math import *
import math
import time
def tortue(x,y,tag): #Triangle a faire pivoter
ligne(x,y-2/3*sqrt(8)*taille/2,x+taille/2,y+1/3*sqrt(8)*taille/2,tag=tag)
ligne(x+taille/2,y+1/2*sqrt(7/2)*taille/2,x-taille/2,y+1/2*sqrt(7/2)*taille/2,tag=tag)
ligne(x-taille/2,y+1/3*sqrt(8)*taille/2,x,y-2/3*sqrt(8)*taille/2,tag=tag)
def deplacer_tortue(x,y,n,commande,tag): #Fonction permettant de deplacer le triangle
compteur=0
if commande=="av":
dy=-1
dx=0
elif commande=="re":
dy=1
dx=0
while compteur<n:
efface(tag)
x=x+dx
y=y+dy
tortue(x,y,tag)
compteur=compteur+1
mise_a_jour()
time.sleep(0.01)
detectbord=detection_bords(x,y,l_fenetre, h_fenetre)
if detectbord==True:
titre=texte((l_fenetre/2)-85, (h_fenetre/2)-20, "Hors-cadre", couleur='black')
mise_a_jour()
efface(tag)
time.sleep(2)
efface(titre)
n=0
mise_a_jour()
x=200
y=200
tortue(x,y,tag)
return x,y
def detection_bords(x,y,l_fenetre, h_fenetre): # Fonction de la detection des bords
if x > l_fenetre or x < 0:
return True
elif y < 0 or y > h_fenetre:
return True
else:
return False
def rotate(origin, point, angle): #Test
qx=(x+x+taille/2+x-taille/2)/3 + math.cos(angle)*(posx-((x+x+taille/2+x-taille/2)/3))-(math.sin(angle)*(posy -((y+1/3*sqrt(8)*taille/2+y-2/3*sqrt(8)*taille/2+y+1/2*sqrt(7/2)*taille/2)/3)))
qy=(y+1/3*sqrt(8)*taille/2+y-2/3*sqrt(8)*taille/2+y+1/2*sqrt(7/2)*taille/2)/3+math.sin(angle)*(posx-((x+x+taille/2+x-taille/2)/3))+math.cos(angle)*(posy-((y+1/3*sqrt(8)*taille/2+y-2/3*sqrt(8)*taille/2+y+1/2*sqrt(7/2)*taille/2)/3))
return qx,qy
tag='cr7'
l_fenetre = 400
h_fenetre = 400
cree_fenetre(l_fenetre,h_fenetre)
taille=10
n=0
y=200
x=200
tortue(200,200,tag)
posx,posy=deplacer_tortue(200,200,0,"av",tag)
origin=((posx+posx+taille/2+posx-taille/2)/3,(posy+1/3*sqrt(8)*taille/2+posy-2/3*sqrt(8)*taille/2+posy+1/2*sqrt(7/2)*taille/2)/3)
point=(posx,posy)
commande=input("Entrez une commande: ")
while commande!="fi":
if commande=="av":
n=int(input("Entre une valeur: "))
print('Tortue avance de ',n)
posx,posy=deplacer_tortue(posx,posy,n,commande,tag)
print(posx,posy)
mise_a_jour()
if commande=="re":
n=int(input("Entre une valeur: "))
print('Tortue recule de ',n)
posx,posy=deplacer_tortue(posx,posy,n,commande,tag)
print(posx,posy)
mise_a_jour()
if commande=="td":
angle=int(input("Entrez un angle: "))
print("Tortue tourne de",angle)
posx,posy=rotate(origin,point,angle)
tortue(posx,posy,tag)
print(posx,posy)
mise_a_jour()
commande=input("Entrez une commande: ")
Merci de nous donnez quelque conseils, le but est de se rapprocher de la fonction <tt class="descclassname">turtle.setheading</tt><tt class="descname" />(to_angle)<big> du module turtle qui permet de faire exactement ce que l'on veux ici</big>
Je n'ai pas lu ton code, mais pour faire faire une rotation à une figure de géométrie discrète il faut identifier son point de rotation et effectuer la translation de l'angle voulue à chaque point suivant le cercle de centre "point de rotation" et de rayon [point de rotation : point].
Edit : Après réflexion c'est bien la translation qui (me) pose un problème
- Edité par TheDeerHunter 16 décembre 2016 à 11:56:41
Finalement j'ai reussi a faire tourner la figure tout seul.
Désormais un nouveau probleme ce pose, celui de faire avancer la figure dans le sens de sa direction, en effet au par avant on ne modifiais que le y ce qui permettait de faire avancer ou reculer la figure, mais maintenant quand j'ai un angle de 60° par exemple comment faire pour modifier le dx et dy pour que la figure avance ou recule selon l'angle donné ?
Merci pour vos futurs réponses
Rotation d'une figure
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.