用python画动态三维轨迹_Python学习(一) —— matplotlib绘制三维轨迹图

在研究SLAM时常常需要对其输出的位姿进行复现以检测算法效果,在ubuntu系统中使用Python可以很好的完成相关的工作。

一. Ubuntu下Python的使用

在Ubuntu下使用Python有两种方法,一种是直接在控制台中运行Python文件,一种是下载IDE编辑并运行Python文件。

在控制台中使用Python方法如下:

首先确认有Python文件(filename.py),然后打开控制台进入文件当前目录,并输入以下内容就可以运行了。

python file_name.py

虽然控制台可以运行Python,不过由于不能调试等问题仍然比较推荐使用IDE。

官网中提供professional和community两种版本,因为community版本免费大家可以直接下载使用。下载好后直接放到安装目录中解压,然后跟着解压后的说明文件执行安装命令即可安装成功(部分电脑由于配置原因可能会报错,网上有很多讲解配置环境安装博客,大家可以参考)。安装成功后,PyCharm界面如下图。

L3Byb3h5L2h0dHBzL2ltYWdlczIwMTUuY25ibG9ncy5jb20vYmxvZy8xMTIzOTE3LzIwMTcwMy8xMTIzOTE3LTIwMTcwMzI5MTgyMzU1MDI5LTgyODY4NTQ2OC5wbmc=.jpg

二. matplotlib绘制三维轨迹

Matplotlib是Python的一个绘图库,想面将讲解如何使用这个库来绘制三维线段,以此检测SLAM算法的输出结果(电脑配置Python 2.7)。

2.1. 绘制基本三维曲线

首先给出完整代码,以及输出结果。

# import necessary module

from mpl_toolkits.mplot3d import axes3d

import matplotlib.pyplot as plt

import numpy as np

# load data from file

# you can replace this using with open

data1 = np.loadtxt("./stereo/CameraTrajectoryNew2000.txt")

first_2000 = data1[:, 3]

second_2000 = data1[:, 7]

third_2000 = data1[:, 11]

# print to check data

print first_2000

print second_2000

print third_2000

# new a figure and set it into 3d

fig = plt.figure()

ax = fig.gca(projection='3d')

# set figure information

ax.set_title("3D_Curve")

ax.set_xlabel("x")

ax.set_ylabel("y")

ax.set_zlabel("z")

# draw the figure, the color is r = read

figure = ax.plot(

  • 2
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
三维函数,可以使用Python中的Matplotlib模块。以下是一个简单的例子: ```python import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D # 定义函数 def f(x, y): return np.sin(np.sqrt(x**2 + y**2)) # 生成数据 x = np.linspace(-5, 5, 50) y = np.linspace(-5, 5, 50) X, Y = np.meshgrid(x, y) Z = f(X, Y) # 绘制形 fig = plt.figure() ax = fig.add_subplot(111, projection='3d') ax.plot_surface(X, Y, Z) plt.show() ``` 如果要使用VTK来实现三维模型的显示和切割,可以参考下面的代码: ```python import vtk # 读取STL文件 reader = vtk.vtkSTLReader() reader.SetFileName("model.stl") reader.Update() # 显示模型 mapper = vtk.vtkPolyDataMapper() mapper.SetInputConnection(reader.GetOutputPort()) actor = vtk.vtkActor() actor.SetMapper(mapper) renderer = vtk.vtkRenderer() renderer.AddActor(actor) renderWindow = vtk.vtkRenderWindow() renderWindow.AddRenderer(renderer) # 切割模型 plane = vtk.vtkPlane() plane.SetOrigin(0, 0, 0) plane.SetNormal(1, 0, 0) cutter = vtk.vtkCutter() cutter.SetInputConnection(reader.GetOutputPort()) cutter.SetCutFunction(plane) cutter.Update() cutterMapper = vtk.vtkPolyDataMapper() cutterMapper.SetInputConnection(cutter.GetOutputPort()) cutterActor = vtk.vtkActor() cutterActor.SetMapper(cutterMapper) # 显示切割后的模型 renderer2 = vtk.vtkRenderer() renderer2.AddActor(cutterActor) renderWindow2 = vtk.vtkRenderWindow() renderWindow2.AddRenderer(renderer2) # 显示窗口 iren = vtk.vtkRenderWindowInteractor() iren.SetRenderWindow(renderWindow) iren.Initialize() iren.Start() ``` 这个例子中,我们首先读取一个STL文件,然后显示整个模型。接着,我们定义了一个切割平面,使用vtkCutter对模型进行切割,并显示切割后的模型。最后,我们使用vtkRenderWindowInteractor来显示窗口,并启动事件循环。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值