Python爱心源码抖动图
程序示例精选
Python爱心源码动图
如需安装运行环境或远程调试,见文章底部微信名片!
前言
Python写的追女生神器-爱心动图,代码整洁,规则,易读,对学习与使用Python有较好的帮助。
文章目录
一、所需工具软件
二、使用步骤
1. 引入库
2. 参数设置
3. 爱心函数
4. 运行结果
三、在线协助
一、所需工具软件
1. Python3.6以上
2. Pycharm代码编辑器
3. Random, Math, Thinter库
二、使用步骤
1.引入库
代码如下(示例):
import random
from math import sin, cos, pi, log
from tkinter import *
2.参数设置
代码如下(示例):
CANVAS_WIDTH = 640 #画布的宽
CANVAS_HEIGHT = 480 # 画布的高
CANVAS_CENTER_X = CANVAS_WIDTH / 2 # 画布中心的X轴坐标
CANVAS_CENTER_Y = CANVAS_HEIGHT / 2 # 画布中心的Y轴坐标
IMAGE_ENLARGE = 11 # 放大比例
HEART_COLOR = "#FF0000" #爱心颜色,16进制颜色代码
该处使用的url网络请求的数据。
3.爱心函数:
代码如下(示例):
def heart_function(t, shrink_ratio: float = IMAGE_ENLARGE):"""“爱心函数生成器”:param shrink_ratio: 放大比例:param t: 参数:return: 坐标"""# 基础函数x = 16 * (sin(t) ** 3)y = -(13 * cos(t) - 5 * cos(2 * t) - 2 * cos(3 * t) - cos(4 * t))# 移到画布中央x += CANVAS_CENTER_Xy += CANVAS_CENTER_Yreturn int(x), int(y)#指数分布的扩散函数
def scatter_inside(x, y, beta=0.15):"""随机内部扩散:param x: 原x:param y: 原y:param beta: 强度:return: 新坐标"""ratio_x = - beta * log(random.random())ratio_y = - beta * log(random.random())dx = ratio_x * (x - CANVAS_CENTER_X)dy = ratio_y * (y - CANVAS_CENTER_Y)return x - dx, y - dydef shrink(x, y, ratio):"""抖动:param x: 原x:param y: 原y:param ratio: 比例:return: 新坐标"""force = -1 / (((x - CANVAS_CENTER_X) ** 2 + (y - CANVAS_CENTER_Y) ** 2) ** 0.6) # 这个参数...dx = ratio * force * (x - CANVAS_CENTER_X)dy = ratio * force * (y - CANVAS_CENTER_Y)return x - dx, y - dydef curve(p):"""自定义曲线函数,调整跳动周期:param p: 参数:return: 正弦"""# 可以尝试换其他的动态函数,达到更有力量的效果(贝塞尔?)return 2 * (2 * sin(4 * p)) / (2 * pi)class Heart:"""爱心类"""def __init__(self, generate_frame=20):self._points = set() # 原始爱心坐标集合self._edge_diffusion_points = set() # 边缘扩散效果点坐标集合self._center_diffusion_points = set() # 中心扩散效果点坐标集合self.build(2000)self.random_halo = 1000self.generate_frame = generate_framefor frame in range(generate_frame):self.calc(frame)@staticmethod#让心中间有挤压感def calc_position(x, y, ratio):# 调整缩放比例force = 1 / (((x - CANVAS_CENTER_X) ** 2 + (y - CANVAS_CENTER_Y) ** 2) ** 0.520) # 魔法参数dx = ratio * force * (x - CANVAS_CENTER_X) + random.randint(-1, 1)dy = ratio * force * (y - CANVAS_CENTER_Y) + random.randint(-1, 1)return x - dx, y - dydef calc(self, generate_frame):ratio = 10 * curve(generate_frame / 10 * pi) # 圆滑的周期的缩放比例halo_radius = int(4 + 6 * (1 + curve(generate_frame / 10 * pi)))halo_number = int(3000 + 4000 * abs(curve(generate_frame / 10 * pi) ** 2))all_points = []# 光环heart_halo_point = set() # 光环的点坐标集合for _ in range(halo_number):t = random.uniform(0, 2 * pi) # 随机不到的地方造成爱心有缺口x, y = heart_function(t, shrink_ratio=11.6) # 魔法参数x, y = shrink(x, y, halo_radius)if (x, y) not in heart_halo_point:# 处理新的点heart_halo_point.add((x, y))x += random.randint(-14, 14)y += random.randint(-14, 14)size = random.choice((1, 2, 2))all_points.append((x, y, size))# 轮廓for x, y in self._points:x, y = self.calc_position(x, y, ratio)size = random.randint(1, 3)all_points.append((x, y, size))# 内容for x, y in self._edge_diffusion_points:x, y = self.calc_position(x, y, ratio)size = random.randint(1, 2)all_points.append((x, y, size))for x, y in self._center_diffusion_points:x, y = self.calc_position(x, y, ratio)size = random.randint(1, 2)all_points.append((x, y, size))self.all_points[generate_frame] = all_pointsdef render(self, render_canvas, render_frame):for x, y, size in self.all_points[render_frame % self.generate_frame]:render_canvas.create_rectangle(x, y, x + size, y + size, width=0, fill=HEART_COLOR)def draw(main: Tk, render_canvas: Canvas, render_heart: Heart, render_frame=0):render_canvas.delete('all')render_heart.render(render_canvas, render_frame)main.after(160, draw, main, render_canvas, render_heart, render_frame + 1)
if __name__ == '__main__':root = Tk() # 一个Tkcanvas = Canvas(root, bg='black', height=CANVAS_HEIGHT, width=CANVAS_WIDTH)canvas.pack()heart = Heart() # 心draw(root, canvas, heart) # 开始画画~root.mainloop()
4.运行结果如下:
三、在线协助:
如需安装运行环境或远程调试,见文章底部微信名片!
Python爱心源码抖动图相关推荐
- 爱心源码动图-Html网页运行
程序示例精选 爱心源码动图-Html网页运行 如需安装运行环境或远程调试,见文章底部微信名片! 前言 Html写的追女生神器-爱心动图,代码整洁,规则,易读,对学习与使用Html有较好的帮助. 文章目 ...
- 闪动爱心源码(Python)
闪动爱心源码 效果: import random from math import sin, cos, pi, log from tkinter import *CANVAS_WIDTH = 640 ...
- vue3版本的爱心源码
老婆:你会爱心源码吗? 我:(一脸懵逼)啥? 老婆:就是用代码花个爱心,小垃圾 我:这不是本科生基操吗?能难得住我?说吧,要什么样的.什么色儿的爱心. 脑海里,已经开始构思用纯css画还是用svg,要 ...
- Python绘制表白爱心源码【女神看了绝对不会拒绝的你的表白嘿嘿】
一个人在沙漠里快要饿死了,这时他捡到了神灯. 神灯:"我只可以实现你一个愿望,快说吧,我赶时间." 人:"我要老婆--" 神灯立刻变出一个美女,然后不屑的说:& ...
- Python使用matplotlib可视化箱图、seaborn中的boxplot函数可视化分组箱图、在箱图中添加抖动数据点(Dot + Box Plot)
Python使用matplotlib可视化箱图.seaborn中的boxplot函数可视化分组箱图.在箱图中添加抖动数据点(Dot + Box Plot) 目录
- 专属微信二维码python制作_如何利用Python制作简单的公众号二维码关注图
创意配图:微信,微信公众号,微信大V 而且最近发现了一个新的图像处理方面的库-Wand,它是 ImageMagick 库的 Python 接口.于是,我就打算用这个库来实现简单的制作一个二维码关注图, ...
- python二维码加动态图_用python自制个性二维码(设置带LOGO的二维码带动图)
本文使用的是 python3.6 MyQR库 tkinter库 我们可以使用MyQR这个库 安装方式如下: 进入命令行输入: pip3 install MyQR 如果安装不成功多半是网络有问题,可以去 ...
- 中文汉字注音,汉字转拼音,支持图片识别文字,支持结果转图下载,附上小程序核心源码
"文字注音"小程序在微信.字节跳动.支付宝.QQ等小程序平台同步上线,微信.头条.抖音.支付宝.QQ中搜索"文字注音"即可获得. 一.功能 汉字转拼音,支持图片 ...
- python爬取图片源码_半次元图片爬取-python爬取半次元图片源码下载-西西软件下载...
python爬取半次元图片源码,由大神自制的python爬取工具,本源码针对半次元图片平台,可以爬取最新的网站图片资源,支持自定义保存目录,非常方便,需要requests库的支持,想要相关源码资源的朋 ...
最新文章
- SpringBoot基础入门
- centos国内yum源
- python面向对象(3)
- mysql root用户创建数据库,分配到一个帐户下
- java 判断类型_Java中类型判断的几种方式
- Kotlin:比 Java 做得更好
- todo: 网口驱动
- mtkwin10驱动_MTK手机刷机驱动下载|MTK通用USB刷机驱动 Win7/Win10 自动安装版 下载_当下软件园_软件下载...
- 深海迷航坐标传送代码_深海迷航全控制台代码一览
- Excel常用函数:汇总计算与统计
- 收藏 | 史上最详细的 Landsat 1-9 系列数据集介绍~
- 论文阅读:Region Proposal by Guided Anchoring
- 《STM32学习笔记》4——核心功能电路与编程(下)
- IDM UltraEdit编辑器V26.00.0.48 烈火汉化64位版
- 算法系列——弗洛伊德算法(Floyd)
- led亮度鉴别测试软件,测试LED颜色与亮度——FeasaLED测试仪
- diskgenius系统迁移_手把手教你如何优化windows7操作系统
- 中国历代首都一览(完全版)
- 六种常见的「用户行为」分析方法
- 物联网介绍及RFID