0
votes

que retourne draw.lines?

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?

entrez la description de l'image ici

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é

entrez la description de l'image ici

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()


1 commentaires

La documentation ne dit-elle pas ce que le draw.lines renvoie?


3 Réponses :


0
votes

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


0 commentaires

1
votes

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)


3 commentaires

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



0
votes

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()


0 commentaires