【问题标题】:Drawing a parabola with Pygame用 Pygame 绘制抛物线
【发布时间】:2012-07-29 09:30:20
【问题描述】:

我想在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()

【问题讨论】:

    标签: python math graphics pygame


    【解决方案1】:
    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()
    

    【讨论】:

      【解决方案2】:

      您需要将抛物线绘制为一系列线段。您使用多少段将决定它看起来有多平滑,因此如果您正在计算抛物线 x = y^2 + 30y + 450,您将计算多个 y 值的 x 值并从 (x0 ,y0) 到 (x1,y1) 等等。

      如果您没有画线原语,则需要使用类似Bresenham's Algorithm 的东西来实现一个。

      【讨论】:

        猜你喜欢
        • 2017-03-06
        • 2022-11-13
        • 2015-09-29
        • 1970-01-01
        • 2015-08-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-17
        相关资源
        最近更新 更多