網站首頁 編程語言 正文
引言:
本文是學習Turtle庫時,發現兩種方法都能改變畫筆的方向,但二者又不是完全相同,故對其加以辨析總結到此,在本文你將收獲:
1.兩種改變畫筆方向的方法
2.矩形的繪制,等邊三角形的繪制
3.兩種方法的辨析?
使用left right改變畫筆方向
默認畫筆的方向是向右,使用以下代碼就能發現
import turtle turtle.forward(100) turtle.mainloop()
要是我們想改變方向呢?
turtle.
left
(angle)
turtle.
lt
(angle)
turtle.
right
(angle)
turtle.
rt
(angle)在turtle庫中提供了簡寫的方法 幾乎每種方法都有更簡單的等效寫法
在上面的兩個方法中,傳入的參數是整數和浮點數
單位默認為角度但可以通過degrees()?和?radians()?函數改變設置
import turtle turtle.forward(100) turtle.left(90) turtle.forward(100) turtle.left(90) turtle.forward(100) turtle.left(90) turtle.forward(100) turtle.mainloop()
?更簡單的寫法
from turtle import * for i in range(4): fd(100) lt(90) mainloop()
使用setheading改變畫筆方向
?依舊使用官方文檔
turtle.
setheading
(to_angle)
turtle.
seth
(to_angle)to_angle是要到的那個角度,與angle一樣傳入整數或者浮點數,使用seth或者setheading相當于在坐標系操作,角度是固定的
? 后面會詳細講解
如果我們把left改為Sethheading 結果會是怎樣的呢?
from turtle import * for i in range(4): fd(100) seth(90) mainloop()
?最終變成了這樣?
就兩種結果的比較來看。Setheading繪制的矩形的時候,本應該讓他轉彎的命令讓他停到了原地.
這是為什么呢?讓我們再回到官方文檔:
在setheading修改方向時,每一個角度是一個確切的方向,90度就是以畫筆位置為坐標原點的北方,還記得傳入的參數名字是什么嗎?to_angle == 要到達的角度? 在我們用sethading畫矩形的例子中,每一次循環都是將烏龜指向北方前進100,所以才出現了意想不到結果。
?二者的區別到底是什么呢?
如果一定要我舉一個生活中的例子,我想指南針(sethheading)和我們集合時的向左(left)向右(right)轉能在一定程度上說明他們的區別
向左向右轉參考的是我們本身的位置,指南針指向的是永遠不變的南方
指南針的南方是根據磁場劃分的,setheading的南方是根據角度劃分的
向右轉是根據我們的右邊和左邊轉的,left/right是根據我們的畫筆(箭頭)的左右劃分的
?如果你不喜歡這種不是很嚴謹的類比,那讓我們從更為嚴謹的角度去探討一下這個問題
????????setheading是以畫筆位置為坐標原點,建立直角坐標系
????????left是以畫筆位置為原點建立極坐標系
三角實例
讓我們從實例出發了解一下這個問題:繪制一個三角形
畫一個三角形可以有很多種方法,如果我們想通過這個例子探討兩個改變方法的異同,我們需要做的是讓變量相對來說更少:
1.我們的起點要相同
2.我們繪制的流程要相同
3.我們使用的不同之處應該只有改變方向時使用的方法
繪制流程:
1.從默認原點前進100
2.朝左方旋轉前進100
3.朝左下旋轉前進100
代碼如下:
from turtle import * //第一種方法 fd(100) left(120) fd(100) left(120) fd(100) //第二種方法 fd(100) setheading(120) fd(100) setheading(240) fd(100)
?第一種方法在頂點位置時旋轉角度
第二種方法在頂點旋轉角度
總結?
原文鏈接:https://blog.csdn.net/m0_62947851/article/details/122741408
相關推薦
- 2022-12-11 Git的代碼合入流程詳解_相關技巧
- 2023-02-26 Go實現簡單的數據庫表轉結構體詳解_Golang
- 2022-04-20 在Python反編譯中批量pyc轉?py的實現代碼_python
- 2022-10-30 淺析pytest?鉤子函數?之初始鉤子和引導鉤子_python
- 2023-05-30 Pandas.DataFrame的行名和列名的修改_python
- 2022-11-26 詳解Python中的with語句和上下文管理器_python
- 2023-12-18 Jedis和springboot集成redis
- 2022-05-25 version `GLIBC_2.18‘ not found
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支