1 pièce(s) jointe(s)
Problème de condition : respectée alors qu'elle ne le devrait pas.
Bonjour à tous, et merci d'avance à ceux qui s'attarderons sur mon problème.
Je vais tenter d'être clair et concis... :aie:
Lors de ma licence je suis un cours intitulé Informatique graphique. Durant ce cours nous utilisons python 2.7 et le module Pygame. Le prof nous à fournis un fichier source que nous complétons au fur et à mesure des TP's. Dernièrement nous devions compléter une fonction de "découpage" de segment. Si les points d'un segment dépasse de la fenêtre image (délimitée par un rectangle rouge lors de l'affichage) alors la fonction coupe le segment afin que celui ci ne sorte plus de la fenêtre.
Là où ça fait mal : c'est que l'une de mes conditions (qui doit vérifier si touts les points ne sont pas déjà dans la fenêtre est donc sortir de la boucle de découpage) est respectée alors qu'elle ne le devrait pas...
La condition coupable se situe ligne 41.
Ce sont les variables définissant les positions relatives des points (gauche, droite, ect) qui donne l'état de la condition.
Code:
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 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
| ################################################################################
# Découpage d'un segment réel
################################################################################
def DecoupeSegmentReel(pr1, pr2, fr):
npr1 = PointReel(pr1.x, pr1.y)
npr2 = PointReel(pr2.x, pr2.y)
#Positions relatives pr1
gauche1 = npr1.x < fr.bg.x
droite1 = npr1.x > fr.hd.x
bas1 = npr1.y < fr.bg.y
haut1 = npr1.y > fr.hd.y
#positions relatives pr2
gauche2 = npr2.x < fr.bg.x
droite2 = npr2.x > fr.hd.x
bas2 = npr2.y < fr.bg.y
haut2 = npr2.y > fr.hd.y
tdedans = False #Devient True si toutes les positions sont à l'intérieur de cadre
tdehors = False #Devient True si les segments sont entièrement hors du cadre
dx = npr2.x - npr1.x
dy = npr2.y - npr1.x
while tdedans == False & tdehors == False :
#Si tout est en dehors de la fenêtre (le segment et ses points, donc on ne trace rien)
if ((gauche1 & gauche2) or (droite1 & droite2) or (bas1 & bas2) or (haut1 & haut2)) :
npr1.x = fr.bg.x - 1
npr1.y = fr.bg.y - 1
tdehors = True
print "tdehors = ", tdehors, "\n"
#Si tout les points sont à l'intérieur de la fenêtre (donc on ne découpe pas/plus et on trace) ET C'EST LA QUE CA MERDE
if (gauche1 == False & droite1 == False & bas1 == False & haut1 == False) & (gauche2 == False & haut2 == False & droite2 == False & bas2 == False) :
tdedans = True
elif gauche1 :
npr1.y = (fr.bg.x - npr1.x)*((dy/dx) - npr1.y)
npr1.x = (fr.bg.x)
gauche1 = False
elif droite1 :
npr1.y = (fr.hd.x - npr1.x)*((dy/dx) - npr1.y)
npr1.x = fr.hd.x
droite1 = False
elif haut1 :
npr1.y = fr.hd.y
npr1.x = (fr.hd.y - pr1.y)*((dy/dx) - npr1.x)
haut1 = False
elif bas1 :
npr1.y = fr.bg.y
npr1.x = (fr.bg.y - npr1.y)*((dy/dx) - npr1.x)
bas1 = False
elif gauche2 :
npr2.y = (fr.bg.x - npr2.x)*((dy/dx) - npr2.y)
npr2.x = (fr.bg.x)
gauche2 = False
elif droite2 :
npr2.y = (fr.hd.x - npr2.x)*((dy/dx) - npr2.y)
npr2.x = fr.hd.x
droite2 = False
elif haut2 :
npr2.y = fr.hd.y
npr2.x = (fr.hd.y - npr2.y)*((dy/dx) - npr2.x)
haut2 = False
elif bas2 :
npr2.y = fr.bg.y
npr2.x = (fr.bg.y - npr2.y)*((dy/dx) - npr2.x)
bas2 = False
return (npr1, npr2) |
Je vous affiche aussi le fichier dans lequel j'avais fais afficher les variables durant l'exécution :
(Notons que la boucle se répète trois fois, puisqu'il s'agit d'afficher un triangle).
Code:
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 42 43 44
|
gauche1 = False
droite1 = False
bas1 = False
haut1 = False
gauche2 = False
droite2 = True
bas2 = False
haut2 = False
tdedans avant boucle = False
tdehors avant boucle = False
tdedans = True
gauche1 = False
droite1 = True
bas1 = False
haut1 = False
gauche2 = False
droite2 = False
bas2 = False
haut2 = True
tdedans avant boucle = False
tdehors avant boucle = False
tdedans = True
gauche1 = False
droite1 = False
bas1 = False
haut1 = False
gauche2 = False
droite2 = False
bas2 = False
haut2 = True
tdedans avant boucle = False
tdehors avant boucle = False
tdedans = True
Programme terminé. |
Ma question est donc : Pourquoi la condition est respectée alors que l'on voit clairement dans le fichier de débuggage que toutes les variables ne sont pas sur False ?!
Je vous demanderez de ne pas vous souciez de ce qui se situe après la condition. Je sais parfaitement que c'est incorrecte, mais pour cette partie je n'ai pas encore épuisé mes ressources :)
Je pense que d'autres précisions seraient nécessaires, mais j'ai peur d'alourdir le problème. Donc je préfère attendre de répondre à vos éventuelle question.
Pour ceux que ça intéresse (éventuellement) je met le fichier entier à disposition. Il aurait été trop lourd à afficher entièrement.
Pièce jointe 168897
Encore une fois :merci: d'avance !