漂浮的爱心

系列文章

序号直达链接
Tkinter
1Python李峋同款可写字版跳动的爱心
2Python跳动的双爱心
3Python蓝色跳动的爱心
4Python动漫烟花
5Python粒子烟花
Turtle
1Python满屏飘字
2Python蓝色流星雨
3Python金色流星雨
4Python漂浮爱心
5Python爱心光波①
6Python爱心光波②
7Python满天繁星
8Python五彩气球
9Python白色飘雪
10Python七彩花朵
11Python 3D星空
12Python大雪纷飞
13Python一闪一闪亮星星
14Python爱心泡泡
15Python爱心射线
16Python圣诞礼物
17Python礼物圣诞树
18Python浪漫星空
19Python飞舞蝙蝠
20Python万圣礼物
21Python蓝色飘雪
Pygame
1Python跨年烟花
2Python炫酷烟花
3Python黑客帝国字母雨
敬请期待……

写在前面

Python实现漂浮爱心动画的完整代码。

技术需求

  1. Turtle 图形库

    • 通过 turtle 库进行图形绘制,创建了动态的爱心动画。使用 Pen() 创建画笔对象,控制画笔的运动、绘制和颜色等属性。turtle 库还提供了绘制基本几何图形(如圆形、直线等)的功能,适用于动画和图形界面的创建。
  2. 面向对象编程 (OOP)

    • 通过定义 Heart 类来实现爱心的对象化管理。每个爱心具有自己的属性(如位置、速度、颜色、半径等)和方法(如移动、绘制等)。这种设计方式使得每个爱心的行为独立且封装,方便管理和扩展。
  3. 随机数生成

    • 使用 random 库生成随机数,为每个爱心的属性(如位置、大小、颜色、速度)赋予随机值,使得每次运行时爱心的位置、运动轨迹和速度都不相同,从而增加了动画的随机性和趣味性。
  4. 数学计算

    • 使用 math 库中的三角函数 sin() 来控制爱心左右的摆动。通过正弦函数的变化,爱心的水平运动轨迹呈现波动效果,模拟了自然的漂浮感觉。
  5. 动态画布更新

    • 使用 tu.tracer(0)tu.update() 来优化画布的更新。tu.tracer(0) 禁用自动刷新,避免每次绘制时屏幕的闪烁;tu.update() 在所有绘制完成后一次性刷新屏幕,提高了动画的流畅度。
  6. 无限循环与实时动画

    • 通过 while True 无限循环实现了爱心的持续漂浮和动态更新,模拟了连续的动画效果。每次循环都会更新爱心的位置,并重绘它们。

完整代码

import turtle as tu
import random as ra
import mathtu.setup(1.0, 1.0)
tu.screensize(1.0, 1.0)
t = tu.Pen()
t.ht()
colors = ['pink']
class Heart():    #每个爱心(爱心类)def __init__(self):self.r = ra.randint(10,15)        #爱心的半径self.x = ra.randint(-1000,1000)   #爱心的横坐标self.y = ra.randint(-500,500)     #爱心的纵坐标self.f = ra.uniform(-3.14,3.14)   #爱心左右移动呈正弦函数self.speed = ra.randint(5,10)     #爱心移动速度self.color = ra.choice(colors)    #爱心的颜色self.outline = 1                  #爱心的外框大小(可不要)
……

代码分析

这段 Python 代码使用 turtle 库和 random 库创建了一种动态效果,其中多个爱心在屏幕上飘浮,模拟爱心随时间和运动的变化。下面将从代码的各个部分进行详细分析,重点关注代码的功能、实现过程、以及相关的技术细节。

1. 引入必要的库

import turtle as tu
import random as ra
import math

这段代码导入了三个库:

  • turtle:Python 的一个图形绘制模块,常用于绘制简单的图形和动画。
  • random:用于生成随机数的库,代码中用它来随机生成爱心的属性(位置、速度等)。
  • math:提供数学运算支持,在这里用来处理一些运动的三角函数,特别是爱心的左右摆动。

2. 设置屏幕参数

tu.setup(1.0, 1.0)
tu.screensize(1.0, 1.0)
  • tu.setup(1.0, 1.0) 设置了屏幕的宽度和高度为 1.0,即使用屏幕的最大范围。
  • tu.screensize(1.0, 1.0) 设置了屏幕的显示区域,参数也为最大。

3. 创建画笔对象

t = tu.Pen()
t.ht()
  • t = tu.Pen() 创建了一个画笔对象 t,可以用它来控制 Turtle 画笔的状态和位置。
  • t.ht() 隐藏了画笔。因为我们不需要在屏幕上看到画笔本身,只需绘制出爱心图形。

4. 定义颜色列表

colors = ['pink']

这里的颜色列表只包含一个颜色 'pink',表示所有爱心的颜色都将是粉色。这也使得整个动画具有统一的风格。

5. 定义 Heart 类

  • Heart 类用于表示一个爱心对象,每个实例代表一个漂浮的爱心。
  • self.r:随机生成爱心的半径,取值范围是 10 到 15。
  • self.xself.y:随机生成爱心的初始位置,x 在横轴上取值范围为 -1000 到 1000,y 在纵轴上取值范围为 -500 到 500。
  • self.f:随机生成一个角度值,用于控制爱心的左右移动,范围是 -π 到 π。
  • self.speed:随机生成爱心的速度,取值范围为 5 到 10。
  • self.color:爱心的颜色,这里是从 colors 列表中随机选取颜色,虽然目前 colors 列表只有 'pink' 一个颜色,但可以方便未来扩展。
  • self.outline:爱心的外框线宽,默认值为 1。

6. move 方法

  • 该方法控制爱心的位置更新和漂浮。
  • 首先判断爱心是否在画布范围内 (self.y <= 500)。
    • 如果爱心仍在画布内,self.y += self.speed 使爱心垂直方向上向下移动,self.x += self.speed * math.sin(self.f) 控制爱心在水平方向上的移动,self.f += 0.1 使得爱心的左右运动呈现正弦波状。
    • 如果爱心超出了画布的下边界 (self.y > 500),则重新生成一个新的爱心对象,并将其初始位置设置为画布的上方。

7. draw 方法

  • draw 方法负责使用 turtle 绘制爱心形状。
    • t.pensize(self.outline) 设置画笔的外框宽度。
    • t.penup() 抬起画笔,移动到指定位置后再绘制。
    • t.goto(self.x, self.y) 将画笔移动到当前爱心的随机位置。
    • t.pendown() 放下画笔开始绘制。
    • 使用 begin_fill()end_fill() 方法填充爱心内部颜色为粉色。
    • 通过 t.setheading(120) 设置画笔的初始角度,t.circle(self.r, 195) 画出爱心的两个半圆部分,t.fd(self.r * 2.4)t.left(90) 绘制爱心的底部。

8. 创建多个爱心对象

Hearts = []            # 用列表保存所有爱心
for i in range(100):Hearts.append(Heart())
  • Hearts 列表用于保存所有的爱心对象。通过 for 循环,创建 100 个 Heart 实例,并将其添加到 Hearts 列表中。

9. 设置背景颜色

tu.bgcolor('black')
  • 这行代码将画布的背景色设置为黑色,能让粉色的爱心更加突出。

10. 漂浮效果的实现

  • 进入一个无限循环,模拟爱心漂浮的过程。
  • tu.tracer(0) 禁用画布的自动刷新,以提高性能,避免每次绘制都更新屏幕。
  • t.clear() 清除当前的绘图,准备进行下一次绘制。
  • 使用 for i in range(50) 来控制当前绘制 50 个爱心对象。
    • Hearts[i].move() 调用每个爱心的 move 方法,使爱心根据随机属性移动。
    • Hearts[i].draw() 绘制爱心。
  • tu.update() 刷新画布,显示更新后的图形。

11. 总结

这段代码通过定义 Heart 类,结合随机生成的属性和移动机制,使用 turtle 库绘制了一个动态的爱心飘浮效果。每个爱心都有随机的颜色、速度、位置和运动轨迹,模拟了爱心在画布上自由飘浮的效果。这种设计方法不仅实现了动态效果,还通过面向对象的设计,使得代码结构清晰易于扩展。

写在后面

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

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

3、做中学 | 二年级上期 Golang数据类型和常量/变量声明使用

一、基本数据类型 在 Go 编程语言中&#xff0c;数据类型用于声明函数和变量。 数据类型的出现是为了把数据分成所需内存大小不同的数据&#xff0c;编程的时候需要用大数据的时候才需要申请大内存&#xff0c;就可以充分利用内存。 Go 基本数据类型 类别类型描述零值示例取…

php5 与 mysql8的兼容问题

php5 与 mysql8的兼容问题 环境 Linux: ubuntu20.04 Mysql&#xff1a; 8.0.33 Php: 5.6 代码 # cat test.php <?php$link mysqli_connect("127.0.0.1", "root", "123456");if ($link) {echo "ok"; } else {echo "fail&…

从0开始学linux韦东山教程Linux驱动入门实验班(1)

本人从0开始学习linux&#xff0c;使用的是韦东山的教程&#xff0c;在跟着课程学习的情况下的所遇到的问题的总结,理论虽枯燥但是是基础。本人将前几章的内容大致学完之后&#xff0c;考虑到后续驱动方面得更多的开始实操&#xff0c;后续的内容将以韦东山教程Linux驱动入门实…

MSPM0G3507学习笔记(二) 超便捷配置led与按键

电赛备赛中&#xff0c;打算系统过一遍MSPM0G3507的各个部分&#xff0c;同时把过程记录下来。本系列以代码全部能用复用性、可移植性高为目的。本系列所有的代码会开源至github&#xff0c;如果觉得有用&#xff0c;请点个赞/给我的github仓库点一颗star吧。 github地址&…

day03-微服务01

【黑马程序员SpringCloud微服务技术栈实战教程&#xff0c;涵盖springcloud微服务架构Nacos配置中心分布式事务等】 暂时无法在飞书文档外展示此内容 之前我们学习的项目一是单体项目&#xff0c;可以满足小型项目或传统项目的开发。而在互联网时代&#xff0c;越来越多的一线…

嵌入式Linux系统内存占用率高的原因、后果与防控全解析

作者&#xff1a;嵌入式Jerry 【欢迎关注“嵌入式Jerry”&#xff0c;获取更多Linux/驱动/性能实战干货】 推荐阅读&#xff1a;《Yocto项目实战教程&#xff1a;高效定制嵌入式Linux系统》 京东正版促销&#xff0c;支持作者&#xff01;https://item.jd.com/15020438.html 嵌…

【案例分享】如何用 DHTMLX Scheduler 构建灵活高效的资源调度系统?

在企业信息化进程加速的今天&#xff0c;资源调度与任务管理已成为ERP系统中的关键模块。今天&#xff0c;我们带来了一个来自 X-Interactive 的精彩应用案例&#xff0c;看他们如何借助 DHTMLX Scheduler 实现更智能的任务分配与资源规划。 DHTMLX Scheduler 试用下载 &…

Kafka 向 TDengine 写入数据

TDengine Kafka Connector 包含 TDengine Source Connector 和 TDengine Sink Connector 两个插件。用户只需提供简单的配置文件&#xff0c;就可以将 Kafka 中指定 topic 的数据&#xff08;批量或实时&#xff09;同步到 TDengine&#xff0c;或将 TDengine 中指定数据库的数…

智慧医院核心引擎:IBMS 系统守护医疗环境高效与安全​

在医疗场景中&#xff0c;时间就是生命&#xff0c;效率与安全容不得分毫差错。传统医院面临着设备管理分散、应急响应迟缓、能耗居高不下等难题&#xff0c;严重制约医疗服务质量与运营效率。而 IBMS 系统&#xff0c;作为智慧医院的核心引擎&#xff0c;以尖端科技重塑医疗环…

平均性能提升70%,盖雅工场基于腾讯云数据仓库TCHouse-D构建实时报表平台

点击蓝字⬆ 关注我们 本文共计3569字 预计阅读时长11分钟 导语 腾讯云数据仓库TCHouse-D助力盖雅工场构建了架构简洁、查询高效的报表平台。目前该平台已经支撑了盖雅工场上千个租户的实时报表需求&#xff0c;报表查询时效性整体可达亚秒级&#xff0c;相较原架构&#xff0c;…

zynq裸机开发:更改系统时间保存文件到SD卡

1、首先勾选文件系统库 2、之后导出一个SD卡文件写demo 3、SD卡创建或修改文件时的创建时间和修改时间是通过调用BSP包的diskio.c文件中的get_fattime函数 4、找到这段函数&#xff0c;先把他注释掉&#xff0c;之后考到导出demo的最后一行&#xff0c;稍作修改&#xff0c…

“荔枝使”的难题怎么破:A*运输路径算法编程实践

原文首发请访问&#xff1a;https://cloud.tencent.com/developer/article/2533317 荔枝最初被称为“离支”&#xff0c;亦作“离枝”。 这是一种非常精贵的水果&#xff0c;一旦离开枝头&#xff0c;色泽、香气和味道会在短时间内迅速变质。 但它又是非常美味&#xff0c;宋…

python基础知识,以及7个练习案例

python的用途 搭建网站网络爬虫科学计算与大数据分析人工智能与机器学习设计动画游戏&#xff1a;例如pygame图形用户接口开发&#xff1a;模块与框架&#xff0c;如tkinter python基础课程包含内容 自动化运维人工智能应用web开发多媒体处理自动化办公python爬虫 python是…

Java 编程之命令模式

什么是命令模式 命令模式Command Pattern 是一种行为型设计模式&#xff0c;它把请求封装成对象&#xff0c;从而将请求的发送者与执行者完全解耦&#xff0c;支持排队、撤销、日志记录等操作。。 模式目标&#xff1a; 解耦命令的发出者&#xff08;Invoker&#xff09;与执…

TCP 三次握手与四次挥手全流程详解

TCP(Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层协议。为了建立和终止连接,TCP 使用了 三次握手 和 四次挥手 的机制。本文将从原理到状态变化,详细解析 TCP 连接的建立与释放全过程,力求专业、准确。 一、TCP 三次握手(Three-Way Han…

MySQL 慢 SQL 识别与优化

一、识别慢 SQL 1. 启用慢查询日志 -- 查看当前慢查询配置 SHOW VARIABLES LIKE slow_query%; SHOW VARIABLES LIKE long_query_time;-- 开启慢查询日志&#xff08;临时生效&#xff09; SET GLOBAL slow_query_log ON; SET GLOBAL long_query_time 2; -- 设置慢查询阈值…

墨记APP:水墨风记事,书写生活诗意

在快节奏的现代生活中&#xff0c;记录生活的点滴成为了一种独特的仪式感。无论是日常的琐事、突发的灵感&#xff0c;还是对未来的规划&#xff0c;一款好用的记事软件都能帮助我们更好地整理思绪&#xff0c;留住美好瞬间。墨记APP正是一款兼具美学与实用性的记事软件&#x…

龙芯7A1000桥片数据手册解读(时序)

RTC是电池&#xff0c;理论上一直是有电的&#xff0c;图示指的是接上220V电之后切换为系统的电。顺序是这样的&#xff1a;接上220V电之后系统的12V供电就有了&#xff0c;12V转为5VSB&#xff0c;5VSB供给RTC3V&#xff0c;此时RTC3V转为系统供电而不是电池供电。这里的5VSB指…

无人机气压计模块技术解析

一、运行方式 1. 基础原理 气压计通过测量大气压力间接计算高度。无人机飞行中&#xff0c;气压随高度上升而降低&#xff0c;传感器将压力信号转为电信号&#xff0c;经ADC转换为数字值。 2. 工作流程 数据采集&#xff1a;同步获取压力与温度值。 原始数据处理&…

第十四节:第三部分:IO流:前置知识-什么是方法递归以及递归的形式、递归算法三要素

什么是方法递归以及递归的形式 递归算法三要素 代码 代码一&#xff1a;认识一下递归的形式 package com.itheima.Recurtion; //目标:认识一下递归的形式 public class RecurtionTest1 {public static void main(String[] args) {test2();}//直接方法递归public static void…