Python實例:自動軌跡繪制


1. 問題分析

需求:根據腳本來繪制圖形

Python的 turtle 庫通過寫代碼的方式來繪圖,現在我們要根據數據來繪制軌跡。

使用數據腳本時自動化最重要的第一步。例如,根據下面的幾組數據繪制出的圖形:

300,0,144,1,0,0
300,0,144,0,1,0
300,0,144,0,0,1
300,0,144,1,1,0
300,0,108,0,1,1
184,0,72,1,0,1

繪制結果:

image-20210226141959964


2.實例講解

讀取文件-->解析數據-->繪制圖形

實現思路:

  • 步驟1:定義數據文件格式(接口)
  • 步驟2:編寫程序,根據文件接口解析參數繪制圖形
  • 步驟3:編制數據文件

數據接口的定義:

  • 一行表示一次操作
  • 每行有6個數據,中間使用逗號分隔
  • 第1個數據:行進距離
  • 第2個數據:轉向判斷,0表示左轉,1表示右轉
  • 第3個數據:轉向絕對角度
  • 第4、5、6個數據:RGB三個通道顏色,取值范圍0-1之間的浮點數

如下:

300,0,144,1,0,0
300,0,144,0,1,0

下面使用海龜繪圖體系來加載文件和繪制圖形:

#AutoTraceDraw.py
import turtle as t

t.title('自動軌跡繪制')
t.setup(800, 600, 0, 0)
t.pencolor("red")
t.pensize(5)

#數據讀取
datals = []
f = open("data.txt")
for line in f:
    line = line.replace("\n","")
    datals.append(list(map(eval, line.split(","))))
f.close()

#自動繪制
for i in range(len(datals)):
    t.pencolor(datals[i][3],datals[i][4],datals[i][5])
    t.fd(datals[i][0])
    if datals[i][1]:
        t.right(datals[i][2])
    else:
        t.left(datals[i][2])

其中 data.txt 文件的數據:

300,0,144,1,0,0
300,0,144,0,1,0
300,0,144,0,0,1
300,0,144,1,1,0
300,0,108,0,1,1
184,0,72,1,0,1
184,0,72,0,0,0
184,0,72,0,0,0
184,0,72,0,0,0
184,1,72,1,0,1
184,1,72,0,0,0
184,1,72,0,0,0
184,1,72,0,0,0
184,1,72,0,0,0
184,1,720,0,0,0

對上面部分代碼的詳細講解:

for line in f:
    line = line.replace("\n","")   
    datals.append(list(map(eval, line.split(","))))
    print(datals)
f.close()

line = line.replace("\n","") 將文件最后的換行符轉換為空字符串,去掉換行的信息,然后再賦給 line

此時 line 的信息存儲的是我們定義的每一行的數據接口的值,我們需要將數據接口的值進行分隔、處理並提取其中的信息。

使用 for line in f 拿到的是字符串,但是我們希望得到的是數字。此時我們該怎么做?

由於這個字符串中的每個數字之間用逗號 "," 進行分隔,可以使用 line.split() 並使用逗號作為分隔符,將這樣一個字符串分隔成若干個字符串。split() 函數更多解釋請看:https://www.runoob.com/python/att-string-split.html

map函數:將第一個參數的功能作用於第二個參數的每一個元素。簡單地說就是對一個列表或者一個集合,這樣的組合數據類型的每一個元素,都執行一次第一個參數所對應的函數。map()函數更多解釋請看:https://www.runoob.com/python/python-func-map.html

eval函數:將一個字符串的兩側的引號去掉。eval函數更多解釋請看:https://www.runoob.com/python/python-func-eval.html


3. 自動軌跡繪制實例的舉一反三

理解方法思維

  • 自動化思維:數據和功能分離,數據驅動的自動運行
  • 接口化設計:格式化設計接口,清晰明了
  • 二維數據應用:應用維度組織數據,二維數據最常用

應用問題擴展

  • 擴展接口設計,增加更多控制接口
  • 擴展功能設計,增加弧形等更多功能
  • 擴展應用需求,發展自動軌跡繪制到動畫繪制

以上內容資料均來源於中國大學MOOC網-北京理工大學Python語言程序設計課程
課程地址:https://www.icourse163.org/course/BIT-268001


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM