Python编程使用matplotlib绘制动态圆锥曲线示例

目录
  • 椭圆
  • 双曲线
  • 抛物线
  • 极坐标方程

作为让高中生心脏骤停的四个字,对于高考之后的人来说可谓刻骨铭心,所以定义不再赘述,直接撸图,其标准方程分别为

在Python中,绘制动图需要用到matplotlib中的animation包,其调用方法以及接下来要用到的参数为

ani = animation.FuncAnimation(fig, func, frames, interval)

其中fig为绘图窗口,func为绘图函数,其返回值为图像,frames为迭代参数,如果为整型的话,其迭代参数则为range(frames)

椭圆

为了绘图方便,椭圆的参数方程为

代码为:

# 这三个包在后面的程序中不再复述
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
a,b,c = 5,3,4
fig = plt.figure(figsize=(12,9))
ax = fig.add_subplot(autoscale_on=False,
    xlim=(-a,a),ylim=(-b,b))
ax.grid()
line, = ax.plot([],[],'o-',lw=2)
trace, = ax.plot([],[],'-', lw=1)
theta_text = ax.text(0.02,0.85,'',transform=ax.transAxes)
textTemplate = '''theta = %.1f°\n
lenL = %.1f, lenR = %.1f\n
lenL+lenR = %.1f'''
xs,ys = [], []
def animate(i):
    if(i==0):
        xs.clear()
        ys.clear()
    theta = i*0.04
    x = a*np.cos(theta)
    y = b*np.sin(theta)
    xs.append(x)
    ys.append(y)
    line.set_data([-c,x,c], [0,y,0])
    trace.set_data(xs,ys)
    lenL = np.sqrt((x+c)**2+y**2)
    lenR = np.sqrt((x-c)**2+y**2)
    theta_text.set_text(textTemplate %
        (180*theta/np.pi, lenL, lenR, lenL+lenR))
    return line, trace, theta_text
ani = animation.FuncAnimation(fig, animate, 157,
    interval=5, blit=True)
ani.save("ellipse.gif")
plt.show()

双曲线

双曲线的参数方程为

设 a = 4 , b = 3 , c = 5 则代码如下

a,b,c = 4,3,5
fig = plt.figure(figsize=(12,9))
ax = fig.add_subplot(autoscale_on=False,
    xlim=(-c,16),ylim=(-12,12))
ax.grid()
line, = ax.plot([],[],'o-',lw=2)
trace, = ax.plot([],[],'-', lw=1)
theta_text = ax.text(0.01,0.85,'',
    transform=ax.transAxes)
textTemplate = '''t = %.1f\n
lenL = %.1f, lenR = %.1f\n
lenL-lenR = %.1f'''
xs,ys = [],[]
def animate(t):
    if(t==-3):
        xs.clear()
        ys.clear()
    x = a*np.cosh(t)
    y = b*np.sinh(t)
    xs.append(x)
    ys.append(y)
    line.set_data([-c,x,c], [0,y,0])
    trace.set_data(xs,ys)
    lenL = np.sqrt((x+c)**2+y**2)
    lenR = np.sqrt((x-c)**2+y**2)
    theta_text.set_text(textTemplate %
        (t, lenL, lenL, lenL-lenR))
    return line, trace, theta_text
frames = np.arange(-3,3,0.05)
ani = animation.FuncAnimation(fig, animate,
    frames, interval=5, blit=True)
ani.save("hyperbola.gif")

plt.show()

抛物线

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
a,b,c = 4,3,5
p = 1
fig = plt.figure(figsize=(12,9))
ax = fig.add_subplot(autoscale_on=False,
    xlim=(-0.6,4.5),ylim=(-3,3))
ax.grid()
ax.plot([-p/2,-p/2],[-5,5],'-',lw=2)
line, = ax.plot([],[],'o-',lw=2)
trace, = ax.plot([],[],'-', lw=1)
theta_text = ax.text(0.05,0.85,'',
    transform=ax.transAxes)
textTemplate = '''y = %.1f\n
lenL = %.1f, lenF = %.1f\n
lenL-lenF = %.1f'''
xs,ys = [],[]
def animate(y):
    if(y==-3):
        xs.clear()
        ys.clear()
    x = y**2/p/2
    xs.append(x)
    ys.append(y)
    line.set_data([-p,x,p/2], [y,y,0])
    trace.set_data(xs,ys)
    lenL = x+p/2
    lenF = np.sqrt((x-p/2)**2+y**2)
    theta_text.set_text(textTemplate %
        (y, lenL, lenF, lenL-lenF))
    return line, trace, theta_text
frames = np.arange(-3,3,0.1)
ani = animation.FuncAnimation(fig, animate,
    frames, interval=5, blit=True)
ani.save("parabola.gif")
plt.show()

极坐标方程

圆锥曲线在极坐标系下有相同的表达式,即

matplotlib中,极坐标图像需要通过projection='polar'来标识,其代码为

p = 2
fig = plt.figure(figsize=(12,9))
ax = fig.add_subplot(autoscale_on=False, projection='polar')
ax.set_rlim(0,8)
trace, = ax.plot([],[],'-', lw=1)
theta_text = ax.text(0.05,0.95,'',transform=ax.transAxes)
textTemplate = 'e = %.1f\n'
theta = np.arange(-3.1,3.2,0.1)
def animate(e):
    rho = p/(1-e*np.cos(theta))
    trace.set_data(theta,rho)
    theta_text.set_text(textTemplate % e)
    return trace, theta_text
frames = np.arange(-2,2,0.1)
ani = animation.FuncAnimation(fig, animate,
    frames, interval=100, blit=True)
ani.save("polar.gif")
plt.show()

以上就是Python使用matplotlib绘制动态的圆锥曲线示例的详细内容,更多关于matplotlib绘制动态圆锥曲线的资料请关注我们其它相关文章!

(0)

相关推荐

  • python读取文本绘制动态速度曲线

    本文实例为大家分享了python读取文本绘制动态速度曲线的具体代码,供大家参考,具体内容如下 由于需要分析机械加工过程中各个轴的速度,于是用软件导出了数据,写了这个python脚本来显示速度曲线. 效果图如下: 源代码: import numpy as np from matplotlib import pyplot as plt from matplotlib import animation path = "Nccut_TraceFile.log" file = open(path

  • python+matplotlib实现动态绘制图片实例代码(交互式绘图)

    本文研究的主要是python+matplotlib实现动态绘制图片(交互式绘图)的相关内容,具体介绍和实现代码如下所示. 最近在研究动态障碍物避障算法,在Python语言进行算法仿真时需要实时显示障碍物和运动物的当前位置和轨迹,利用Anaconda的Python打包集合,在Spyder中使用Python3.5语言和matplotlib实现路径的动态显示和交互式绘图(和Matlab功能类似). Anaconda是一个用于科学计算的Python发行版,支持 Linux, Mac, Windows系统

  • python绘制动态曲线教程

    从txt种获取数据 并且通过动态曲线显示 import numpy as np import matplotlib.pyplot as plt import matplotlib.animation as animation import time # Fixing random state for reproducibility np.random.seed(196) path = "feed.txt" file = open(path, 'r') data = [] for lin

  • python之matplotlib学习绘制动态更新图实例代码

    简介 通过定时器Timer触发事件,定时更新绘图,可以形成动态更新图片.下面的实例是学习<matplotlib for python developers>一文的笔记. 实现 实现代码及简单介绍 通过self.user = self.user[1:] + [temp],每次删除列表的第一元素,在其尾部添加新的元素.这样完成user数据的动态更新.其他详细的解释见文中的注释部分. #-*-coding:utf-8-*- import wx from matplotlib.figure impor

  • Python编程使用matplotlib绘制动态圆锥曲线示例

    目录 椭圆 双曲线 抛物线 极坐标方程 作为让高中生心脏骤停的四个字,对于高考之后的人来说可谓刻骨铭心,所以定义不再赘述,直接撸图,其标准方程分别为 在Python中,绘制动图需要用到matplotlib中的animation包,其调用方法以及接下来要用到的参数为 ani = animation.FuncAnimation(fig, func, frames, interval) 其中fig为绘图窗口,func为绘图函数,其返回值为图像,frames为迭代参数,如果为整型的话,其迭代参数则为ra

  • python数据可视化matplotlib绘制折线图示例

    目录 plt.plot()函数各参数解析 各参数具体含义为: x,y color linestyle linewidth marker 关于marker的参数 plt.plot()函数各参数解析 plt.plot()函数的作用是绘制折线图,它的参数有很多,常用的函数参数如下: plt.plot(x,y,color,linestyle,linewidth,marker,markersize,markerfacecolor,markeredgewidth,markeredgecolor) 各参数具体

  • Python编程使用PyQt5制作动态钟表示例

    目录 前言 环境配置 实现思路 老式钟表制作 电子表制作 合并两表界面 核心代码 总结 前言 大家好,我是小张~ 记得小时候,家里只有一个钟表用来看时间(含有时针.分针.秒针的那种),挂在墙上哒哒哒响个不停,现在生活条件好了.基本人手一部手机,看时间也不再依靠表了,而今天的文章内容就是与这类钟表相关: 环境配置 程序中用到的Python包 PyQt5 math sys 实现思路 实现思路分为大致分为三个部分:老式钟表制作.电子表制作.两表合并为一个界面 老式钟表制作 整体来看老式钟表界面,有以下

  • Python编程实现超炫动态排序图

    目录 用 python 制作超燃动态排序视频 1,数据预处理 2,图表绘制 3,制作的图表转化为视频.动画 用 python 制作超燃动态排序视频 在开始之前,先贴张图,之前网上一段时间下面这种排序风格视频很火,下面这张图当作是视频其中的一帧. 制作这样视频的原理:就是把不同的帧组合在一起拼接成视频:把不同时间的排序图拼接在一起,拼接在一起形成一个随时间快速变化的动画,转化成视频,为了观看效果加一首很燃的BGM,最后的效果很赞. 这种视频 python 也能做,基本上分为三大部分,主要用到的就是

  • Python编程使用matplotlib挑钻石seaborn画图入门教程

    目录 scatter_plot lmplot jointplot 挑钻石第二弹 seaborn是matplotlib的补充包,提供了一系列高颜值的figure,并且集成了多种在线数据集,通过sns.load_dataset()进行调用,可供学习,如果网络不稳定,可下载到本地,然后在调用的时候使用把cache设为True. scatter_plot 官方的示例就很不错,绘制了diamonds数据集中的钻石数据.diamonds中总共包含十项数据,分别是重量/克拉.切割水平.颜色.透明度.深度.ta

  • Python使用Turtle模块绘制五星红旗代码示例

    在Udacity上课时学到了python的turtle方法,这是一个很经典的用来教小孩儿编程的图形模块,最早起源于logo语言.python本身内置了这个模块,其可视化的方法可以帮助小孩儿对编程的一些基本理念有所理解. 在作业提交的论坛里看到很多turtle画出来的精美图形,想不出什么要画的东西,于是决定拿五星红旗来练练手. 前期准备 五星红旗绘制参数 Turtle官方文档 turtle的基本操作 # 初始化屏幕 window = turtle.Screen() # 新建turtle对象实例 i

  • Python利用turtle库绘制彩虹代码示例

    语言:Python IDE:Python.IDE 需求 做出彩虹效果 颜色空间 RGB模型:光的三原色,共同决定色相 HSB/HSV模型:H色彩,S深浅,B饱和度,H决定色相 需要将HSB模型转换为RGB模型 代码示例: #-*- coding:utf-8 –*- from turtle import * def HSB2RGB(hues): hues = hues * 3.59 #100转成359范围 rgb=[0.0,0.0,0.0] i = int(hues/60)%6 f = hues/

  • Python中使用matplotlib绘制mqtt数据实时图像功能

    目录 效果图 mqtt发布 mqtt订阅 matplotlib绘制动态图 matplotlib绘制mqtt数据实时图像 效果图 mqtt发布 本代码中publish是一个死循环,数据一直往外发送. import random import time from paho.mqtt import client as mqtt_client import json from datetime import datetime broker = 'broker.emqx.io' port = 1883 t

  • Python编程获取终端命令行参数示例

    目录 实现步骤 命令行启动动态绑定端口号 代码实现 实现步骤 获取终端命令行参数,通过使用 sys.argv实现 1.导入sys模块 import sys 2.获取命令行参数 params = sys.argv print(params) print(params[1]) 获取到的为字符串类型,可能需要转换类型再使用 命令行启动动态绑定端口号 1.获取执行python程序的终端命令行参数 sys.argv 2.判断参数的类型,设置端口号必须是整型 if not sys.argv[1].isdig

  • matplotlib绘制动画代码示例

    matplotlib从1.1.0版本以后就开始支持绘制动画 下面是几个的示例: 第一个例子使用generator,每隔两秒,就运行函数data_gen: # -*- coding: utf-8 -*- import numpy as np import matplotlib.pyplot as plt import matplotlib.animation as animation fig = plt.figure() axes1 = fig.add_subplot(111) line, = a

随机推荐