d'après ce que je comprends, draw.lines joint chaque coordonnée qui lui est passée, donc si nous avons [A, B, C], nous tracerons une ligne de la coordonnée A à la coordonnée B et de B à C et si fermé est True, il dessine un ligne de la coordonnée A à la coordonnée C donc il joindra toujours la première coordonnée avec la dernière sa droite?
ce que je ne comprends pas, c'est ce que renvoie la variable rect. Je pense que chaque fois que j'ajoute une nouvelle coordonnée, elle renvoie (point_début, taille_rectangle) où le point de départ est la première coordonnée et la taille du rectangle est calculée par la distance de la première Coordonnez avec le dernier puis dessinez le rectangle avec draw.rect mais le raisonnement que je ne pense pas est juste car si j'ajoute une coordonnée de ce type à la liste le rectangle reste inchangé
CODE:
"""Place a polygone line with the clicks of the mouse.""" import pygame from pygame.locals import * RED = (255, 0, 0) GREEN = (0, 255, 0) GRAY = (150, 150, 150) pygame.init() screen = pygame.display.set_mode((640, 240)) drawing = False points = [] running = True while running: for event in pygame.event.get(): if event.type == MOUSEBUTTONDOWN: points.append(event.pos) drawing = True elif event.type == MOUSEBUTTONUP: drawing = False elif event.type == MOUSEMOTION and drawing: points[-1] = event.pos screen.fill(GRAY) if len(points)>1: rect = pygame.draw.lines(screen, RED, True, points, 3) pygame.draw.rect(screen, GREEN, rect, 1) pygame.display.update() pygame.quit()
3 Réponses :
Selon la documentation :
Retour:
un rect délimitant les pixels modifiés, si rien n'est dessiné, la position du rect englobant sera la position du premier point dans le paramètre points (les valeurs flottantes seront tronquées) et sa largeur et sa hauteur seront de 0
pygame.draw.lines()
renvoie un objet pygame.Rect
qui pygame.Rect
tous les points de la ligne:
un rect délimitant les pixels modifiés, si rien n'est dessiné, la position du rect englobant sera la position du premier point dans le paramètre points (les valeurs flottantes seront tronquées) et sa largeur et sa hauteur seront de 0
Le rectangle ne commence à aucun point particulier de la ligne, mais est juste assez grand pour englober tous les points le long de la ligne.
Il renvoie le même que:
list_x, list_y = zip(*points) min_x, max_x = min(list_x), max(list_x) min_y, max_y = min(list_y), max(list_y) rect = pygame.Rect(min_x, min_y, max_x-min_x, max_y-min_y)
Au départ, je ne comprenais pas ce que vous vouliez dire alors j'ai essayé de comprendre par moi-même la raison pour laquelle le rectangle reste inchangé et les calculs qu'il effectue et j'ai réalisé que ce que vous avez écrit était la réponse que je cherchais merci beaucoup pour l'aide!
@ User9dazzi91 Désolé, mais qu'est-ce qui n'est pas clair au sujet de ma réponse? Qu'est-ce qui a causé la confusion?
Je ne connaissais pas les fonctions que vous utilisiez et donc je ne pouvais pas comprendre le calcul que vous aviez fait en fait comme vous pouvez le voir dans le code que j'ai publié dans les commentaires Je n'utilise pas ces fonctions de toute façon merci beaucoup pour l'aide que vous avez confirmé que le le raisonnement était correct avec seulement quatre lignes de code
voici le raisonnement que j'ai fait:
import pygame def minore(lista_coordinate, asse): dimensione = lista_coordinate[0][asse] for coordinata in lista_coordinate: if coordinata[asse] < dimensione: dimensione = coordinata[asse] return dimensione def maggiore(lista_coordinate, asse): dimensione = lista_coordinate[0][asse] for coordinata in lista_coordinate: if coordinata[asse] > dimensione: dimensione = coordinata[asse] return dimensione pygame.init() schermo = pygame.display.set_mode((500, 400)) punti = [(100, 100), (200, 100), (200, 50), (150, 80)] larghezza_minore = minore(punti, 0) larghezza_maggiore = maggiore(punti, 0) larghezza_rettangolo = larghezza_maggiore - larghezza_minore altezza_minore = minore(punti, 1) altezza_maggiore = maggiore(punti, 1) altezza_rettangolo = altezza_maggiore - altezza_minore dimensioni_rettangolo = (larghezza_rettangolo, altezza_rettangolo) inizio = (larghezza_minore, altezza_minore) pygame.draw.lines(schermo, (255, 0, 0), True, punti, 3) pygame.draw.rect(schermo, (0, 255, 0), (inizio, dimensioni_rettangolo), 1) pygame.display.update()
La documentation ne dit-elle pas ce que le draw.lines renvoie?