通過Python繪制中國結(jié)的示例代碼
1 中國結(jié)的組成部分
中國結(jié)是一種手工編織工藝品,它身上所顯示的情致與智慧正是漢族古老文明中的一個側(cè)面。因為其外觀對稱精致,可以代表漢族悠久的歷史,符合中國傳統(tǒng)裝飾的習(xí)俗和審美觀念,故命名為中國結(jié)。中國結(jié)代表著團(tuán)結(jié)幸福平安,特別是在民間,它精致的做工深受大眾的喜愛。其主要組成部分如下圖所示。
2 設(shè)計中國結(jié)對象
基于Python Turtle庫實現(xiàn)繪制,首先設(shè)計一個中國結(jié)對象,畫筆顏色就選擇中國紅。再定義一個__goto()函數(shù)封裝turtle庫對畫筆移動的操作。
import turtle as t class chineseKnot: ? ''' ? * @breif: 中國結(jié) ? ''' ? ? def __init__(self) -> None: ? ? # 畫筆初始化 ? ? 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: 畫筆移動到指定位置 ? * @param[in]: x -> 畫筆移動位置橫坐標(biāo) ? * @param[in]: y -> 畫筆移動位置縱坐標(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 完整代碼,一鍵運行
import turtle as t from math import sqrt class chineseKnot: ? ''' ? * @breif: 中國結(jié) ? ''' ? ? def __init__(self) -> None: ? ? # 畫筆初始化 ? ? 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: 畫中國結(jié) ? * @param[in]: None ? * @retval: None ? ''' ? def drawKnot(self) -> None: ? ? self.drawBody() ? ? self.drawEdge() ? ? self.drawAdorn() ? ? self.t.hideturtle() ? ? self.t.done() ? ''' ? * @breif: 畫中國結(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: 畫中國結(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: 畫中國結(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: 畫筆移動到指定位置 ? * @param[in]: x -> 畫筆移動位置橫坐標(biāo) ? * @param[in]: y -> 畫筆移動位置縱坐標(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)于通過Python繪制中國結(jié)的示例代碼的文章就介紹到這了,更多相關(guān)Python繪制中國結(jié)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
通過Python 獲取Android設(shè)備信息的輕量級框架
今天跟大家分享一下,如何通過Python實現(xiàn)一個輕量級的庫來獲取電腦上連接的Android設(shè)備信息,需要的朋友參考下吧2017-12-12python判斷文件夾內(nèi)是否存在指定后綴文件的實例
今天小編就為大家分享一篇python判斷文件夾內(nèi)是否存在指定后綴文件的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-06-06pycharm中下載的包但是import還是無法使用/報紅的解決方法
用pycharm開發(fā)時,在導(dǎo)入自己寫的python文件時出現(xiàn)模塊名爆紅的情況,下面這篇文章主要給大家介紹了關(guān)于pycharm中下載包但是import還是無法使用/報紅的解決方法,需要的朋友可以參考下2023-02-02Python面向?qū)ο缶幊讨庋b的藝術(shù)你了解嗎
這篇文章主要為大家詳細(xì)介紹了Python面向?qū)ο缶幊讨庋b的藝術(shù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助2022-02-02