python與分形0006 - 【教程】旋轉(zhuǎn)的直線

2021年11月2日,中的新股上市了,具體是哪個我就不說了。

好不容易上市了,卻趕上了破發(fā)潮,都是-10,-20的大面,本來之前歡歡喜喜的想著可能撈個萬兒八千的,現(xiàn)在卻像是被人搶了一般。

昨天晚上看了好幾遍公司的業(yè)務(wù),想著怎么辦?萬一破發(fā)就拿著,盡管PE有50多,公司的主營看著似乎還行,做的還算是正經(jīng)事。

早上開始瞄了一眼,競價前半段竟然漲了10個點,有點戲。

結(jié)果后半段,又直直往下降,跌了10多個點,心有點涼了,這破發(fā)是板上釘釘了。

開盤沒多久,竟然抖抖的往上漲了,快回本了趕緊掛單賣了,賣完沒多久就突突往下跌,哈哈,還算掙了個雞腿。

沒想到過了十點,瞄了下盤面,竟然又突突往上漲,直接干漲停了,呵呵呵,苦笑三聲。

下午三點多,又去瞄了一眼,還是破發(fā)的狀態(tài),呵呵呵,又是苦笑三聲。

中了個新股,中了個寂寞,沒虧錢竟然還有點開心。

20211102

言歸正傳,回到我們的分形教程,我們用的是python的turtle模塊,安裝了python就自帶了這個模塊。

大家打開python自帶的IDE按F1幫助搜索turtle就可以查到幫助文檔。

Turtle graphics is a popular way for introducing programming to kids. It was part of the original Logo programming language developed by Wally Feurzeig, Seymour Papert and Cynthia Solomon in 1967.

...

這本來是幫助小朋友學習編程的一個工具,后來被移植到python中,其基本思路就是模擬一個小烏龜在走路,從而繪制成各種圖形。

網(wǎng)上有用turtle畫各種奇怪圖形的網(wǎng)友,大家可以去看看。

尤其是它還包含極坐標,那么就可以做出各種高難度酷炫的動作以及五彩繽紛的色彩。

我大致的數(shù)了下turtle模塊包含的API,差不多100個函數(shù),常用的也就20個不到;只要會編程,上手就是4.9分鐘的事情。

今天我們的教程是一個旋轉(zhuǎn)的直線,它的結(jié)果如下所示:

旋轉(zhuǎn)的直線

這個圖形看起來比較簡單,但是它跟漢字里面的“永”一樣,包含了turtle繪圖所需的全部元素:配置,基本圖形,色彩和動畫。

配置

配置指turtle畫布的配置,包括用多大的畫布,什么背景色,用什么坐標系等等,一般我常用下面這幾個函數(shù)。

隱藏小烏龜畫筆,那個小箭頭看起來挺煩的:

turtle.hideturtle()
turtle.ht()

設(shè)置桌布的背景色,我一般喜歡用黑色(turtle.bgcolor("black")):

turtle.bgcolor(*args)

修改繪圖的速度,如果想要圖形立馬呈現(xiàn)顯示最終結(jié)果,我用 turtle.tracer(0, 0)

turtle.tracer(n=None,?delay=None)

設(shè)置桌布窗口的大小,用setup函數(shù),寬width和height我一般用百分比,1.0表示全屏,startx和starty一般用None,表示居中:

turtle.setup(width=_CFG["width"],?height=_CFG["height"],?startx=_CFG["leftright"],?starty=_CFG["topbottom"])

turtle.setup(width=1.0,?height=1.0,?startx=None,?starty=None)

基本圖形和色彩

我們要做啥事呢?畫一條帶顏色的直線。

當我們要畫一條直線時,我們怎么做?

  • prepare:選擇合適粗細,顏色的筆。
  • step 1:下筆。
  • step 2:往某個方向移動筆。
  • step 3:達到需要的長度時停筆。
  • step 4:起筆。

在程序里面怎么做?請您一一對應(yīng)上面的。

  • prepare:turtle.pensize(3) turtle.pencolor('red')
  • step 1:turtle.pendown()
  • step 2:turtle.seth(angle)
  • step 3:turtle.forward(length)
  • step 4:turtle.penup()

代碼說明:

函數(shù) 說明
turtle.pensize 畫筆粗細
turtle.pencolor 畫筆顏色
turtle.pendown 下筆
turtle.penup 起筆
turtle.setheading,turtle.seth 設(shè)置畫筆角度
turtle.forward,turtle.fd 往前移動一段距離

整合成代碼,就是:

def?draw_line(length,?angle):
????turtle.pensize(3)
????turtle.pencolor('red')
????turtle.pendown()
????turtle.seth(angle)
????turtle.fd(length)
????turtle.penup()

動畫

動畫的基本原理就是以超過人眼可以分辨的頻率播放圖片,對吧。

我們怎么讓直線動起來。

  • step 1:清屏。
  • step 2:畫一條直線。
  • step 3:刷新界面。
  • step 4:等待X秒(1/X就是刷新頻率)。
  • step 5:重復(fù)step 1,2,3,4。

是不是很簡單。

so easy

代碼怎么做?

  • step 1:turtle.clear() turtle.goto(0, 0)
  • step 2:draw_line(400, angle)
  • step 3:turtle.update()
  • step 4:time.sleep(0.05)
  • step 5:while for

代碼說明:

函數(shù) 說明
turtle.clear 清除屏幕
turtle.goto(0, 0) 回到原點
turtle.update 在tracer關(guān)閉時,刷新圖像
time.sleep() 等待

是不是超簡單,把上面代碼整合一把就可以畫出一條旋轉(zhuǎn)的直線了。

#?coding:?utf-8

import?turtle
import?time

turtle.setup(width=1.0,?height=1.0,?startx=None,?starty=None)
turtle.ht()
turtle.tracer(0,?0)
turtle.bgcolor("black")

def?draw_line(length,?angle):
????turtle.pensize(3)
????turtle.pencolor('red')
????turtle.pendown()
????turtle.seth(angle)
????turtle.fd(length)
????turtle.penup()
????
for?angle?in?range(3600):
????turtle.clear()
????turtle.goto(0,?0)
????draw_line(400,?angle)
????turtle.update()
????time.sleep(0.05)

進階

在turtle的函數(shù)中,有一個定時器回調(diào)函數(shù),它在手冊中是這樣描述的:

turtle.ontimer(fun, t=0)

Install a timer that calls fun after t milliseconds.

那么,我們可以在我們的畫圖函數(shù)中調(diào)用這個函數(shù),并且遞歸這個畫圖函數(shù),就可以制造無限循環(huán)了。

我們把上面的函數(shù)做一下簡單的改造:

#?coding:?utf-8

import?turtle
import?time
import?math

turtle.setup(width=1.0,?height=1.0,?startx=None,?starty=None)
turtle.ht()
turtle.tracer(0,?0)
turtle.bgcolor("black")

angle=1
length=400

def?draw_line():
????global?angle
????turtle.clear()
????turtle.goto(0,?0)
????turtle.pensize(3)
????turtle.pencolor('red')
????turtle.pendown()
????turtle.fd(length)
????turtle.seth(angle)
????angle?+=?1
????if?angle?>?360:
????????angle?=?0
????turtle.penup()
????turtle.ontimer(draw_line,?50)
????
draw_line()

到此,一條帶顏色可旋轉(zhuǎn)的直線就做好了,是不是超級簡單。

有了這個基礎(chǔ),我們就可以做一些變化,比如旋轉(zhuǎn)的彩色圓盤,旋轉(zhuǎn)的太極等等,我們后面再做。

--EOF--

例行求粉,謝謝!

求粉

本文使用 文章同步助手 同步

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容