2012-07-29 4 views
1

Je veux dessiner une parabole en pygame. J'ai fait un objet pixelarray et je l'ai parcouru en boucle pour déterminer si un pixel est sur la parabole ou non. Je semble obtenir une image qui a des lacunes entre les points. Comment en faire une ligne continue unique?Dessiner une parabole avec Pygame

import pygame 
import sys 
from pygame.locals import * 
import math 

WIDTH = 640 
HEIGHT = 480 

pygame.init() 
screen = pygame.display.set_mode((WIDTH, HEIGHT), 0, 32) 

pxarray = pygame.PixelArray(screen) 

while True: 
    for event in pygame.event.get(): 
     if event.type == QUIT: 
      pygame.quit() 
      sys.exit() 

    screen.fill((0,0,0)) 

    for y, py in enumerate(pxarray): 
     for x, px in enumerate(py): 
      if int(x) == (int(y)*int(y)) - 30*int(y) + 450: 
       pxarray[y][x] = 0xFFFFFF 

    pygame.display.update() 

Répondre

7
color = 255, 0, 0 
first = True 
prev_x, prev_y = 0, 0 
while True: 
    for event in pygame.event.get(): 
     if event.type == QUIT: 
      pygame.quit() 
      sys.exit() 

    screen.fill((0,0,0)) 

    for y, py in enumerate(pxarray): 
     for x, px in enumerate(py): 
      if int(x) == (int(y)*int(y)) - 30*int(y) + 450: 
       pxarray[y][x] = 0xFFFFFF 

       if first: 
        first = False 
        prev_x, prev_y = x, y 
        continue 

       pygame.draw.line(screen, color, (prev_y, prev_x), (y, x)) 
       prev_x, prev_y = x, y 

    first = True 
    pygame.display.flip() 

enter image description here

1

Vous devrez dessiner la parabole comme une série de segments de ligne. Le nombre de segments que vous utiliserez déterminera son aspect lisse, donc si vous calculez la parabole x = y^2 + 30y + 450, vous devez calculer les valeurs x pour un nombre de valeurs y et tracer des lignes à partir de (x0 , y0) à (x1, y1) et ainsi de suite.

Si vous n'avez pas de primitive de dessin au trait, vous devez en implémenter une à l'aide de Bresenham's Algorithm.

Questions connexes