Python漂浮的愛心

漂浮的愛心

系列文章

序號直達鏈接
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…