python代码画动态烟花_如何用python画烟花
用python画烟花的方法:首先创建一个所有粒子同时扩大的二维列表;然后实现粒子范围扩大,以自由落体坠落;接着移除超过最高时长的粒子;最后循环调用保持不停。
用python画烟花的方法:# -*- coding: utf-8 -*-
# Nola
import tkinter as tk
from PIL import Image, ImageTk
from time import time, sleep
from random import choice, uniform, randint
from math import sin, cos, radians
# 模拟重力
GRAVITY = 0.05
# 颜色选项(随机或者按顺序)
colors = ['red', 'blue', 'yellow', 'white', 'green', 'orange', 'purple', 'seagreen', 'indigo', 'cornflowerblue']
'''
particles 类
粒子在空中随机生成随机,变成一个圈、下坠、消失
属性:
- id: 粒子的id
- x, y: 粒子的坐标
- vx, vy: 在坐标的变化速度
- total: 总数
- age: 粒子存在的时长
- color: 颜色
- cv: 画布
- lifespan: 最高存在时长
'''
class Particle:
def __init__(self, cv, idx, total, explosion_speed, x=0., y=0., vx=0., vy=0., size=2., color='red', lifespan=2,
**kwargs):
self.id = idx
self.x = x
self.y = y
self.initial_speed = explosion_speed
self.vx = vx
self.vy = vy
self.total = total
self.age = 0
self.color = color
self.cv = cv
self.cid = self.cv.create_oval(
x - size, y - size, x + size,
y + size, fill=self.color)
self.lifespan = lifespan
def update(self, dt):
self.age += dt
# 粒子范围扩大
if self.alive() and self.expand():
move_x = cos(radians(self.id * 360 / self.total)) * self.initial_speed
move_y = sin(radians(self.id * 360 / self.total)) * self.initial_speed
self.cv.move(self.cid, move_x, move_y)
self.vx = move_x / (float(dt) * 1000)
# 以自由落体坠落
elif self.alive():
move_x = cos(radians(self.id * 360 / self.total))
# we technically don't need to update x, y because move will do the job
self.cv.move(self.cid, self.vx + move_x, self.vy + GRAVITY * dt)
self.vy += GRAVITY * dt
# 移除超过最高时长的粒子
elif self.cid is not None:
cv.delete(self.cid)
self.cid = None
# 扩大的时间
def expand (self):
return self.age <= 1.2
# 粒子是否在最高存在时长内
def alive(self):
return self.age <= self.lifespan
'''
循环调用保持不停
'''
def simulate(cv):
t = time()
explode_points = []
wait_time = randint(10, 100)
numb_explode = randint(6, 10)
# 创建一个所有粒子同时扩大的二维列表
for point in range(numb_explode):
objects = []
x_cordi = randint(50, 550)
y_cordi = randint(50, 150)
speed = uniform(0.5, 1.5)
size = uniform(1, 3)
color = choice(colors)
explosion_speed = uniform(0.2, 1)
total_particles = randint(10, 50)
for i in range(1, total_particles):
r = Particle(cv, idx=i, total=total_particles, explosion_speed=explosion_speed, x=x_cordi, y=y_cordi,
vx=speed, vy=speed, color=color, size=size, lifespan=uniform(0.6, 1.75))
objects.append(r)
explode_points.append(objects)
total_time = .0
# 1.8s内一直扩大
while total_time < 1.8:
sleep(0.01)
tnew = time()
t, dt = tnew, tnew - t
for point in explode_points:
for item in point:
item.update(dt)
cv.update()
total_time += dt
# 循环调用
root.after(wait_time, simulate, cv)
def close(*ignore):
"""退出程序、关闭窗口"""
global root
root.quit()
if __name__ == '__main__':
root = tk.Tk()
cv = tk.Canvas(root, height=400, width=600)
# 绘制一个黑色背景
cv.create_rectangle(0, 0, 600, 400, fill='black')
# cv = tk.Canvas(root, height=400, width=600)
# # 选一个好看的背景会让效果更惊艳!
# image = Image.open("./image.jpg")
# photo = ImageTk.PhotoImage(image)
#
# cv.create_image(0, 0, image=photo, anchor='nw')
cv.pack()
root.protocol("WM_DELETE_WINDOW", close)
root.after(100, simulate, cv)
root.mainloop()
实现效果图:
python代码画动态烟花_如何用python画烟花相关推荐
- python代码模拟宇宙天体_如何用python模拟一个星系?
在一开始,还是要感谢一下凌晨晓骥. 我的这个回答相当于对他的答案的一个补充.主要目标是帮助大家安装Gadget-2,并引导你们自己画出银河碰撞的视频. 那么开始了! 首先看一下我们的目标星系碰撞模拟_ ...
- python 网页樱花动态图_如何用Python实现动态图?
GIF(Graphics Interchange Format,图形交换格式)是一种位图图像格式, GIF格式的图像文件具有如下特点: (1)GIF格式图像文件的扩展名是".gif" ...
- python画画用哪个软件_如何用python画韦恩图? 使用python的tutul工具,画一朵雏菊花...
使用python的tutul工具,画一朵雏菊花 如何用python画韦恩图?不管什么时候,给心留一点空间.人生一世,不用什么都要去争,不是什么都要去抢,欲望少一点,满足多一点,这样才会活得潇洒一点,人 ...
- 如何用python画爱心型线_如何用python画爱心
用python绘制爱心的基本步骤如下: 首先先下载安装好python程序. 在我们自己的电脑上找到python 的IDLE工具. 2.然后打开IDLE,新建一个文件,命名为test1.py. 3.接着 ...
- python爬取微信好友_如何用 Python 爬取自己的微信朋友
原标题:如何用 Python 爬取自己的微信朋友 作者 Alfred 本文转载自网络,如涉及侵权请及时联系我们 微信作为一款拥有将近9亿用户的超级APP,已经成为很多人生活中不可或缺的一部分,聊天.分 ...
- 用python做舆情分析系统_如何用Python做舆情时间序列可视化?
如何批量处理评论信息情感分析,并且在时间轴上可视化呈现?舆情分析并不难,让我们用Python来实现它吧. 痛点 你是一家连锁火锅店的区域经理,很注重顾客对餐厅的评价.从前,你苦恼的是顾客不爱写评价.最 ...
- 用python做预测模型的好处_如何用Python在10分钟内建立一个预测模型
匿名用户 1级 2017-01-01 回答 预测模型的分解过程 我总是集中于投入有质量的时间在建模的初始阶段,比如,假设生成.头脑风暴.讨论或理解可能的结果范围.所有这些活动都有助于我解决问题,并最终 ...
- python write 写多行_如何用 Python 执行单行命令
一般来说,面对日常处理的一些小任务,直接用 sed,grep 之类的就可以搞定,更复杂一点的就会考虑 awk 或者用一些现成的轮子,要是 awk 搞不定我就只好用 Python 了.但有些时候,我仅仅 ...
- python登录交换机执行命令_如何用Python脚本登录到交换机上修改配置?
原标题:如何用Python脚本登录到交换机上修改配置? 网 工 圈 网络工程师阿龙 圈内最早的公益公众号,本号已认证!学网络关注我一个就够了(关注近5w+) 关注 听说 99%的 网工都来这里充电吖 ...
- python删除excel第一行_如何用 Python 清洗数据?
林骥的第 38 篇文章 0. 序言在做数据分析之前,我们首先要明确数据分析的目标,然后应用数据分析的思维,对目标进行细分,再采取相应的行动.我们可以把数据分析细分为以下 8 个步骤:(1)读取(2)清 ...
最新文章
- python函数参数那些事,关键字参数与位置参数
- windows下 , py运用了 进程池, 将py打包成exe,出现错误的 解决思路之一
- react学习(35)----getFieldDecorator will override value
- 关于Actionscript 3中给Flash传参数方法(一)
- C语言高效编程的的四大绝招
- 小程序 | 获取用户头像信息接口改进:getUserInfo的使用
- SQLServer 2005新功能
- 使用Python模拟蒙蒂霍尔悖论游戏
- mysql 安装后大_Window下MySql 5.6 安装后内存占用很高的问题
- UISlider 设置增量
- Rhino 7 for Mac(犀牛3D造型软件)
- go语言介绍及应用场景分析
- deepin下安装QT
- python图片验证码解决方案
- EXCEL冻结窗口只想冻结前两行
- 小程序实现保存图片到手机
- 为了女朋友!熬夜撸了一个“合成大西瓜”!(附源码)
- 《Java程序设计》公选课学习指南
- GMAC接口(1)——GMAC简介
- aspiration搭配_明3你们最喜欢的组合有哪些?