通過(guò)Python繪制中國(guó)結(jié)的示例代碼
1 中國(guó)結(jié)的組成部分
中國(guó)結(jié)是一種手工編織工藝品,它身上所顯示的情致與智慧正是漢族古老文明中的一個(gè)側(cè)面。因?yàn)槠渫庥^對(duì)稱(chēng)精致,可以代表漢族悠久的歷史,符合中國(guó)傳統(tǒng)裝飾的習(xí)俗和審美觀念,故命名為中國(guó)結(jié)。中國(guó)結(jié)代表著團(tuán)結(jié)幸福平安,特別是在民間,它精致的做工深受大眾的喜愛(ài)。其主要組成部分如下圖所示。
2 設(shè)計(jì)中國(guó)結(jié)對(duì)象
基于Python Turtle庫(kù)實(shí)現(xiàn)繪制,首先設(shè)計(jì)一個(gè)中國(guó)結(jié)對(duì)象,畫(huà)筆顏色就選擇中國(guó)紅。再定義一個(gè)__goto()函數(shù)封裝turtle庫(kù)對(duì)畫(huà)筆移動(dòng)的操作。
import turtle as t class chineseKnot: ? ''' ? * @breif: 中國(guó)結(jié) ? ''' ? ? def __init__(self) -> None: ? ? # 畫(huà)筆初始化 ? ? self.t = t ? ? self.t.pensize(10) ? ? self.t.setup(700, 700) ? ? self.t.pencolor("red") ? ? self.t.speed(14) ? ? # 結(jié)心坐標(biāo) ? ? self.x = 0 ? ? self.y = 200 ? ?? ? ''' ? * @breif: 畫(huà)筆移動(dòng)到指定位置 ? * @param[in]: x -> 畫(huà)筆移動(dòng)位置橫坐標(biāo) ? * @param[in]: y -> 畫(huà)筆移動(dòng)位置縱坐標(biāo) ? * @retval: None ? ''' ? ? def __goto(self, x: int, y: int) -> None: ? ? self.t.penup() ? ? self.t.goto(x,y) ? ? self.t.pendown()
3 繪制結(jié)體
def drawBody(self) -> None: for i in range(11): self.__goto(self.x - i * 10 * sqrt(2), self.y - i * 10 * sqrt(2)) self.t.seth(-45) self.t.fd(200) self.__goto(self.x + i * 10 * sqrt(2), self.y - i * 10 * sqrt(2)) self.t.seth(-135) self.t.fd(200)
4 繪制耳翼
def drawEdge(self) -> None: ? ? for i in range(4): ? ? ? # 左上角 ? ? ? self.__goto(-10 * sqrt(2) - i * 20 * sqrt(2), ? ? ? ? ? ? ? ? ? 200 - 10 * sqrt(2) - i * 20 * sqrt(2)) ? ? ? self.t.seth(135) ? ? ? self.t.fd(20) ? ? ? self.t.circle(10, 180) ? ? ? self.t.fd(20) ? ? ? # 右上角 ? ? ? self.__goto(10 * sqrt(2) + i * 20 * sqrt(2), ? ? ? ? ? ? ? ? ? 200 - 10 * sqrt(2) - i * 20 * sqrt(2)) ? ? ? self.t.seth(45) ? ? ? self.t.fd(20) ? ? ? self.t.circle(-10, 180) ? ? ? self.t.fd(20) ? ? ? # 左下角 ? ? ? self.__goto(-10 * sqrt(2) - i * 20 * sqrt(2), ? ? ? ? ? ? ? ? ? 200 - 190 * sqrt(2) + i * 20 * sqrt(2)) ? ? ? self.t.seth(-135) ? ? ? self.t.fd(20) ? ? ? self.t.circle(-10, 180) ? ? ? self.t.fd(20) ? ? ? ? ? ? ? # 右下角 ? ? ? self.__goto(10 * sqrt(2) + i * 20 * sqrt(2), ? ? ? ? ? ? ? ? ? 200 - 190 * sqrt(2) + i * 20 * sqrt(2)) ? ? ? self.t.seth(-45) ? ? ? self.t.fd(20) ? ? ? self.t.circle(10, 180) ? ? ? self.t.fd(20) ? ? # 左側(cè) ? ? self.t.seth(-45) ? ? self.__goto(90 * sqrt(2), 200 - 110 * sqrt(2)) ? ? ? self.t.circle(20,270) ? ? self.__goto(-90 * sqrt(2), 200 - 110 * sqrt(2)) ? ? self.t.circle(-20,270) ? ?? ? ? # 右側(cè) ? ? self.__goto(80 * sqrt(2), 200 - 120 * sqrt(2)) ? ? self.t.circle(40,270) ? ? self.__goto(-80 * sqrt(2), 200 - 120 * sqrt(2)) ? ? self.t.circle(-40,270)
5 繪制掛耳和流蘇
def drawAdorn(self): ? ? # 上側(cè) ? ? self.__goto(self.x, self.y) ? ? self.t.pensize(14) ? ? self.t.seth(90) ? ? self.t.fd(60) ? ? self.__goto(0,320) ? ? self.t.seth(180) ? ? self.t.circle(30,360) ? ? # 下側(cè) ? ? self.__goto(0,200 - 200 * sqrt(2)) ? ? self.t.pensize(40) ? ? self.t.seth(-90) ? ? self.t.fd(20) ? ? self.t.pensize(2) ? ? for i in range(11): ? ? ? ? self.__goto(-20 + 4 * i, 200 - 200 * sqrt(2)) ? ? ? ? self.t.seth(-90) ? ? ? ? self.t.fd(200)
6 完整代碼,一鍵運(yùn)行
import turtle as t from math import sqrt class chineseKnot: ? ''' ? * @breif: 中國(guó)結(jié) ? ''' ? ? def __init__(self) -> None: ? ? # 畫(huà)筆初始化 ? ? self.t = t ? ? self.t.pensize(10) ? ? self.t.setup(700, 700) ? ? self.t.pencolor("red") ? ? self.t.speed(14) ? ? # 結(jié)心坐標(biāo) ? ? self.x = 0 ? ? self.y = 200 ? ''' ? * @breif: 畫(huà)中國(guó)結(jié) ? * @param[in]: None ? * @retval: None ? ''' ? def drawKnot(self) -> None: ? ? self.drawBody() ? ? self.drawEdge() ? ? self.drawAdorn() ? ? self.t.hideturtle() ? ? self.t.done() ? ''' ? * @breif: 畫(huà)中國(guó)結(jié)主體部分 ? * @param[in]: None ? * @retval: None ? ''' ? def drawBody(self) -> None: ? ? for i in range(11): ? ? ? ? self.__goto(self.x - i * 10 * sqrt(2), self.y - i * 10 * sqrt(2)) ? ? ? ? self.t.seth(-45) ? ? ? ? self.t.fd(200) ? ? ? ? self.__goto(self.x + i * 10 * sqrt(2), self.y - i * 10 * sqrt(2)) ? ? ? ? self.t.seth(-135) ? ? ? ? self.t.fd(200) ? ''' ? * @breif: 畫(huà)中國(guó)結(jié)邊緣部分 ? * @param[in]: None ? * @retval: None ? ''' ? ? ?? ? def drawEdge(self) -> None: ? ? for i in range(4): ? ? ? # 左上角 ? ? ? self.__goto(-10 * sqrt(2) - i * 20 * sqrt(2), ? ? ? ? ? ? ? ? ? 200 - 10 * sqrt(2) - i * 20 * sqrt(2)) ? ? ? self.t.seth(135) ? ? ? self.t.fd(20) ? ? ? self.t.circle(10, 180) ? ? ? self.t.fd(20) ? ? ? # 右上角 ? ? ? self.__goto(10 * sqrt(2) + i * 20 * sqrt(2), ? ? ? ? ? ? ? ? ? 200 - 10 * sqrt(2) - i * 20 * sqrt(2)) ? ? ? self.t.seth(45) ? ? ? self.t.fd(20) ? ? ? self.t.circle(-10, 180) ? ? ? self.t.fd(20) ? ? ? # 左下角 ? ? ? self.__goto(-10 * sqrt(2) - i * 20 * sqrt(2), ? ? ? ? ? ? ? ? ? 200 - 190 * sqrt(2) + i * 20 * sqrt(2)) ? ? ? self.t.seth(-135) ? ? ? self.t.fd(20) ? ? ? self.t.circle(-10, 180) ? ? ? self.t.fd(20) ? ? ? ? ? ? ? # 右下角 ? ? ? self.__goto(10 * sqrt(2) + i * 20 * sqrt(2), ? ? ? ? ? ? ? ? ? 200 - 190 * sqrt(2) + i * 20 * sqrt(2)) ? ? ? self.t.seth(-45) ? ? ? self.t.fd(20) ? ? ? self.t.circle(10, 180) ? ? ? self.t.fd(20) ? ? # 左側(cè) ? ? self.t.seth(-45) ? ? self.__goto(90 * sqrt(2), 200 - 110 * sqrt(2)) ? ? ? self.t.circle(20,270) ? ? self.__goto(-90 * sqrt(2), 200 - 110 * sqrt(2)) ? ? self.t.circle(-20,270) ? ?? ? ? # 右側(cè) ? ? self.__goto(80 * sqrt(2), 200 - 120 * sqrt(2)) ? ? self.t.circle(40,270) ? ? self.__goto(-80 * sqrt(2), 200 - 120 * sqrt(2)) ? ? self.t.circle(-40,270) ? ''' ? * @breif: 畫(huà)中國(guó)結(jié)裝飾部分 ? * @param[in]: None ? * @retval: None ? ''' ? ? def drawAdorn(self): ? ? # 上側(cè) ? ? self.__goto(self.x, self.y) ? ? self.t.pensize(14) ? ? self.t.seth(90) ? ? self.t.fd(60) ? ? self.__goto(0,320) ? ? self.t.seth(180) ? ? self.t.circle(30,360) ? ? # 下側(cè) ? ? self.__goto(0,200 - 200 * sqrt(2)) ? ? self.t.pensize(40) ? ? self.t.seth(-90) ? ? self.t.fd(20) ? ? self.t.pensize(2) ? ? for i in range(11): ? ? ? ? self.__goto(-20 + 4 * i, 200 - 200 * sqrt(2)) ? ? ? ? self.t.seth(-90) ? ? ? ? self.t.fd(200) ? ''' ? * @breif: 畫(huà)筆移動(dòng)到指定位置 ? * @param[in]: x -> 畫(huà)筆移動(dòng)位置橫坐標(biāo) ? * @param[in]: y -> 畫(huà)筆移動(dòng)位置縱坐標(biāo) ? * @retval: None ? ''' ? ? def __goto(self, x: int, y: int) -> None: ? ? self.t.penup() ? ? self.t.goto(x,y) ? ? self.t.pendown() ? ? ? ?? if __name__ == '__main__': ? knot = chineseKnot() ? knot.drawKnot()
到此這篇關(guān)于通過(guò)Python繪制中國(guó)結(jié)的示例代碼的文章就介紹到這了,更多相關(guān)Python繪制中國(guó)結(jié)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python 獲取計(jì)算機(jī)的網(wǎng)卡信息
這篇文章主要介紹了python 獲取計(jì)算機(jī)的網(wǎng)卡信息的方法,幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下2021-02-02通過(guò)Python 獲取Android設(shè)備信息的輕量級(jí)框架
今天跟大家分享一下,如何通過(guò)Python實(shí)現(xiàn)一個(gè)輕量級(jí)的庫(kù)來(lái)獲取電腦上連接的Android設(shè)備信息,需要的朋友參考下吧2017-12-12Python實(shí)現(xiàn)比較撲克牌大小程序代碼示例
這篇文章主要介紹了Python實(shí)現(xiàn)比較撲克牌大小程序代碼示例,具有一定借鑒價(jià)值,需要的朋友可以了解下。2017-12-12python判斷文件夾內(nèi)是否存在指定后綴文件的實(shí)例
今天小編就為大家分享一篇python判斷文件夾內(nèi)是否存在指定后綴文件的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-06-06pycharm中下載的包但是import還是無(wú)法使用/報(bào)紅的解決方法
用pycharm開(kāi)發(fā)時(shí),在導(dǎo)入自己寫(xiě)的python文件時(shí)出現(xiàn)模塊名爆紅的情況,下面這篇文章主要給大家介紹了關(guān)于pycharm中下載包但是import還是無(wú)法使用/報(bào)紅的解決方法,需要的朋友可以參考下2023-02-02Python面向?qū)ο缶幊讨庋b的藝術(shù)你了解嗎
這篇文章主要為大家詳細(xì)介紹了Python面向?qū)ο缶幊讨庋b的藝術(shù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助2022-02-02