Bonjour à tous, et merci d'avance à ceux qui s'attarderons sur mon problème.
Je vais tenter d'être clair et concis...
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.
Je vous affiche aussi le fichier dans lequel j'avais fais afficher les variables durant l'exécution :
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
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)
(Notons que la boucle se répète trois fois, puisqu'il s'agit d'afficher un triangle).
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 ?!
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
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é.
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.
infographie.py
Encore une fois d'avance !
Partager