Python實現萬花筒效果:創造炫目的動態圖案

文章目錄

    • 引言
    • 準備工作
      • 前置條件
    • 代碼實現與解析
      • 導入必要的庫
      • 初始化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() // 2angle_step = 2 * math.pi / num_segmentscolors = [(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_stepx = 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 = 300running = True
while running:for event in pygame.event.get():if event.type == pygame.QUIT:running = Falsescreen.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() // 2angle_step = 2 * math.pi / num_segmentscolors = [(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_stepx = 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 = 300running = True
while running:for event in pygame.event.get():if event.type == pygame.QUIT:running = Falsescreen.fill((0, 0, 0))draw_kaleidoscope(screen, num_segments, radius)pygame.display.flip()clock.tick(30)pygame.quit()

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/38262.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/38262.shtml
英文地址,請注明出處:http://en.pswp.cn/web/38262.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

大數據可視化實驗(八):大數據可視化綜合實訓

目錄 一、實驗目的... 1 二、實驗環境... 1 三、實驗內容... 1 1)Python縱向柱狀圖實訓... 1 2)Python水平柱狀圖實訓... 3 3)Python多數據并列柱狀圖實訓.. 3 4)Python折線圖實訓... 4 5)Python直方圖實訓...…

PAT 1108 Finding Average

原題鏈接:PAT 1108 Finding Average The basic task is simple: given N real numbers, you are supposed to calculate their average. But what makes it complicated is that some of the input numbers might not be legal. A legal input is a real number in…

Python只讀取Excel文件的一部分數據,比如特定范圍的行和列?

如何只讀取Excel文件的一部分數據,比如特定范圍的行和列? 在Python中,如果你只想讀取Excel文件的特定范圍,可以使用以下方法: pandas: Pandas是一個強大的數據處理庫,它有一個內置函數read_excel()用于讀…

在不修改.gitignore的情況下,忽略個人文件的提交

Git提供了一個assume-unchanged命令&#xff0c;可以將文件標記為“假設未更改”。這意味著Git將忽略該文件的更改&#xff0c;不會將其提交到倉庫中。要使用該命令&#xff0c;只需運行以下命令&#xff1a; git update-index --assume-unchanged <file>其中&#xff0…

邊緣網關帶來的效益探討-天拓四方

邊緣網關作為連接物理世界與數字世界的橋梁&#xff0c;在智能制造、智慧城市等各個領域中發揮著關鍵作用。通過收集、處理來自各種傳感器和設備的數據&#xff0c;邊緣網關為實時決策、優化生產流程以及提高運營效率提供了強有力的支持。下面我們將探討邊緣網關帶來的效益。 …

鏈路全貫通,價值引領數據能力升級|愛分析報告

數據能力已經成為企業的核心競爭力。政策驅動數據產業發展加速&#xff0c;如2023年國家數據局成立&#xff1b;2024年&#xff0c;《“數據要素”三年行動計劃&#xff08;2024-2026年&#xff09;》正式發布&#xff1b;并且 2024年起正式將數據資源視為資產納入財務報表&…

C++——list類用法指南

一、list的介紹 1、list是可以在常數范圍內在任意位置進行插入和刪除的序列式容器&#xff0c;并且該容器可以前后雙向迭代 2、list的底層是雙向鏈表結構&#xff0c;雙向鏈表中每個元素存儲在互不相關的獨立節點中&#xff0c;在節點中通過指針指向其前一個元素和后一個元素 …

yum安裝并初始化PG

獲取yum源 從官網獲取yum源&#xff0c;并安裝rpm包 sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm安裝 yum install -y postgresql14-server啟動并初始化 sudo /usr/pgsql-14/bin/postgre…

機器學習-EM算法

目錄 一:最大似然估計 二:EM算法 加入隱變量 EM算法推導 1.Jensen不等式 點個贊唄!!! 一:最大似然估計 舉個栗子:一個袋子里有很多個球,每次放回的取一個球,取了十次,其中有六次白球,4次黑球。那么就認為袋子里面取到白球的概率為6/10,黑球的概率為4/10。…

pytorch-01

加載mnist數據集 one-hot編碼實現 import numpy as np import torch x_train np.load("../dataset/mnist/x_train.npy") # 從網站提前下載數據集&#xff0c;并解壓縮 y_train_label np.load("../dataset/mnist/y_train_label.npy") x torch.tensor(y…

Vue 全局狀態管理新寵:Pinia實戰指南

文章目錄 前言全局狀態管理基本步驟&#xff1a;pinia 前言 隨著Vue.js項目的日益復雜&#xff0c;高效的狀態管理變得至關重要。Pinia作為Vue.js官方推薦的新一代狀態管理庫&#xff0c;以其簡潔的API和強大的功能脫穎而出。本文將帶您快速上手Pinia&#xff0c;從安裝到應用&…

uniapp如何根據不同角色自定義不同的tabbar

思路&#xff1a; 1.第一種是根據登錄時獲取的不同角色信息&#xff0c;來進行 跳轉到不同的頁面&#xff0c;在這些頁面中使用自定義tabbar 2.第二種思路是封裝一個自定義tabbar組件&#xff0c;然后在所有要展示tabbar的頁面中引入使用 1.根據手機號碼一鍵登錄&#xff0c…

SpringMVC的基本使用

SpringMVC簡介 SpringMVC是Spring提供的一套建立在Servlet基礎上&#xff0c;基于MVC模式的web解決方案 SpringMVC核心組件 DispatcherServlet&#xff1a;前置控制器&#xff0c;來自客戶端的所有請求都經由DispatcherServlet進行處理和分發Handler&#xff1a;處理器&…

三個方法教大家學會RAR文件轉換為ZIP格式

在日常工作當中&#xff0c;RAR和ZIP是兩種常見的壓縮文件格式。有時候&#xff0c;大家可能會遇到將RAR文件轉換為ZIP格式的情況&#xff0c;這通常是為了方便在特定情況下打開或使用文件。下面給大家分享幾個RAR文件轉換為ZIP格式的方法&#xff0c;下面隨小編一起來看看吧~ …

在mfc程序中,如何用c++找到exe文件所在的路徑

在 MFC&#xff08;Microsoft Foundation Class&#xff09;程序中&#xff0c;你可以使用 GetModuleFileName 函數來獲取當前運行的可執行文件&#xff08;.exe&#xff09;的路徑。 以下是一個示例代碼&#xff1a; #include <afxwin.h> #include <iostream>in…

KVM性能優化之CPU優化

1、查看kvm虛擬機vCPU的QEMU線程 ps -eLo ruser,pid,ppid,lwp,psr,args |awk /^qemu/{print $1,$2,$3,$4,$5,$6,$8} 注:vcpu是不同的線程&#xff0c;而不同的線程是跑在不同的cpu上&#xff0c;一般情況&#xff0c;虛擬機在運行時自身會點用3個cpus&#xff0c;為保證生產環…

通過MATLAB控制TI毫米波雷達的工作狀態

前言 前一章博主介紹了MATLAB上位機軟件“設計視圖”的制作流程,這一章節博主將介紹如何基于這些組件結合MATLAB代碼來發送CFG指令控制毫米波雷達的工作狀態 串口配置 首先,在我們選擇的端口號輸入框和端口波特率設置框內是可以手動填入數值(字符)的,也可以在點擊運行后…

匯凱金業:投資交易如何才能不虧損

投資交易中永不虧損是一個理想化的目標&#xff0c;現實中無法完全避免虧損。然而&#xff0c;通過科學的方法、合理的策略和嚴格的風險管理&#xff0c;投資者可以大幅減少虧損&#xff0c;并提高長期盈利的概率。以下是一些關鍵策略和方法&#xff0c;幫助投資者在交易中盡量…

【CSRF】

CSRF 原理&#xff1a;誘導用戶在訪問第三方site時&#xff0c;訪問攻擊者構造的site,攻擊者site會對原site進行惡意操作。 burp模擬攻擊&#xff1a; 對一個博客系統點擊發布文章時&#xff0c;Burp Suite抓包&#xff0c;右鍵CSRF PoC功能 -> Engagament tools -> Gen…

洛谷 P3954 [NOIP2017 普及組] 成績

本文由Jzwalliser原創&#xff0c;發布在CSDN平臺上&#xff0c;遵循CC 4.0 BY-SA協議。 因此&#xff0c;若需轉載/引用本文&#xff0c;請注明作者并附原文鏈接&#xff0c;且禁止刪除/修改本段文字。 違者必究&#xff0c;謝謝配合。 個人主頁&#xff1a;blog.csdn.net/jzw…