Python實(shí)現(xiàn)不規(guī)則圖形填充的思路
核心思想:點(diǎn)動成線,線動成面。
以下圖為例,要求填充扇子的扇面部分。
一、繪制扇子:
首先要弄清楚它的結(jié)構(gòu),即能夠用代碼把扇子繪制出來。(只有先把不規(guī)則圖形的結(jié)構(gòu)分析清楚,才能進(jìn)一步填充它。)
先畫一個(gè)框架:
#調(diào)用的庫 import math import numpy as np import matplotlib.pyplot as plt
#畫圖的基礎(chǔ)設(shè)置 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), color='black',linewidth=0.7) ax.plot(z * math.cos(math.pi), z * math.sin(math.pi), color='black',linewidth=0.7)
如圖:
再把扇子細(xì)節(jié)部分畫出來:
#畫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)
這樣就可以得到最開始的“素扇子”。
至此,我們也弄清了扇子的“數(shù)據(jù)”,扇面部分取1/4圓,扇骨部分通過np.arange()函數(shù),把步長設(shè)置為0.01即可以創(chuàng)建一條半徑,然后通過角度的正余弦變化構(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)動成線 z = np.arange(1.005, 2, 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), z * math.sin(math.pi/2+i/20*math.pi/2), color=color[int(i)],linewidth=0.7,alpha=0.5)
如圖所示:
以上是我在實(shí)踐過程中遇到無法使用Python庫函數(shù)填充圖形時(shí)采取的辦法,該方法很好的詮釋了數(shù)學(xué)中“點(diǎn)動成線,線動成面”的思想,僅提供參考,無普適價(jià)值。希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Django ValuesQuerySet轉(zhuǎn)json方式
這篇文章主要介紹了Django ValuesQuerySet轉(zhuǎn)json方式,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-03-03在python中l(wèi)ist作函數(shù)形參,防止被實(shí)參修改的實(shí)現(xiàn)方法
這篇文章主要介紹了在python中l(wèi)ist作函數(shù)形參,防止被實(shí)參修改的實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-06-06Django forms表單 select下拉框的傳值實(shí)例
今天小編就為大家分享一篇Django forms表單 select下拉框的傳值實(shí)例。具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-07-07新手入門學(xué)習(xí)python Numpy基礎(chǔ)操作
這篇文章主要介紹了新手入門學(xué)習(xí)python Numpy基礎(chǔ)操作,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03如何利用Python連接MySQL數(shù)據(jù)庫實(shí)現(xiàn)數(shù)據(jù)儲存
當(dāng)我們學(xué)習(xí)了mysql數(shù)據(jù)庫后,我們會想著該如何將python和mysql結(jié)合起來運(yùn)用,下面這篇文章主要給大家介紹了關(guān)于如何利用Python連接MySQL數(shù)據(jù)庫實(shí)現(xiàn)數(shù)據(jù)儲存的相關(guān)資料,需要的朋友可以參考下2021-11-11Django 接收Post請求數(shù)據(jù),并保存到數(shù)據(jù)庫的實(shí)現(xiàn)方法
今天小編就為大家分享一篇Django 接收Post請求數(shù)據(jù),并保存到數(shù)據(jù)庫的實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-07-07python實(shí)現(xiàn)批量壓縮指定目錄下的文件夾
這篇文章主要介紹了利用Python實(shí)現(xiàn)批量壓縮指定目錄下的文件夾的示例代碼,文中代碼示例講解詳細(xì),感興趣的小伙伴快跟隨小編一起動手試一試2023-08-08opencv+圖像處理(Image Processing in OpenCV)
這篇文章主要介紹了opencv+圖像處理(Image Processing in OpenCV) 4-0改變顏色空間,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-04-04Python實(shí)現(xiàn)語音識別和語音合成功能
聲音的本質(zhì)是震動,震動的本質(zhì)是位移關(guān)于時(shí)間的函數(shù),波形文件(.wav)中記錄了不同采樣時(shí)刻的位移。這篇文章主要介紹了Python實(shí)現(xiàn)語音識別和語音合成,需要的朋友可以參考下2019-09-09