Python实现万花筒效果:创造炫目的动态图案

news2024/10/6 6:00:06

文章目录

    • 引言
    • 准备工作
      • 前置条件
    • 代码实现与解析
      • 导入必要的库
      • 初始化Pygame
      • 定义绘制万花筒图案的函数
      • 主循环
    • 完整代码

在这里插入图片描述

引言

万花筒效果通过反射和旋转图案创造出美丽的对称图案。在这篇博客中,我们将使用Python来实现一个动态的万花筒效果。通过利用Pygame库,我们可以生成并展示出炫目的动态图案。

准备工作

前置条件

在开始之前,你需要确保你的系统已经安装了Pygame库。如果你还没有安装它,可以使用以下命令进行安装:

pip install pygame

Pygame是一个跨平台的Python模块,用于编写视频游戏。它包括计算机图形和声音库,使得游戏开发更加简单。

代码实现与解析

导入必要的库

我们首先需要导入Pygame库和其他必要的模块:

import pygame
import math
import random

初始化Pygame

我们需要初始化Pygame并设置屏幕的基本参数:

pygame.init()
screen = pygame.display.set_mode((800, 800))
pygame.display.set_caption("万花筒效果")
clock = pygame.time.Clock()

定义绘制万花筒图案的函数

我们定义一个函数来绘制动态的万花筒图案:

def draw_kaleidoscope(screen, num_segments, radius):
    center_x, center_y = screen.get_width() // 2, screen.get_height() // 2
    angle_step = 2 * math.pi / num_segments
    colors = [(random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)) for _ in range(num_segments)]
    
    for i in range(num_segments):
        angle = i * angle_step
        x = center_x + int(radius * math.cos(angle))
        y = center_y + int(radius * math.sin(angle))
        pygame.draw.line(screen, colors[i], (center_x, center_y), (x, y), 2)
        
        for j in range(1, radius // 10):
            x1 = center_x + int((radius - j * 10) * math.cos(angle))
            y1 = center_y + int((radius - j * 10) * math.sin(angle))
            x2 = center_x + int((radius - j * 10) * math.cos(angle + angle_step))
            y2 = center_y + int((radius - j * 10) * math.sin(angle + angle_step))
            pygame.draw.line(screen, colors[i], (x1, y1), (x2, y2), 2)

主循环

我们在主循环中更新万花筒图案并展示:

num_segments = 12
radius = 300

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

    screen.fill((0, 0, 0))
    
    draw_kaleidoscope(screen, num_segments, radius)

    pygame.display.flip()
    clock.tick(30)

pygame.quit()

完整代码

import pygame
import math
import random

# 初始化Pygame
pygame.init()
screen = pygame.display.set_mode((800, 800))
pygame.display.set_caption("万花筒效果")
clock = pygame.time.Clock()

# 绘制万花筒图案的函数
def draw_kaleidoscope(screen, num_segments, radius):
    center_x, center_y = screen.get_width() // 2, screen.get_height() // 2
    angle_step = 2 * math.pi / num_segments
    colors = [(random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)) for _ in range(num_segments)]
    
    for i in range(num_segments):
        angle = i * angle_step
        x = center_x + int(radius * math.cos(angle))
        y = center_y + int(radius * math.sin(angle))
        pygame.draw.line(screen, colors[i], (center_x, center_y), (x, y), 2)
        
        for j in range(1, radius // 10):
            x1 = center_x + int((radius - j * 10) * math.cos(angle))
            y1 = center_y + int((radius - j * 10) * math.sin(angle))
            x2 = center_x + int((radius - j * 10) * math.cos(angle + angle_step))
            y2 = center_y + int((radius - j * 10) * math.sin(angle + angle_step))
            pygame.draw.line(screen, colors[i], (x1, y1), (x2, y2), 2)

# 主循环
num_segments = 12
radius = 300

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

    screen.fill((0, 0, 0))
    
    draw_kaleidoscope(screen, num_segments, radius)

    pygame.display.flip()
    clock.tick(30)

pygame.quit()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1886183.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

WebStorm配置路径别名(jsconfig.json)

项目是 ViteVueTs 新建一个 jsconfig.json文件 {"compilerOptions": {"baseUrl": ".","paths": {"/*": ["./src/*"]}},"exclude": ["node_modules", "dist"] }然后在 vite.confi…

LLM-Transformer:经典与前沿方法详解

LLM-Transformer:经典与前沿方法详解 前言 大规模语言模型(LLM)是当前自然语言处理(NLP)领域的核心技术,而Transformer架构作为LLM的基础,极大地推动了这一领域的发展。本文将详细介绍LLM-Tra…

网页计算器的实现

简介 该项目实现了一个功能完备、交互友好的网页计算器应用。只使用了 HTML、CSS 和 JavaScript ,用于检验web前端基础水平。 开发环境:Visual Studio Code开发工具:HTML5、CSS3、JavaScript实现效果 功能设计和模块划分 显示模块&#…

ASP.NETMVC-简单例子-数据库查询+razor使用+项目发布

环境: win10,SQL Server 2008 R2 参考: asp.net mvc框架之EF的使用 - black娃 - 博客园 https://www.cnblogs.com/fjiqiang/p/11131365.html 目录 数据库查询要求思路操作 razor使用项目发布要求实现 数据库查询 要求 从服务器的数据库中查…

独家专访|格行随身WiFi创始人——刘永先 格行随身wifi如何成为行业的领跑品牌?

随着移动互联网的普及和消费者对网络依赖性的增强,随身WiFi市场迎来了前所未有的发展机遇。然而,这一市场的迅速扩张也伴随着一系列问题,其中最为显著的就是市场乱象丛生。近日,有幸邀请到行业领跑品牌格行随身WiFi的刘总&#xf…

uboot 编译时传递参数实现条件编译

KCFLAGS make ARCHarm KCFLAGS-DENV_DEBUG CROSS_COMPILEaarch64-linux-gnu-env/sf.c env_sf_save 加入调试信息 # saveenv Saving Environment to SPI Flash... env_sf_save (1) spi_flash_erase (2) spi_flash_write is40000 Erasing SPI flash...Writing to SPI flash.…

JavaScript高级程序设计(第四版)--学习记录之对象、类和面向对象编程(中)

创建对象方式 工厂模式:用于抽象创建特定对象的过程。可以解决创建多个类似对象的问题,但没有解决对象标识问题。(即新创建的对象是什么类型) function createPerson(name, age, job) { let o new Object(); o.name name; o.age…

DSSAT作物模建模实践方法

随着数字农业和智慧农业的发展,基于过程的作物生长模型(Process-based Crop Growth Simulation Model)在模拟作物对气候变化的响应与适应、农田管理优化、作物品种和株型筛选、农业碳中和、农田固碳减排等领域扮演着越来越重要的作用。Decisi…

msvcp140_ATOMIC_WAIT.dll丢失的多种解决方法分享,实测有效

在日常使用电脑的过程中,我们可能会遇到一些错误提示,其中之一就是“msvcp140_ATOMIC_WAIT.dll丢失”。那么,msvcp140_ATOMIC_WAIT.dll丢失是怎么回事呢?本文将从msvcp140_ATOMIC_WAIT.dll丢失的原因分析、对电脑的影响以及解决方…

linux 环境报错:Peer reports incompatible or unsupported protocol version

出现问题的原因: curl 不兼容或不支持的协议版本。 解决方案: yum update -y nss curl libcurl如此继续之前的操作即可。

【瞎折腾日常】服务器的cpu飙高到1000%了怎么破

一、故障起因 起因是用户反馈系统很卡,我登录普罗米修斯一看,发现docker部署得集群下的一个java应用服务器cpu爆了,直接冲到了1000%以上了,接着就是各种接口超时报警等,赶紧打开对应的服务器查看进程情况,这会使用jstack和top命令定位哪个线程占用的cpu比较大,定位代码问…

Python+Pytest+Allure+Yaml+Pymysql+Jenkins+GitLab接口自动化测试框架详解

PythonPytestAllureYaml接口自动化测试框架详解 编撰人:CesareCheung 更新时间:2024.06.20 一、技术栈 PythonPytestAllureYamlJenkinsGitLab 版本要求:Python3.7.0,Pytest7.4.4,Allure2.18.1,PyYaml6.0 二、环境配置 安装python3.7&…

BMA530 运动传感器

型号简介 BMA530是博世(bosch-sensortec)的一款运动传感器。时尚简约的可穿戴设备为功能强大的组件提供了很小的空间。具有先进功能集的下一代加速度计是世界上最小的加速度传感器(1.2 x 0.8 x 0.55 mm)。它专为紧凑型设备而设计&…

突发!Runway的Gen-3向所有人开放,媲美Sora!

7月2日凌晨,著名生成式AI平台Runway在官网宣布,其文生视频模型Gen-3 Alpha向所有用户开放使用。 上周日Runway只向部分用户提供了Gen-3的使用权限,「AIGC开放社区」也为大家解读了10个非常有代表性的视频案例。(点击查看&#xf…

UE4_材质_使用彩色半透明阴影

学习笔记,不喜勿喷!侵权立删,祝愿大美临沂生活越来越好! 本教程将介绍如何配置虚幻引擎来投射彩色半透明阴影。 此功能在许多应用中都很有用,常见例子就是透过彩色玻璃窗的彩色光。 一、半透明阴影颜色 阴影在穿过半…

2024.7.2作业

1. 梳理笔记(原创&#xff01;&#xff01;&#xff01;) 2.解析代码&#xff1a;分析每一步变量的取值 #include <stdio.h> int main(int argc, char *argv[]) { int a 10; //a10 int b a--; //b10 int c a b 2; //a9 b10 c21 int d (b--…

Python语言接入关键词搜索商品api疑点解析

接入关键词搜索商品API通常需要以下步骤&#xff1a; 了解API文档&#xff1a;首先&#xff0c;你需要阅读API的文档&#xff0c;了解API的基本功能、请求方式&#xff08;GET、POST等&#xff09;、请求参数、返回数据格式等信息。 安装必要的库&#xff1a;根据API的要求&am…

RS232、RS485与RS422初步学习

目录 电平 传输方式 共模和差模干扰 ps&#xff1a;双绞线 485总线结构 ps&#xff1a;终端电阻 RS232接口&#xff08;DB9&#xff09; 优缺点 RS232优缺点 RS485较RS232的优点 为什么RS232还在使用&#xff1f; 电平 RS232、RS485与RS422的电平 区间逻辑备注RS232…

vue3中获取Excel和csv文件中的内容

1.效果 2.安装 npm install xlsxyarn add xlsx 3.引入使用 <el-upload ref"uploadRef" :on-change"changeFile" :show-file-list"false" class"mr10" accept".csv, .xlsx, .xls"action"#" :auto-upload&quo…

240702_昇思学习打卡-Day14-基于MindNLP+MusicGen生成自己的个性化音乐

240702_昇思学习打卡-Day14-基于MindNLPMusicGen生成自己的个性化音乐 前面一致做的都是图像的&#xff0c;可视化比较强&#xff0c;可以有比较多的图片帮助理解&#xff0c;但今天这个是关于音频的生成&#xff0c;基本只有干巴巴的代码&#xff0c;我尽量描述清楚些。相关研…