1. 程式人生 > 程式設計 >Python實現不規則圖形填充的思路

Python實現不規則圖形填充的思路

核心思想:點動成線,線動成面。

以下圖為例,要求填充扇子的扇面部分。

Python實現不規則圖形填充的思路

一、繪製扇子:

首先要弄清楚它的結構,即能夠用程式碼把扇子繪製出來。(只有先把不規則圖形的結構分析清楚,才能進一步填充它。)

先畫一個框架:

#呼叫的庫
import math
import numpy as np
import matplotlib.pyplot as plt

#畫圖的基礎設定
fig = plt.figure(1)
ax = fig.add_subplot(111)
plt.axis('off')
plt.axis('equal')
 

#畫框架線條

#畫兩條圓弧
theta = np.arange(0.5*np.pi,np.pi,0.01)
for i in range(3):
  x = i * np.cos(theta)
  y = i * np.sin(theta)
  ax.plot(x,y,color='black',linewidth=0.7)
#畫兩條主扇骨
z = np.arange(0,2,0.01)
ax.plot(z * math.cos(math.pi/2),z * math.sin(math.pi/2),linewidth=0.7)
ax.plot(z * math.cos(math.pi),z * math.sin(math.pi),linewidth=0.7)
 

如圖:

Python實現不規則圖形填充的思路

再把扇子細節部分畫出來:

#畫10根扇骨
z = np.arange(0,1,0.01)
for i in range(11):
  ax.plot(z * math.cos(math.pi/2+i/10*math.pi/2),z * math.sin(math.pi/2+i/10*math.pi/2),linewidth=0.7)
#扇面分割為20小份
z = np.arange(1,0.01)
for i in range(0,21):
  ax.plot(z * math.cos(math.pi/2+i/20*math.pi/2),z * math.sin(math.pi/2+i/20*math.pi/2),linewidth=0.7)
 

這樣就可以得到最開始的“素扇子”。

至此,我們也弄清了扇子的“資料”,扇面部分取1/4圓,扇骨部分通過np.arange()函式,把步長設定為0.01即可以建立一條半徑,然後通過角度的正餘弦變化構建扇骨,從而繪製出整個扇子。

二、填充扇子:

思路:如果兩根扇骨的距離足夠小,小到人眼難以分辨,當不同顏色的扇骨鋪滿扇面,就可以實現扇面的顏色填充。

#塗顏色
#選取一個塗色卡
color = ['#cde8f3','#91cfc9','#6bb3c0','#4198b9','#1e5670','#2d4e76','#99bcdd','#c4e5ef','#f3fafa','#bbabd0','#a16e8a','#643f5a','#cfbeb7','#f1ead7','#e99a9a','#e67b79','#f7cece','#eec9bc','#e1f1ea','#91c7c2']

#點動成線
z = np.arange(1.005,0.01)#邊緣修正0.005,露出扇子輪廓

#線動成面
I = np.arange(0,20,0.01)
for i in I:
  ax.plot(z * math.cos(math.pi/2+i/20*math.pi/2),color=color[int(i)],linewidth=0.7,alpha=0.5)

如圖所示:

Python實現不規則圖形填充的思路

以上是我在實踐過程中遇到無法使用Python庫函式填充圖形時採取的辦法,該方法很好的詮釋了數學中“點動成線,線動成面”的思想,僅提供參考,無普適價值。希望對大家的學習有所幫助,也希望大家多多支援我們。