Python實(shí)現(xiàn)不規(guī)則圖形填充的思路
核心思想:點(diǎn)動(dòng)成線,線動(dòng)成面。
以下圖為例,要求填充扇子的扇面部分。

一、繪制扇子:
首先要弄清楚它的結(jié)構(gòu),即能夠用代碼把扇子繪制出來(lái)。(只有先把不規(guī)則圖形的結(jié)構(gòu)分析清楚,才能進(jìn)一步填充它。)
先畫(huà)一個(gè)框架:
#調(diào)用的庫(kù) import math import numpy as np import matplotlib.pyplot as plt
#畫(huà)圖的基礎(chǔ)設(shè)置
fig = plt.figure(1)
ax = fig.add_subplot(111)
plt.axis('off')
plt.axis('equal')
#畫(huà)框架線條 #畫(huà)兩條圓弧 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) #畫(huà)兩條主扇骨 z = np.arange(0,2,0.01) ax.plot(z * math.cos(math.pi/2), z * math.sin(math.pi/2), color='black',linewidth=0.7) ax.plot(z * math.cos(math.pi), z * math.sin(math.pi), color='black',linewidth=0.7)
如圖:

再把扇子細(xì)節(jié)部分畫(huà)出來(lái):
#畫(huà)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), color='black',linewidth=0.7) #扇面分割為20小份 z = np.arange(1,2,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), color='black',linewidth=0.7)
這樣就可以得到最開(kāi)始的“素扇子”。
至此,我們也弄清了扇子的“數(shù)據(jù)”,扇面部分取1/4圓,扇骨部分通過(guò)np.arange()函數(shù),把步長(zhǎng)設(shè)置為0.01即可以創(chuàng)建一條半徑,然后通過(guò)角度的正余弦變化構(gòu)建扇骨,從而繪制出整個(gè)扇子。
二、填充扇子:
思路:如果兩根扇骨的距離足夠小,小到人眼難以分辨,當(dāng)不同顏色的扇骨鋪滿扇面,就可以實(shí)現(xiàn)扇面的顏色填充。
#涂顏色
#選取一個(gè)涂色卡
color = ['#cde8f3','#91cfc9','#6bb3c0','#4198b9','#1e5670',
'#2d4e76','#99bcdd','#c4e5ef','#f3fafa','#bbabd0',
'#a16e8a','#643f5a','#cfbeb7','#f1ead7','#e99a9a',
'#e67b79','#f7cece','#eec9bc','#e1f1ea','#91c7c2']
#點(diǎn)動(dòng)成線
z = np.arange(1.005, 2, 0.01)#邊緣修正0.005,露出扇子輪廓
#線動(dòng)成面
I = np.arange(0,20,0.01)
for i in I:
ax.plot(z * math.cos(math.pi/2+i/20*math.pi/2), z * math.sin(math.pi/2+i/20*math.pi/2), color=color[int(i)],linewidth=0.7,alpha=0.5)
如圖所示:

以上是我在實(shí)踐過(guò)程中遇到無(wú)法使用Python庫(kù)函數(shù)填充圖形時(shí)采取的辦法,該方法很好的詮釋了數(shù)學(xué)中“點(diǎn)動(dòng)成線,線動(dòng)成面”的思想,僅提供參考,無(wú)普適價(jià)值。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
關(guān)于Python中異常(Exception)的匯總
異常是指程序中的例外,違例情況。異常機(jī)制是指程序出現(xiàn)錯(cuò)誤后,程序的處理方法。當(dāng)出現(xiàn)錯(cuò)誤后,程序的執(zhí)行流程發(fā)生改變,程序的控制權(quán)轉(zhuǎn)移到異常處理。下面這篇文章主要匯總了關(guān)于Python中異常(Exception)的相關(guān)資料,需要的朋友可以參考下。2017-01-01
python中繞過(guò)反爬蟲(chóng)的方法總結(jié)
在本篇文章里小編給大家整理的是一篇關(guān)于python中繞過(guò)反爬蟲(chóng)的方法總結(jié)內(nèi)容,需要的朋友們可以參考下。2020-11-11
Python實(shí)現(xiàn)遍歷包含大量文件的文件夾
在處理大模型的訓(xùn)練數(shù)據(jù)時(shí),經(jīng)常需要遍歷大型文件夾,其中,可能包括數(shù)千萬(wàn)或數(shù)億個(gè)文件,所以本文為大家整理了Python遍歷包含大量文件的文件夾的方法,希望對(duì)大家有所幫助2023-04-04
教你使用python做一個(gè)“罰點(diǎn)球”小游戲
這篇文章主要介紹了用python做一個(gè)“罰點(diǎn)球”小游戲,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-06-06
詳解Python中如何寫(xiě)控制臺(tái)進(jìn)度條的整理
這篇文章主要介紹了詳解Python中如何寫(xiě)控制臺(tái)進(jìn)度條的整理,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-03-03

