欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

matplotlib画圆

程序员文章站 2022-05-21 09:21:55
...

首先需要导入所用到的第三方库

from matplotlib import pyplot as plt
import numpy as np

“”"
给定圆心和半径,画圆
r :半径
x,y:圆心的坐标
“”"

def pint(r,x,y):
    plt.figure()    # 创建一个空白窗体
    plt.title('Circle')
    plt.xlabel('x')
    plt.ylabel('y')
    # 点的横坐标为a
    a = np.arange(x-r,x+r,0.000001)
    # 点的纵坐标为b
    b = np.sqrt(np.power(r,2)-np.power((a-x),2))+y
    plt.plot(a,b,color='r',linestyle='-')
    plt.plot(a,-b,color='r',linestyle='-')
    plt.scatter(0,0,c='b',marker='o')
    plt.grid(True)
    plt.show()
      
pint(2,0,0)

由圆心和半径确定圆上的每一个点的x的坐标

  a = np.arange(x-r,x+r,0.000001)

即x的范围在圆心坐标的x坐标加减半径内
matplotlib画圆

面向对象编程实例化对象画圆

  class Circle:
    r = 0 # 半径
    x,y = (0,0) # 圆心
    # 构造函数,初始化赋值
    def __init__(self,r1,m,n):
        self.r = r1
        self.x = m 
        self.y = n
    # 方法,画圆
    def pint(self):
        plt.figure()    # 创建一个空白窗体
        plt.title('Circle')
        plt.xlabel('x')
        plt.ylabel('y')
        # 点的横坐标为a
        a = np.arange(-2*np.pi,2*np.pi,0.00001)
        # 点的纵坐标为b
        b = np.sqrt(np.power(self.r,2)-np.power((a-self.x),2))+self.y
        plt.plot(a,b,color='r',linestyle='-')
        plt.plot(a,-b,color='r',linestyle='-')
        plt.scatter(self.x,self.y,c='b',marker='o')
        plt.axis([-4,4,-4,4])
        plt.grid(True)
        plt.show()
        

r = 2
x,y = (0,0)
y = Circle(r,x,y)   # 实例化一个对象
y.pint()        # 调用该对象的方法进行画圆

此处用的是

a = np.arange(-2*np.pi,2*np.pi,0.00001)
b = np.sqrt(np.power(self.r,2)-np.power((a-self.x),2))+self.y

圆的基本方程为:(x-x0)^2 + (y-y0)^2 =r^2 ,(x0,y0)为圆的圆心
已知x求y,则转换成b变量的式子

matplotlib画圆

还可以用sin和cos来画圆

点的横坐标

a_x = np.arange(0,2*np.pi,0.01)
a = x+r*np.cos(a_x)
b = y+r*np.sin(a_x)
plt.plot(a,b,coloe='r',linestyle='-'
plt.plot(a,-b,color='r',linestyle='-'

matplotlib画圆
想象一下,以该圆的左下角为原点,向右向上画x,y轴,则

x = x0+r*cosα
y = y0+r*sinα

注意

有的时候,坐标轴的横纵坐标尺度不一致,导致圆变的有点椭,可以采用matplotlib中的xlim和ylim来改变坐标轴的刻度

plt.xlim(-4,4)
plt.ylim(-4,4)

matplotlib画圆
但有的时候还是看起来不那么的圆,如有妙招或有误地方欢迎评论,大家一起学习!