您的位置:首页 > 房产 > 家装 > 腾讯云服务器秒杀_网页设计毕业论文报告_指数是指什么_网站推广步骤

腾讯云服务器秒杀_网页设计毕业论文报告_指数是指什么_网站推广步骤

2024/12/22 23:40:12 来源:https://blog.csdn.net/m0_68111267/article/details/144411498  浏览:    关键词:腾讯云服务器秒杀_网页设计毕业论文报告_指数是指什么_网站推广步骤
腾讯云服务器秒杀_网页设计毕业论文报告_指数是指什么_网站推广步骤

跳动的爱心

系列文章

序号直达链接
表白系列
1Python制作一个无法拒绝的表白界面
2Python满屏飘字表白代码
3Python无限弹窗满屏表白代码
4Python李峋同款可写字版跳动的爱心
5Python流星雨代码
6Python漂浮爱心代码
7Python爱心光波代码
8Python普通的玫瑰花代码
9Python炫酷的玫瑰花代码
10Python多彩的玫瑰花代码
节日系列
1Python动漫风烟花秀代码
2Python新年烟花秀代码
3Python圣诞礼物代码
4Python画圣诞树代码
5Python可爱版圣诞树丨绿色
6Python可爱版圣诞树丨粉色
7Python大雪纷飞代码
8Python生日蛋糕代码
9Python五彩气球代码
10Python国庆祝福代码
11Python万圣礼物代码
12Python愚人节礼物代码
13Python浪漫星空代码
14Python樱花树代码
动漫系列
1Python名侦探柯南
2Python喜羊羊
3Python懒羊羊
4Python沸羊羊
5Python小灰灰
6Python小香香
7Python灰太狼
8Python海绵宝宝
9Python哆啦A梦
10Python凯蒂猫
11Python猫和老鼠
12Python草莓熊
13Python迷你皮卡丘
14Python高级皮卡丘
15Python豪华皮卡丘
16Python史迪仔
17Python小熊猫
18Python蜘蛛侠
19Python可爱版蜡笔小新
20Python萌萌的蜡笔小新
21Python罗小黑
22Python猪猪侠
炫酷系列
1  Python张万森下雪了
2Python一闪一闪亮晶晶
3Python黑客帝国代码雨
4Python七彩花朵
5Python模拟3D星空
6Python金榜题名
7Python满天星

文章目录

  • 系列文章
  • 写在前面
  • 完整代码
  • 代码分析
      • 1. 导入库
      • 2. 全局变量定义
      • 3. Heart 类
        • 3.1 `__init__` 方法
        • 3.2 `build` 方法
        • 3.3 `calc_position` 方法
        • 3.4 `calc` 方法
        • 3.5 `render` 方法
      • 4. 辅助函数
        • 4.1 `heart_function`
        • 4.2 `scatter_inside`
        • 4.3 `shrink`
        • 4.4 `curve`
      • 5. 主程序和显示
      • 6. 总结
  • 写在最后

写在前面

Python语言实现李峋同款可写字版跳动的爱心的完整代码。

完整代码

import tkinter as tk
import tkinter.messagebox
import random
from math import sin, cos, pi, log
from tkinter.constants import *width = 888
height = 500
heartx = width / 2
hearty = height / 2
side = 11
heartcolor = "skyblue"  # 爱心颜色,可修改
word = "I Love You!"  # 想要写的字,可修改# 爱心类
class Heart:def __init__(self, generate_frame=20):self._points = set()  # 原始爱心坐标集合self._edge_diffusion_points = set()  # 边缘扩散效果点坐标集合self._center_diffusion_points = set()  # 中心扩散效果点坐标集合self.all_points = {}  # 每帧动态点坐标self.build(2000)self.random_halo = 1000self.generate_frame = generate_framefor frame in range(generate_frame):self.calc(frame)def build(self, number):for _ in range(number):t = random.uniform(0, 2 * pi)x, y = heart_function(t)self._points.add((x, y))for _x, _y in list(self._points):for _ in range(3):x, y = scatter_inside(_x, _y, 0.05)self._edge_diffusion_points.add((x, y))point_list = list(self._points)for _ in range(4000):x, y = random.choice(point_list)x, y = scatter_inside(x, y, 0.17)self._center_diffusion_points.add((x, y))
……

代码分析

这段代码是使用 tkinter 库编写的一个爱心动画程序。它展示了一个动态变化的爱心效果,并在屏幕中间显示 “I Love You!” 文字。代码包含了多个功能模块,下面将逐一分析每个部分的功能和工作原理。

1. 导入库

import tkinter as tk
import tkinter.messagebox
import random
from math import sin, cos, pi, log
from tkinter.constants import *
  • tkinter:用于创建图形用户界面(GUI)。
  • random:用于生成随机数,控制动画中的随机效果。
  • math:用于数学计算,特别是三角函数和对数运算,用于生成爱心形状的数学公式。
  • tkinter.constants:提供一些常用常量,例如用于定位和对齐的常量(如 CENTER)。

2. 全局变量定义

width = 888
height = 500
heartx = width / 2
hearty = height / 2
side = 11
heartcolor = "skyblue"  # 爱心颜色,可修改
word = "I Love You!"  # 想要写的字,可修改
  • widthheight:定义了画布的宽度和高度。
  • heartxhearty:爱心的中心坐标。
  • side:定义了爱心图案的初始大小。
  • heartcolor:定义了爱心的颜色。
  • word:定义了显示在屏幕上的文字内容。

3. Heart 类

Heart 类负责生成和渲染动态的爱心效果。

3.1 __init__ 方法
def __init__(self, generate_frame=20):self._points = set()  # 原始爱心坐标集合self._edge_diffusion_points = set()  # 边缘扩散效果点坐标集合self._center_diffusion_points = set()  # 中心扩散效果点坐标集合self.all_points = {}  # 每帧动态点坐标self.build(2000)self.random_halo = 1000self.generate_frame = generate_framefor frame in range(generate_frame):self.calc(frame)
  • self._pointsself._edge_diffusion_pointsself._center_diffusion_points:分别存储爱心的原始点、边缘扩散效果点和中心扩散效果点。
  • self.all_points:保存每一帧的所有点数据。
  • self.build(2000):构建爱心形状和扩散效果。
  • self.random_halo:用于控制光晕效果的强度。
  • self.generate_frame:决定生成的帧数,用于控制动画的流畅度。
3.2 build 方法
def build(self, number):for _ in range(number):t = random.uniform(0, 2 * pi)x, y = heart_function(t)self._points.add((x, y))
  • self._points:通过生成随机的 t 值,计算出爱心形状的点。heart_function(t) 是计算爱心形状的函数。
  • 扩散效果:通过向 self._edge_diffusion_pointsself._center_diffusion_points 中添加更多的点来实现边缘和中心的扩散效果。
3.3 calc_position 方法
def calc_position(x, y, ratio):force = 1 / (((x - heartx) ** 2 + (y - hearty) ** 2) ** 0.520)  # 魔法参数dx = ratio * force * (x - heartx) + random.randint(-1, 1)dy = ratio * force * (y - hearty) + random.randint(-1, 1)return x - dx, y - dy

这个方法用于计算每个点在动画过程中移动的偏移量。偏移量的计算考虑了距离和比例,并加入了一些随机偏差,使得效果更加自然。

3.4 calc 方法
def 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))
  • 计算每一帧的变化,更新爱心的点和光晕效果。
  • halo_radiushalo_number 控制了光晕的半径和数量。
  • 使用 heart_functionshrink 方法来计算爱心边缘的点,并将它们加入 all_points 列表。
3.5 render 方法
def 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=heartcolor)
  • 渲染当前帧的所有点,使用 create_rectangle 方法在画布上绘制矩形来表示每个点。
  • 点的大小由 size 控制,颜色是 heartcolor

4. 辅助函数

4.1 heart_function
def heart_function(t, shrink_ratio: float = side):x = 16 * (sin(t) ** 3)y = -(13 * cos(t) - 5 * cos(2 * t) - 2 * cos(3 * t) - cos(4 * t))x *= shrink_ratioy *= shrink_ratiox += heartxy += heartyreturn int(x), int(y)
  • 该函数根据 t 参数计算出爱心的坐标,使用的是数学公式生成爱心形状的点。
  • shrink_ratio 控制爱心大小。
4.2 scatter_inside
def scatter_inside(x, y, beta=0.15):ratio_x = - beta * log(random.random())ratio_y = - beta * log(random.random())dx = ratio_x * (x - heartx)dy = ratio_y * (y - hearty)return x - dx, y - dy
  • 模拟点的散射效果,控制点在爱心内部的分布。
4.3 shrink
def shrink(x, y, ratio):force = -1 / (((x - heartx) ** 2 + (y - hearty) ** 2) ** 0.6)dx = ratio * force * (x - heartx)dy = ratio * force * (y - hearty)return x - dx, y - dy
  • 通过计算一个缩放因子来调整点的位置,使其从爱心的中心向外扩展或收缩。
4.4 curve
def curve(p):return 2 * (2 * sin(4 * p)) / (2 * pi)
  • 用于生成平滑的周期性变化,控制动画中的点移动。

5. 主程序和显示

def love():root = tk.Tk()screenwidth = root.winfo_screenwidth()screenheight = root.winfo_screenheight()x = (screenwidth - width) // 2y = (screenheight - height) // 2 - 66root.geometry("%dx%d+%d+%d" % (width, height, x, y))root.title("❤")canvas = tk.Canvas(root, bg='black', height=height, width=width)canvas.pack()heart = Heart()draw(root, canvas, heart)tk.Label(root, text=word, bg="black", fg="skyblue", font="Helvetic 25 bold").place(relx=.5, rely=.5, anchor=CENTER)root.mainloop()
  • 创建主窗口并设置其尺寸和标题。
  • 创建一个画布并使用 Heart 类生成爱心效果。
  • 使用 draw 函数每隔一定时间刷新一次画布,渲染新的帧。
  • 在窗口中间显示 “I Love You!” 文字。

6. 总结

这段代码通过使用 tkinter 和数学函数,创建了一个动态的爱心动画,展现了光晕效果和扩散效果,使得爱心看起来更加生动和浪漫。通过对动画帧的控制,爱心的形状和运动轨迹会不断变化,生成了一个流畅的动态效果。这不仅是一个简单的 GUI 程序,还融合了数学和物理模拟的概念。

写在最后

我是一只有趣的兔子,感谢你的喜欢!

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com