微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在pygame中显示由点组成的圆圈?

如何解决如何在pygame中显示由点组成的圆圈?

我有一个像这样的像素对象:

class Pixel:
    def __init__(self,screen,color,pos,size=8):
        self.screen = screen
        self.color = color
        self.pos = pos
        self.size = size

    def update(self):
        pygame.draw.circle(self.screen,self.color,self.pos,self.size)

我想创建一个输出,看起来像一个由这些 Pixel 对象组成的圆圈。到目前为止,我已经尝试过这样的程序:

# PyMate

import pygame
from pygame.colordict import THECOLORS
from drawing import Pixel,Frame

frame = Frame((800,650))
frames = [frame]
pixels = []

x,y = 50,50
li = []

for i in range(1000):
    li.append(Pixel(frames[0],THECOLORS["orange"],(x,y)))

    if i % 500 == 0:
        x -= 0.002
        y -= 0.006
    else:
        y += 0.006
        x += 0.002

pixels.extend(li)
frames.append(frame)

running = True
while running:
    frame = Frame((800,650))
    frames.append(frame)

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    for i in frames:
        i.fill(THECOLORS["white"])

    for i in pixels:
        i.update()

    del frame,frames[0]

    pygame.display.update()

这种作品,但它画了一条直线(不是我想要的)。我真正关注的部分是:

for i in range(1000):
    li.append(Pixel(frames[0],y)))

    if i % 500 == 0:
        x -= 0.002
        y -= 0.006
    else:
        y += 0.006
        x += 0.002

x 和 y 的变化似乎不对,模数也似乎不对。它们可能是什么数字?

解决方法

一种方法是使用长度不变但角度变化的向量向前推进:

x,y = 300,200
step = 20
angle = 0
for i in range(36):
    x -= math.sin(angle*math.pi/180) * step
    y += math.cos(angle*math.pi/180) * step 
    angle += 10
    pixels.append(Pixel(screen,"orange",(x,y)))

最小示例:

import pygame
import math

class Pixel:
    def __init__(self,screen,color,pos,size=8):
        self.screen = screen
        self.color = color
        self.pos = pos
        self.size = size
    def update(self):
        pygame.draw.circle(self.screen,self.color,self.pos,self.size)

screen = pygame.display.set_mode((800,650))

pixels = []
x,y)))

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    screen.fill(0)
    for p in pixels:
        p.update()
    pygame.display.update()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。