最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

一篇帶你實戰(zhàn)的Python繪圖Turtle庫

2021-04-02 16:30 作者:薇薇說UG  | 我要投稿

Turtle庫是Python語言中一個很流行的繪制圖像的函數(shù)庫,想象一個小烏龜,在一個橫軸為x、縱軸為y的坐標(biāo)系原點,(0,0)位置開始,它根據(jù)一組函數(shù)指令的控制,在這個平面坐標(biāo)系中移動,從而在它爬行的路徑上繪制了圖形。

turtle繪圖的基礎(chǔ)知識:

1. 畫布(canvas)

畫布就是turtle為我們展開用于繪圖區(qū)域,我們可以設(shè)置它的大小和初始位置。

? ? ? ? 設(shè)置畫布大小

? ? ? ? ?turtle.screensize(canvwidth=None, canvheight=None, bg=None),參數(shù)分別為畫布的寬(單位像素), 高, 背景顏色。

? ? ? ? 如:turtle.screensize(800,600, "green")

? ? ? ? ? ? ? ?turtle.screensize() #返回默認(rèn)大小(400, 300)

? ? ? ? turtle.setup(width=0.5, height=0.75, startx=None, starty=None),參數(shù):width, height: 輸入寬和高為整數(shù)時, 表示像素; 為小數(shù)時, 表示占據(jù)電腦屏幕的比例,(startx, starty): 這一坐標(biāo)表示矩形窗口左上角頂點的位置, 如果為空,則窗口位于屏幕中心。

? ? ? ? 如:turtle.setup(width=0.6,height=0.6)

? ? ? ? ? ? ? ?turtle.setup(width=800,height=800, startx=100, starty=100)

2. 畫筆

2.1 畫筆的狀態(tài)

? 在畫布上,默認(rèn)有一個坐標(biāo)原點為畫布中心的坐標(biāo)軸,坐標(biāo)原點上有一只面朝x軸正方向小烏龜。這里我們描述小烏龜時使用了兩個詞語:坐標(biāo)原點(位置),面朝x軸正方向(方向), turtle繪圖中,就是使用位置方向描述小烏龜(畫筆)的狀態(tài)。

2.2 畫筆的屬性

?畫筆(畫筆的屬性,顏色、畫線的寬度等)

? ? ? ? 1) turtle.pensize():設(shè)置畫筆的寬度;

? ? ? ? 2) turtle.pencolor():沒有參數(shù)傳入,返回當(dāng)前畫筆顏色,傳入?yún)?shù)設(shè)置畫筆顏色,可以是字符串如"green", "red",也可以是RGB 3元組。

? ? ? ? 3) turtle.speed(speed):設(shè)置畫筆移動速度,畫筆繪制的速度范圍[0,10]整數(shù),數(shù)字越大越快。

2.3 繪圖命令

操縱海龜繪圖有著許多的命令,這些命令可以劃分為3種:一種為運(yùn)動命令,一種為畫筆控制命令,還有一種是全局控制命令。

(1)????畫筆運(yùn)動命令

(2)???? 畫筆控制命令


(3)????全局控制命令


(4)????其他命令


3. 命令詳解

? ? ? ? 3.1 turtle.circle(radius, extent=None, steps=None)

? ? ? ? 描述:以給定半徑畫圓

? ? ? ? 參數(shù):

? ? ? ? radius(半徑):半徑為正(負(fù)),表示圓心在畫筆的左邊(右邊)畫圓;

? ? ? ? extent(弧度) (optional);

? ? ? ? steps (optional) (做半徑為radius的圓的內(nèi)切正多邊形,多邊形邊數(shù)為steps)。

舉例:

circle(50) # 整圓;

circle(50,steps=3) # 三角形;

circle(120, 180) # 半圓

?

實例:

1、太陽花

2、五角星


3、時鐘程序

# coding=utf-8

?

import turtle

from datetime import *

?

# 抬起畫筆,向前運(yùn)動一段距離放下

def Skip(step):

? ? turtle.penup()

? ? turtle.forward(step)

? ? turtle.pendown()

?

def mkHand(name, length):

? ? # 注冊Turtle形狀,建立表針Turtle

? ? turtle.reset()

? ? Skip(-length * 0.1)

? ? # 開始記錄多邊形的頂點。當(dāng)前的烏龜位置是多邊形的第一個頂點。

? ? turtle.begin_poly()

? ? turtle.forward(length * 1.1)

? ? # 停止記錄多邊形的頂點。當(dāng)前的烏龜位置是多邊形的最后一個頂點。將與第一個頂點相連。

? ? turtle.end_poly()

? ? # 返回最后記錄的多邊形。

? ? handForm = turtle.get_poly()

? ? turtle.register_shape(name, handForm)

?

def Init():

? ? global secHand, minHand, hurHand, printer

? ? # 重置Turtle指向北

? ? turtle.mode("logo")

? ? # 建立三個表針Turtle并初始化

? ? mkHand("secHand", 135)

? ? mkHand("minHand", 125)

? ? mkHand("hurHand", 90)

? ? secHand = turtle.Turtle()

? ? secHand.shape("secHand")

? ? minHand = turtle.Turtle()

? ? minHand.shape("minHand")

? ? hurHand = turtle.Turtle()

? ? hurHand.shape("hurHand")

? ?

? ? for hand in secHand, minHand, hurHand:

? ? ? ? hand.shapesize(1, 1, 3)

? ? ? ? hand.speed(0)

? ?

? ? # 建立輸出文字Turtle

? ? printer = turtle.Turtle()

? ? # 隱藏畫筆的turtle形狀

? ? printer.hideturtle()

? ? printer.penup()

? ??

def SetupClock(radius):

? ? # 建立表的外框

? ? turtle.reset()

? ? turtle.pensize(7)

? ? for i in range(60):

? ? ? ? Skip(radius)

? ? ? ? if i % 5 == 0:

? ? ? ? ? ? turtle.forward(20)

? ? ? ? ? ? Skip(-radius - 20)

? ? ? ? ? ?

? ? ? ? ? ? Skip(radius + 20)

? ? ? ? ? ? if i == 0:

? ? ? ? ? ? ? ? turtle.write(int(12), align="center", font=("Courier", 14, "bold"))

? ? ? ? ? ? elif i == 30:

? ? ? ? ? ? ? ? Skip(25)

? ? ? ? ? ? ? ? turtle.write(int(i/5), align="center", font=("Courier", 14, "bold"))

? ? ? ? ? ? ? ? Skip(-25)

? ? ? ? ? ? elif (i == 25 or i == 35):

? ? ? ? ? ? ? ? Skip(20)

? ? ? ? ? ? ? ? turtle.write(int(i/5), align="center", font=("Courier", 14, "bold"))

? ? ? ? ? ? ? ? Skip(-20)

? ? ? ? ? ? else:

? ? ? ? ? ? ? ? turtle.write(int(i/5), align="center", font=("Courier", 14, "bold"))

? ? ? ? ? ? Skip(-radius - 20)

? ? ? ? else:

? ? ? ? ? ? turtle.dot(5)

? ? ? ? ? ? Skip(-radius)

? ? ? ? turtle.right(6)

? ? ? ??

def Week(t):? ?

? ? week = ["星期一", "星期二", "星期三",

? ? ? ? ? ? "星期四", "星期五", "星期六", "星期日"]

? ? return week[t.weekday()]

?

def Date(t):

? ? y = t.year

? ? m = t.month

? ? d = t.day

? ? return "%s %d%d" % (y, m, d)

?

def Tick():

? ? # 繪制表針的動態(tài)顯示

? ? t = datetime.today()

? ? second = t.second + t.microsecond * 0.000001

? ? minute = t.minute + second / 60.0

? ? hour = t.hour + minute / 60.0

? ? secHand.setheading(6 * second)

? ? minHand.setheading(6 * minute)

? ? hurHand.setheading(30 * hour)

? ??

? ? turtle.tracer(False)?

? ? printer.forward(65)

? ? printer.write(Week(t), align="center",

? ? ? ? ? ? ? ? ? font=("Courier", 14, "bold"))

? ? printer.back(130)

? ? printer.write(Date(t), align="center",

? ? ? ? ? ? ? ? ? font=("Courier", 14, "bold"))

? ? printer.home()

? ? turtle.tracer(True)

?

? ? # 100ms后繼續(xù)調(diào)用tick

? ? turtle.ontimer(Tick, 100)

?

def main():

? ? # 打開/關(guān)閉龜動畫,并為更新圖紙設(shè)置延遲。

? ? turtle.tracer(False)

? ? Init()

? ? SetupClock(160)

? ? turtle.tracer(True)

? ? Tick()

? ? turtle.mainloop()

?

if __name__ == "__main__":

? ? main()


一篇帶你實戰(zhàn)的Python繪圖Turtle庫的評論 (共 條)

分享到微博請遵守國家法律
增城市| 武邑县| 青河县| 广元市| 额敏县| 武义县| 五家渠市| 永嘉县| 桂林市| 绍兴县| 呼图壁县| 玉环县| 太谷县| 汝阳县| 长顺县| 明光市| 大邑县| 文水县| 尤溪县| 乌恰县| 建昌县| 贵德县| 云安县| 镇宁| 铁力市| 裕民县| 临泽县| 水富县| 竹北市| 郑州市| 三穗县| 巴塘县| 新安县| 周宁县| 无为县| 驻马店市| 宝山区| 讷河市| 临汾市| 湟中县| 财经|