使用Python的內建turtle庫畫彩虹

2021-08-14 01:37:04 字數 901 閱讀 4426

上圖是使用turtle庫繪製的彩虹。程式的關鍵點是將畫筆的顏色漸變,再通過不斷微小的角度轉換繪製成彩虹

計算機中的顏色空間模型是典型的rgb模型,r,g,b分別對應光的三原色,色相是由rgb三個引數共同決定的。

那麼如果想通過乙個引數來改變色相,應該使用hsv顏色模型。hsv對於顏色空間的描述更貼近人類感知,hsv顏色模型分別由三個向量h(色相),s(飽和度),v(明度) 所組成,因此可以通過h的漸變而得到對應rgb顏色的漸變值給予畫筆,從而簡單的達到繪製彩虹的目的

下面給出hsv轉換為rgb的數學公式(源自

那麼有了轉換公式,可以將其實現為python**:

程式主要需要解決的問題解決了,接下來就是描述繪製的過程。彩虹是乙個類似圓弧的形狀,那麼要達到上圖的彩虹形狀,就可以將畫筆置於左下角,以這個點畫乙個大圓,以至於在視窗中僅能顯示乙個圓弧。彩虹形成的漸變過程即不斷畫圓+改變顏色的過程

for迴圈的過程中,顏色漸變效果是通過累加hue(色相)實現的,但要注意的一點是,迴圈的次數與累加量的乘積,也就是總的累加量不可以超過360,否則會報錯,這是因為在hsv顏色模型將顏色描述為圓錐上的點,色相h即使圍繞圓錐中心軸旋轉的角度,因此如果最終的累加量超過的這個上限會導致轉換運算得出的rgb顏色是個錯誤的顏色數值

python內建函式使用 python內建函式使用

eval函式執行python表示式,有返回值 eval 1 2 3 4 5 exec函式執行的是python語句,沒有返回值 exec print 123 將字串型別的 編碼.物件能夠通過exec語句來執行或者eval 進行求值,c只是編譯,不執行 code for i in range 10 pr...

Python內建函式getattr的使用場景

在python互動式的help環境下,輸入getattr,回車,會得到下面的資訊 既然getattr alex,age 和 alex.age都能獲取alex物件的age屬性的值,那我們使用後者不就行了嗎?畢竟點語法看起來比getattr函式簡單多了,不用寫那麼多字。確實,一般情況下,使用點語法來獲取...

Python 內建函式 range的使用

內建range函式可以用來方便的產生等差的數值串行。如 range 5 0,1,2,3,4 range 1,5 1,2,3,4 range 1,5,2 1,3 range 1,10,3 1,4,7 另外結合range 和len 方法可以對乙個序列的索引進行遍歷,如 正常的遍歷方式 a mary ha...