pygame实现旋转的摩天轮

pygame实现旋转的摩天轮

董世浩编辑:

QQ:2801081173

说明:在pycharm平台实现的图像旋转

一、案例描述

通过确定圆心,在一个以坐标原点为圆心的假想圆的圆周上绘制一定数量的点,并在这些点和圆心之间做直线,同时为每条直线圆心处的点和圆周上的点设定一种颜色,使得颜色渐变,最终让其旋转起来。

知识点:

窗口的绘制,等分点的寻找

二、实现步骤

​ 1、首先使用pygame创建一个窗口,以便显示图像

​ 2、通过循环找出半径为300,圆心位置在(500,500)上的30个等分点

​ 3、构建draw()函数,进行圆心位置与等分点的连线

​ 4、设置时钟信号与清屏功能,产生旋转效果

三、实现算法

首先,使用DDA算法画直线

    DDA算法
    '''
    if k > -1 and k < 1:
        # X 最大位移
        while True:
            if x > x1:
                break
            add_pixel(x, y, bx, 1)
            x = x+1
            y = y+k
    elif k >= 1:
        # Y 最大位移
        while True:
            if y > y1:
                break
            add_pixel(x, y, bx, 1)
            y = y+1
            x = x+1/k
    else:
        while True:
            if y < y1:
                break
            add_pixel(x, y, bx, 1)
            y = y-1
            x = x-1/k

再实现Bresenham算法构建直线

    if k > 1:
        while True:
            if y > y1:
                break
            add_pixel(x, y, ax, 0)
            y = y + 1
            d = d + 1 / k
            if d > 0.5:
                x = x + 1
                d = d - 1
    elif k > 0:
        while True:
            if x > x1:
                break
            add_pixel(x, y, ax, 0)
            x = x + 1
            d = d + k
            if d > 0.5:
                y = y + 1
                d = d - 1
    elif k > -1:
        while True:
            if x > x1:
                break
            add_pixel(x, y, ax, 0)
            x = x + 1
            d = d - k
            if d > 0.5:
                y = y - 1
                d = d - 1
    else:
        while True:
            if y < y1:
                break
            add_pixel(x, y, ax, 0)
            y = y - 1
            d = d - 1 / k
            if d > 0.5:
                x = x + 1
                d = d - 1

实现旋转的摩天轮的完整代码:

import pygame, os
import numpy as np

pi = 3.1415
FPS = 100

thare = 0

fpsClock = pygame.time.Clock()
# 初始化pygame
pygame.init()
R = 300 # 半径
number_point = 30 # 等分点数量

temp = np.linspace(0, 2 * np.pi, 1000)
X = np.sin(temp) * R
Y = np.cos(temp) * R


# 设置窗口的大小,单位为像素
screen = pygame.display.set_mode((1000, 1000))
pygame.display.set_caption('xuanzhaun')
# 定义颜色
BLACK = ( 0, 0, 0)
WHITE = (255, 255, 255)
RED = (255, 0, 0)
GREEN = ( 0, 255, 0)
BLUE = ( 0, 0, 255)
# 设置背景颜色
screen.fill(WHITE)

# 绘制一条线
def draw():
    for i in range(30):
        m = int(x[i] + 500)
        n = int(y[i] + 500)

        pygame.draw.line(screen, GREEN, [500, 500], [m,n], 3)
        pygame.draw.circle(screen, BLUE, [m,n], 10, 0)
        #pygame.display.update()
        # 设置pygame时钟的间隔时间
        fpsClock.tick(FPS)

while(thare<100000):
    x = []
    y = []
    for i in range(number_point):
        x.append(R * np.sin(i * 2 * pi / number_point + thare))
        y.append(R * np.cos(i * 2 * pi / number_point + thare))
    thare = thare+1
    pygame.draw.circle(screen, GREEN, [500, 500], 300, 1)
    draw()

    pygame.display.update()
    screen.fill(WHITE)

四、实现效果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4N40Sutf-1603118083564)(file:///C:\Users\dsh\AppData\Roaming\Tencent\Users\2801081173\QQ\WinTemp\RichOle\2O4NR87HYLS}~X`UY7EUD%M.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cuvnDkFG-1603118083567)(C:\Users\dsh\Desktop\发发发.gif)]

五、总结

pygame.display.update()
screen.fill(WHITE)

### 四、实现效果



[外链图片转存中...(img-4N40Sutf-1603118083564)]

[外链图片转存中...(img-cuvnDkFG-1603118083567)]

### 五、总结

​	在老师发了本次作业后,我最开始看了关于MFC实现的相关程序,仔细阅读完程序后,就决定用Python来实现这么一个动画过程。在实现的过程中,也是遇到了许多的小问题,比如设置好增加角度循环,再重绘显示后,在背景框上并没有动画的显示。在翻阅资料后才知道,必须在绘制过程中加一个时钟延时过程,才可以看见动画效果。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值