【python】python爱心代码

news2024/11/15 5:07:39

一、实现效果:

        

欢迎来到英杰社区icon-default.png?t=N7T8https://bbs.csdn.net/topics/617804998

 二、准备工作

(1)、导入必要的模块:

       代码首先导入了需要使用的模块:requests、lxml和csv。

import requests
from lxml import etree
import csv

        如果出现模块报错

c124a1693bfc457ba1f2909ee9d299fc.png

        进入控制台输入:建议使用国内镜像源

pip install 模块名称 -i https://mirrors.aliyun.com/pypi/simple

         我大致罗列了以下几种国内镜像源:

清华大学
https://pypi.tuna.tsinghua.edu.cn/simple

阿里云
https://mirrors.aliyun.com/pypi/simple/

豆瓣
https://pypi.douban.com/simple/ 

百度云
https://mirror.baidu.com/pypi/simple/

中科大
https://pypi.mirrors.ustc.edu.cn/simple/

华为云
https://mirrors.huaweicloud.com/repository/pypi/simple/

腾讯云
https://mirrors.cloud.tencent.com/pypi/simple/

firework

class firework:
    def __init__(self, x, y, color):
        self.x = x
        self.y = y
        self.color = color
        self.radius = 1
        self.speed = random.uniform(0.5, 1.5)
        self.angle = math.radians(random.randint(0, 360))
        self.vx = self.speed * math.cos(self.angle)
        self.vy = self.speed * math.sin(self.angle)
        self.age = 0
        self.alive = True
        self.particles = []

这个类表示了一个烟花对象,它有以下属性:

  • xy:当前烟花的坐标。

  • color:当前烟花的颜色。

  • radius:当前烟花的半径。

  • speed:当前烟花的速度。

  • angle:当前烟花的运动角度。

  • vxvy:当前烟花的速度在 x 和 y 方向上的分量。

  • age:当前烟花已经存在的时间。

  • alive:当前烟花是否还存活。

  • particles:当前烟花爆炸后生成的粒子列表。

colorChange 函数

def colorChange(color, age):
    r, g, b = color
    if age > 255:
        age = 255
    if age <= 85:
        return (r+age, g, b)
    elif age <= 170:
        return (r, g+age-85, b)
    else:
        return (r, g, b+age-170)

这个函数用于计算烟花的颜色,它接受两个参数:

  • color:当前烟花的颜色。

  • age:当前烟花已经存在的时间。

根据 age 的值,逐渐改变颜色的 R、G、B 分量来实现颜色的渐变效果。具体来说,如果 age 小于等于 85,则只改变红色分量,否则如果 age 小于等于 170,则同时改变红色和绿色分量,否则同时改变红色、绿色和蓝色分量。

appendFirework 函数

def appendFirework():
    f = firework(random.randint(100, w-100), h, (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)))
    fireworks.append(f)
    root.after(random.randint(100, 1000), appendFirework)

这个函数用于递归生成烟花对象,并在画布上显示烟花效果。具体来说,它做了以下几件事情:

  • 创建一个新的 firework 对象,随机指定其坐标、颜色、速度和角度等属性。

  • 将新的烟花对象添加到 fireworks 列表中。

  • 随机生成 100 到 1000 毫秒的时间,之后再次调用 appendFirework 函数,实现递归生成烟花对象。

heart_function 函数

def heart_function(theta):
    x = 16 * math.sin(theta) ** 3
    y = 13 * math.cos(theta) - 5 * math.cos(2*theta) - 2 * math.cos(3*theta) - math.cos(4*theta)
    return (x, -y)

这个函数用于计算心形图案上的点坐标,它接受一个参数 theta,表示当前点所在的极角。具体来说,它使用一组极坐标方程来计算出心形图案上的点坐标,然后将其转换为笛卡尔坐标系下的坐标值并返回。

scatter_inside 函数

def scatter_inside(p, speed):
    x, y = p.pos
    vx, vy = p.vel
    dist = math.hypot(x, y)
    if dist < 1:
        dist = 1
    dx = x / dist
    dy = y / dist
    force = (10 / (dist ** 2)) * speed
    dvx = force * dx
    dvy = force * dy
    p.vel = (vx+dvx, vy+dvy)

这个函数用于实现心形内部的扩散效果,它接受两个参数:

  • p:当前粒子对象。

  • speed:扩散速度。

首先根据当前粒子的位置计算出一个向心力,然后根据该力的大小和方向改变粒子的速度,从而实现向外扩散的效果。

shrink 函数

def shrink(p, speed):
    x, y = p.pos
    vx, vy = p.vel
    dist = math.hypot(x, y)
    if dist < 1:
        dist = 1
    dx = x / dist
    dy = y / dist
    force = (-10 / (dist ** 2)) * speed
    dvx = force * dx
    dvy = force * dy
    p.vel = (vx+dvx, vy+dvy)

这个函数用于实现心形收缩效果,它接受两个参数:

  • p:当前粒子对象。

  • speed:收缩速度。

scatter_inside 函数类似,这个函数也是根据当前粒子的位置计算出一个向心力,然后根据该力的大小和方向改变粒子的速度,从而实现向内收缩的效果。

curve 函数

def curve(t):
    if t < 1:
        return math.sin(t*math.pi/2)
    else:
        return math.sin((2-t)*math.pi/2) * 0.5 + 0.5

这个函数返回一个介于 0 和 4 之间的值,用于控制心形动画的曲线效果。具体来说,它接受一个参数 t,表示当前时间占总动画时间的比例,然后根据 t 的值返回一个介于 0 和 4 之间的值,用于控制心形动画的曲线效果。

Heart

class Heart:
    def __init__(self):
        self.points = []
        self.colors = []
        self.particles = []
        self.speed = 5
        self.pos = (w/2, h/2)
        self.rotation = 0
        self.scale = 1
        self._create_heart()
​
    def _create_heart(self):
        for i in range(1000):
            theta = i / 1000 * math.pi * 2
            r = heart_function(theta)[0]
            x = r * math.cos(theta)
            y = r * math.sin(theta)
            self.points.append((x, y))
            self.colors.append((random.randint(128, 255), random.randint(0, 128), random.randint(0, 128)))
​
    def update(self):
        for p in self.particles:
            p.update()
        self.particles = [p for p in self.particles if p.alive]
​
        if random.random() < 0.3:
            x, y = self.pos
            dx = random.uniform(-1, 1) * self.speed
            dy = random.uniform(-1, 1) * self.speed
            p = Particle((x+dx, y+dy), (dx/4, dy/4))
            self.particles.append(p)
​
        self.rotation += 0.001
        self.scale = curve(self.rotation)
​
    def draw(self, canvas):
        cx, cy = self.pos
        for i, (x, y) in enumerate(self.points):
            r, g, b = self.colors[i]
​
            x *= self.scale
            y *= self.scale
​
            x, y = rotate(x, y, self.rotation)
​
            x += cx
            y += cy
​
            canvas.create_oval(x-1, y-1, x+1, y+1, fill="#%02x%02x%02x" % (r, g, b), width=0)

这个类用于生成爱心图案及其动态效果,它有以下属性:

  • points:存储心形图案上的所有点的坐标。

  • colors:存储心形图案上的所有点的颜色。

  • particles:存储所有心形收缩和扩散过程中生成的粒子。

  • speed:控制粒子运动速度的参数。

  • pos:控制心形图案位置的参数。

  • rotation:控制心形图案旋转角度的参数。

  • scale:控制心形图案缩放比例的参数。

其中,初始化函数 _create_heart 用于生成心形图案上的所有点和颜色,update 函数用于更新心形图案的动画效果,draw 函数用于在画布上绘制心形图案,并在每一帧更新心形的动态效果。

draw 函数

def draw():
    global fireworks, hearts
    canvas.delete("all")
    for f in fireworks:
        if f.alive:
            f.draw(canvas)
            f.update()
        else:
            for p in f.particles:
                if random.random() < 0.5:
                    hearts.append(Heart())
            fireworks.remove(f)
    for h in hearts:
        h.draw(canvas)
        h.update()
    root.after(25, draw)

这个函数用于在画布上绘制烟花和心形图案,并在每一帧更新它们的动画效果。具体来说,它做了以下几件事情:

  • 遍历所有烟花对象,如果烟花还存活,则在画布上显示它的效果并更新它的状态;否则将烟花爆炸后生成的粒子转化为心形对象,并将烟花从 fireworks 列表中移除。

  • 遍历所有心形对象,显示它们的效果并更新它们的状态。

  • root 窗口上注册一个定时器,在 25 毫秒之后再次调用 draw 函数,实现连续播放动画的效果。

完整代码:

资料获取,更多粉丝福利,关注下方公众号获取,直接搜索“英杰代码编程”

回复"python爱心代码",“爱心代码”,“python爱心” 均可获取完整代码

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

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

相关文章

不同状态角 θz 下的 K2eff 和 Kav 计算结果

不同状态角 θ z 下的 K 2 eff 和 K av 计算结果 clear clc close all syms theta for theta_z[pi/5,pi/3,pi/2,2*pi/3,4*pi/5,pi] % theta_zdtheta_z*180/pi theta_1-theta_z/2; theta_2theta_z/2; fthetacos(theta); ftheta2cos(theta)^2; Keff2int(ftheta2,theta_1,…

png,jpg,bmp等格式图像转.npy文件(附代码)

目录 一、npy文件二、代码三、转后效果 一、npy文件 .npy 文件是 NumPy 库用于存储数组的二进制文件格式。这种文件可以存储一个或多个 NumPy 数组对象。.npy 文件在保存和加载 NumPy 数组时非常有用&#xff0c;因为它们可以用于在磁盘上高效地存储数据&#xff0c;并且在加载…

MySQL 安装配置 windows

一、下载 去官网MySQL :: MySQL Downloads 下载社区版 然后根据自己的系统选择 直接下载。 二、安装 点击安装程序 这边看样子缺少东西。 去这边下载 Latest supported Visual C Redistributable downloads | Microsoft Learn 然后再一次安装mysql 三、配置 安装完成后&a…

PPT母版页码设置

PPT母版页码设置 一、需求介绍二、达到效果三、具体操作1. 插入页码2. 设置起始页码为03. 进入母版编辑页面4. 内容格式调整5. 删去最后一个板式的三个模块信息6. 尾页处理7. 最终效果 一、需求介绍 PPT的母版可以设定PPT的基调&#xff0c;且在非母版页面不会误改PPT中的固定…

参考数据集INRIA Holidays dataset

Download datasets 很贴心,MATLAB访问代码: % This function reads a siftgeo binary file % % Usage: [v, meta] = siftgeo_read (filename, maxdes) % filename the input filename % maxdes maximum number of descriptors to be loaded % (default=unlimit…

力扣刷题之旅:启程篇(二)

力扣&#xff08;LeetCode&#xff09;是一个在线编程平台&#xff0c;主要用于帮助程序员提升算法和数据结构方面的能力。以下是一些力扣上的入门题目&#xff0c;以及它们的解题代码。 --点击进入刷题地址 1.最后得到的余数 题目描述&#xff1a; 给定两个非空字符串 nu…

2024/2/3

一&#xff0e;选择题 1、适宜采用inline定义函数情况是&#xff08;C&#xff09; A. 函数体含有循环语句 B. 函数体含有递归语句‘、考科一 ’ C. 函数代码少、频繁调用 D. 函数代码多、不常调用 2、假定一个函数为A(int i4, int j0) {;}, 则执行“A (1);”语句后&#xff0c…

C++之std::tuple(一) : 使用

相关系列文章 C之std::tuple(一) : 使用 C三剑客之std::variant(一) : 使用 C三剑客之std::variant(二)&#xff1a;深入剖析 目录 1.简介 2.创建元组 2.1.直接初始化方式 2.2.使用花括号初始化列表方式&#xff08;C11及以上版本&#xff09; 2.3.make_tuple方式 2.4.使…

03.PostgreSQL排序和分页

当我们使用SELECT语句查询表中数据的时候,PostgreSQL不确保按照一定的顺序返回结果。如果想要将查询的结果按照某些规则排序显示,需要使用ORDER BY子句。 1. 排序规则 使用ORDER BY 子句排序 ASC: 升序 DESC:降序 ORDER BY 子句在SELECT语句的结尾 1.1 单列排序 是指按…

手机gif动图怎么操作?这个方法分分钟解决

手机上怎么制作gif动画&#xff1f;Gif动图是当下非常流行的一种表达方式&#xff0c;通过简单的画面循环就能够传达您的想法。但是&#xff0c;想要在手机上制作gif动画的时候应该怎么办呢&#xff1f;通过会用GIF动图在线编辑&#xff08;https://www.gif.cn/&#xff09;工具…

AutoCAD .NET 层次结构介绍

AutoCAD .NET API 提供了一种面向对象的编程接口&#xff0c;通过它可以与AutoCAD进行深度集成和自定义功能开发。以下是基于.NET框架下AutoCAD对象层次结构的基本介绍&#xff1a; Autodesk.AutoCAD.ApplicationServices 命名空间 根对象&#xff0c;代表运行中的AutoCAD应用程…

牛客寒假训练营H题

思路&#xff1a;找出所有m的子集&#xff0c;加到价值中&#xff0c;找出最大价值即可。 代码&#xff1a; void solve(){int n, m;cin >> n >> m;vector<pii>a(n 1);for(int i 1;i < n;i )cin >> a[i].first >> a[i].second;int ans 0…

Servlet(未完结~)

文章目录 前言1 Servlet简介2 Servlet初识2.1 Servlet开发流程2.2 配置欢迎页 3 Servlet案例开发!3.1 开发登录页3.2 开发后台Servlet3.3 配置Servlet 4 HttpServletRequest4.1 回顾http请求4.2 自定义servlet流程图4.3 HttpServletRequest4.4获取请求行信息4.5获取请求头信息4…

Oracle12c R2 ORA-12805 BUG导致生成巨大TRC文件问题处理

1、基础环境 操作系统&#xff1a;unix&solaris 11.3 数据库版本&#xff1a;oracle 12.2 CDB&PDB 数据库补丁信息 oracleQSSJJZDB2:~$ opatch lspatches 23333567; 27959048; 26187578;OCW Interim patch for 26187578 27674384;Database Apr 2018 Release Update :…

HarmonyOS--Stage模型

构建第一个ArkTS应用(Stage模型)-快速入门-入门 | 华为开发者联盟 (huawei.com) 鸿蒙开发两种模型 FA模型:早期使用,现在不主推。Stage模型:推荐HarmonyOS4和HarmonyOS NEXT版本开发从源码到编译到运行 @entry就是一个Ability类的一个模块。 编译期 源码中的所有Ability模…

常见API

文章目录 Math类1.1 概述1.2 常见方法 System类2.1 概述2.2 常见方法 Runtime3.1 概述3.2 常见方法 Object类4.1 概述4.2 常见方法 Objects类5.1 概述5.2 常见方法 BigInteger类6.1 引入6.2 概述6.3 常见方法6.4 底层存储方式&#xff1a; 7 BigDecimal类7.1 引入7.2 概述7.3 常…

《数据安全法》解读篇

《中华人民共和国数据安全法》 颁布时间&#xff1a;2021年6月10日实施时间&#xff1a;2021年9月1日《中华人民共和国数据安全法》整体架构图 数据安全的定义&#xff1a;是指通过采取必要措施&#xff0c;确保数据处于有效保护和合法利用的状态&#xff0c;以及具备保障持续…

STM32--USART串口(2)串口外设

一、USART简介 可配置数据位&#xff1a;不需要校验就是8位&#xff0c;需要校验就选9位&#xff1b; 停止位&#xff1a;决定了帧的间隔; STM32F103C8T6USART&#xff1a;USART1挂载在APB2总线上&#xff0c;USART2和USART3挂载在APB1总线上&#xff1b; 二、USART框图 TXE…

【数据分析】Excel中的常用函数公式总结

目录 0 引用方式0.1 相对引用0.2 绝对引用0.3 混合引用0.4 3D引用0.5 命名引用 1 基础函数1.1 加法、减法、乘法和除法1.2 平均数1.3 求和1.4 最大值和最小值 2 文本函数2.1 合并单元格内容2.2 查找2.3 替换 3 逻辑函数3.1 IF函数3.2 AND和OR函数3.3 IFERROR函数 4 统计函数4.1…

STM32 UART/USART与RTOS的多任务通信和同步机制设计

在STM32微控制器中&#xff0c;UART/USART与RTOS的多任务通信和同步机制设计可以通过操作系统提供的任务调度机制和各种同步原语&#xff08;例如信号量、邮箱、消息队列等&#xff09;来实现。在下面的解释中&#xff0c;我将介绍如何设计基于FreeRTOS的STM32多任务通信和同步…