1

pygameで放物線を描きたいです。私は pixelarray オブジェクトを作成し、それをループして、ピクセルが放物線上にあるかどうかを判断しました。ポイント間にギャップがあるイメージが得られるようです。単一の連続した行にするにはどうすればよいですか?

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

2 に答える 2

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

ここに画像の説明を入力してください

于 2012-07-29T10:08:20.970 に答える
1

一連の線分として放物線を描く必要があります。どれだけ滑らかに見えるかは、使用するセグメントの数によって決まるため、放物線 x = y^2 + 30y + 450 を計算する場合は、いくつかの y 値に対して x 値を計算し、(x0 ,y0) から (x1,y1) など。

線描画プリミティブがない場合は、ブレゼンハムのアルゴリズムなどを使用して実装する必要があります。

于 2012-07-29T09:54:49.500 に答える