python用于绘制弧形的函数,python中圆弧怎么画

大家好,本文将围绕python中用于绘制弧形的函数展开说明,python用于绘制弧形的函数是一个很多人都想弄明白的事情,想搞清楚python中圆弧怎么画需要先了解以下几个事情。

Python的画图模块matplotlib没有直接画圆弧的方法,需要通过圆心和半径将圆弧上的点的坐标构造出来,然后再用plot方法即可画出圆弧

首先定义一个构造圆弧坐标的函数circle_array:(更新:优化了circle_array的写法)

import matplotlib.pyplot as plt
from scipy.interpolate import interp1d
import numpy as np
import pandas as pd
xc,yc = 1,2 #圆心
r1,r2,r3 = 3,4,5 #半径

def circle_array(xc,yc,r,start,end):
    #根据圆心、半径、起始角度、结束角度,生成圆弧的数据点
    phi1 = start*np.pi/180.0
    phi2 = end*np.pi/180.0
    dphi = (phi2-phi1)/np.ceil(200*np.pi*r*(phi2-phi1)) #根据圆弧周长设置等间距
    #array = np.arange(phi1, phi2+dphi, dphi) #生成双闭合区间(Python默认为左闭右开)
    #当dphi为无限小数时,上述方法可能由于小数精度问题,导致array多一个元素,将代码优化为下面两行
    array = np.arange(phi1, phi2, dphi)
    array = np.append(array,array[-1]+dphi)#array在结尾等距增加一个元素
    return xc + r*np.cos(array),yc + r*np.sin(array)
1. 画圆
#画圆
plt.figure(figsize=(5,5))
X1,Y1 = circle_array(xc,yc,r1,0,360)
X2,Y2 = circle_array(xc,yc,r2,0,360)
X3,Y3 = circle_array(xc,yc,r3,0,360)
plt.plot(X1,Y1)
plt.plot(X2,Y2)
plt.plot(X3,Y3)
plt.scatter(xc,yc,c='black',marker='o')#画圆心
plt.savefig('circle1.png')
plt.show()

2.  画圆弧
plt.figure(figsize=(5,5))
X1,Y1 = circle_array(xc,yc,r1,0,90)
X2,Y2 = circle_array(xc,yc,r2,60,270)
X3,Y3 = circle_array(xc,yc,r3,180,360)
plt.plot(X1,Y1)
plt.plot(X2,Y2)
plt.plot(X3,Y3)
plt.scatter(xc,yc,c='black',marker='o')#画圆心
plt.savefig('circle2.png')
plt.show()
3. 画扇形
#画扇形
plt.figure(figsize=(5,5))
X1,Y1 = circle_array(xc,yc,r1,0,60)
X3,Y3 = circle_array(xc,yc,r3,200,330)
#将圆心和圆弧首尾相连
X1 = [xc] + X1+ [xc]
Y1 = [yc] + Y1+ [yc]
X3 = [xc] + X3+ [xc]
Y3 = [yc] + Y3+ [yc]
plt.plot(X1,Y1)
plt.plot(X3,Y3)
plt.scatter(xc,yc,c='black',marker='o')#画圆心
plt.savefig('circle3.png')
plt.show()

4. 画平滑曲线

根据点直接通过plot方法画出来的是折现,有时候显得生硬,要画出平滑曲线,需先进行插值,当点足够密集时,画出来的折现就变成了平滑曲线,插值函数有很多方法,可以直接调用scipy.interpolate 的interp1d函数

#画平滑曲线
u = np.array([1,2,4,6,7,8.5])
v = np.array([2,4,3.3,5.5,6,7.7])
cubic_interploation_model=interp1d(u,v,kind="cubic")
xs=np.linspace(u.min(),u.max(),100)
ys=cubic_interploation_model(xs)
plt.plot(xs,ys,c='black')
plt.scatter(u,v,c='black',marker='o')
plt.savefig('circle4.png')
plt.show()

  • 7
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值