给大家分享几种用python绘制三维的几何体的方法:

1.3维柱体

import vtk# *************柱体****************
# 生成一个中心在渲染场景原点的柱体,柱体的长轴沿着Y轴,柱体的高度、截面半径等都可以任意指定
cylinder = vtk.vtkCylinderSource()
# 高
cylinder.SetHeight(3.0)
# 截面半径
cylinder.SetRadius(1.0)
# 横截面边数
cylinder.SetResolution(360)
print(f"高:{cylinder.GetHeight()}、半径:{cylinder.GetRadius()}、面:{cylinder.GetResolution()}")
# 映射,将输入的数据转换为几何图元(点、线、多边形)进行渲染
cylinderMapper = vtk.vtkPolyDataMapper()
# 设置 VTK 可视化管线的输入数据接口,对应的可视化管线输出数据的接口为 GetOutputPort()
cylinderMapper.SetInputConnection(cylinder.GetOutputPort())# 三维空间中渲染对象最常用的 vtkProp 子类是 vtkActor(表达场景中的几何数据)和 vtkVolume(表达场景中的体数据)
"""vtkProp子类负责确定渲染场景中对象的位置、大小和方向信息。
Prop依赖于两个对象(Prop一词来源于戏剧里的“道具”,在VTK里表示的是渲染场景中可以看得到的对象。)
一个是Mapper(vtkMapper)对象,负责存放数据和渲染信息,另一个是属性(vtkProperty)对象,负责控制颜色、不透明度等参数。
"""
cylinderActor = vtk.vtkActor()
# 绘制对象添加映射器,设置生成几何图元的Mapper,即连接一个Actor到可视化管线的末端(可视化管线的末端就是Mapper)
cylinderActor.SetMapper(cylinderMapper)# 绘制器,负责管理场景的渲染过程。
# 组成场景的所有对象包括Prop,照相机(Camera)和光照(Light)都被集中在一个vtkRenderer对象中。
# 一个vtkRenderWindow中可以有多个vtkRenderer对象,而这些vtkRenderer可以渲染在窗口中不同的矩形区域中(即视口),或者覆盖整个窗口区域。
renderer = vtk.vtkRenderer()
# 绘制器添加对象,添加vtkProp类型的对象到渲染场景中
renderer.AddActor(cylinderActor)
# 绘制器设置背景,设置渲染场景的背景颜色
renderer.SetBackground(0.1,0.2,0.4)
print("Renderer bg:",renderer.GetBackground())
# SetBackground2()用于设置渐变的另外一种颜色
renderer.SetBackground2(1.0,1.0,1.0)
# 打开背景颜色渐变效果,相当于调用方法 GradientBackgroundOn()
renderer.SetGradientBackground(1)# 绘制窗口,将操作系统与VTK渲染引擎连接到一起
renWin = vtk.vtkRenderWindow()
# 绘制窗口添加绘制器,加入 vtkRenderer 对象
renWin.AddRenderer(renderer)
# 设置窗口的大小,以像素为单位
renWin.SetSize(1200,1200)
print("Window size:",renWin.GetSize())
# 绘制窗口内所有绘制器同步渲染绘制
#renWin.Render()
# 交互器,提供平台独立的响应鼠标、键盘和时钟事件的交互机制
"""vtkRenderWindowInteractor自动建立一个默认的3D场景交互器样式(Interactor Style):vtkInteractorStyleSwitch,
当然你也可以选择其他的交互器样式,或者是创建自己的交互器样式"""
i_ren = vtk.vtkRenderWindowInteractor()
# 交互器绑定绘制窗口,设置渲染窗口,消息是通过渲染窗口捕获到的,所以必须要给交互器对象设置渲染窗口
i_ren.SetRenderWindow(renWin)
# 为处理窗口事件做准备,交互器工作之前必须先调用这个方法进行初始化
i_ren.Initialize()
# 开始进入事件响应循环,交互器处于等待状态,等待用户交互事件的发生
i_ren.Start()

运行结果:

2:立方体

import vtk
# 1. 读取数据
cube = vtk.vtkCubeSource()
cube.Update()#记得加这句不加看不到模型
# 2. 建图(将点拼接成立方体)
cube_mapper = vtk.vtkPolyDataMapper()
cube_mapper.SetInputData(cube.GetOutput())
# 3. 根据2创建执行单元
cube_actor = vtk.vtkActor()
cube_actor.SetMapper(cube_mapper)cube_actor.GetProperty().SetColor(1.0, 0.0, 0.0)
# 4. 渲染(将执行单元和背景组合在一起按照某个视角绘制)
renderer = vtk.vtkRenderer()
renderer.SetBackground(0.0, 0.0, 0.0)#背景只有一个所以是Set()
renderer.AddActor(cube_actor)#因为actor有可能为多个所以是add()# 5. 显示渲染窗口
render_window = vtk.vtkRenderWindow()
render_window.SetWindowName("My First Cube")
render_window.SetSize(400,400)
render_window.AddRenderer(renderer)# 渲染也会有可能有多个渲染把他们一起显示
# 6. 创建交互控键(可以用鼠标拖来拖去看三维模型)
interactor = vtk.vtkRenderWindowInteractor()
interactor.SetRenderWindow(render_window)
interactor.Initialize()
render_window.Render()
interactor.Start()

运行结果:

3:旋转棱柱:

import vtk
import timecone = vtk.vtkConeSource()
cone.SetHeight(3.0)
cone.SetRadius(1.0)
cone.SetResolution(10)coneMapper = vtk.vtkPolyDataMapper()
coneMapper.SetInputConnection(cone.GetOutputPort())coneActor = vtk.vtkActor()
coneActor.SetMapper(coneMapper)ren1 = vtk.vtkRenderer()
ren1.AddActor(coneActor)
ren1.SetBackground(0.1, 0.2, 0.4)renWin = vtk.vtkRenderWindow()
renWin.AddRenderer(ren1)
renWin.SetSize(300, 300)for i in range(0, 360):time.sleep(0.08)renWin.Render()ren1.GetActiveCamera().Azimuth(i)

利用Python绘制三维的规则体(3维柱体、立方体和旋转棱柱)相关推荐

  1. Python绘制三维立体图详解与绘图填充

    1.利用Python绘制三维图 目标: 绘制图像 z^2 = x^2 + y^2 + x/3 + y/3 1.第一步我们先导入画图所需要的包: import matplotlib.pyplot as ...

  2. Python绘制三维图详解

    利用Python绘制三维图 目标: 绘制图像z2=x2+y2z^2 = x^2 + y^2z2=x2+y2 import matplotlib.pyplot as plt import numpy a ...

  3. python画车辆轨迹图_如何利用 Python 绘制酷炫的 车辆轨迹 — 速度时空图?三维数据用二维图像呈现...

    说明:本文系交通攻城狮原创文章,如需转载请私信联系,侵权必究. 2020,第 30 期,编程笔记 建议直接阅读精编版:如何利用 Python 绘制酷炫的 车辆轨迹 - 速度时空图?三维数据用二维图像呈 ...

  4. 利用Python绘制 3D 体素色温图

    简 介: 测试了Matplotlib中的 体素绘制函数 voxels() ,但是无论是在 AI Studio中执行,还是直接在本地执行,都会出了错误.也就是无法通过 gca(projection='3 ...

  5. 怎么用python找论文_如何利用Python绘制学术论文图表方法

    论文中图表形式多样,常用的处理工具有excel.MATLAB以及Python等,excel自处理的方法有两个缺陷: 1.当数据较多时,容易出现excel"翻白眼"的现象: 2.需要 ...

  6. python画曲线图-利用python绘制数据曲线图的实现

    "在举国上下万众一心.众志成城做好新冠肺炎疫情防控工作的特殊时刻,我们不能亲临主战场,但我们能坚持在大战中坚定信心.不负韶华." 1.爬取新闻保存为json文件,并将绘图所需数据保 ...

  7. python canvas画弧度_编程作战丨如何利用python绘制可爱皮卡丘?

    好莱坞真人电影<精灵宝可梦:大侦探皮卡丘>预告片已经发布了,正片将于今年5月10日上映. 如果要做一个「童年梦想排行榜」的话,相信「拥有一只皮卡丘」这个梦想一定会名列前茅! 毕竟,谁不想揉 ...

  8. python打印皮卡丘步骤_编程作战丨如何利用python绘制可爱皮卡丘?

    好莱坞真人电影<精灵宝可梦:大侦探皮卡丘>预告片已经发布了,正片将于今年5月10日上映. 如果要做一个「童年梦想排行榜」的话,相信「拥有一只皮卡丘」这个梦想一定会名列前茅! 毕竟,谁不想揉 ...

  9. 利用python绘制自定义棋盘格

    相机标定需要用到棋盘格,故利用python绘制自定义棋盘格 参考了站内代码,自己进行了修改,可以自定义棋盘格长宽和方块大小,并保存为图片. 安好numpy和opencv 拿来就能用. import n ...

  10. python好看图案的编程代码_利用Python绘制了一些有意思的图案

    下载W3Cschool手机App,0基础随时随地学编程导语 花了点时间利用Python绘制了一些有意思的图案,也算是发掘了一下Python的可视化功能吧... PS: 部分图案参考了一些博客的一部分源 ...

最新文章

  1. 沉浸式导航栏html,混合开发 h5+ 沉浸式的适配
  2. 著名IT公司名字来由
  3. 使用JFreeChart在网页上绘制平滑曲线
  4. [python]使用virtualenv处理python版本问题
  5. 论文浅尝 - EMNLP2020 | 通过词重排序跨语言解析
  6. 火狐浏览器摄像头权限怎么开启 火狐浏览器摄像头权限开启的方法
  7. 斯坦福用普通相机和激光笔实现“穿墙透视”,连你的证件都能看清
  8. java fastjson vector转为json_java对象与Json字符串之间的转化(fastjson)
  9. 永久居家办公,你愿意吗?
  10. python38环境变量的配置_Windows下python环境变量配置
  11. Spark Streaming揭秘 Day6 关于SparkStreaming Job的一些思考
  12. springcloud整合sentinel
  13. Vue3 JSON编辑器
  14. 20个常用模拟电路(详细分析)
  15. AI助力教学升级,掌门优课智能互动双师课程获用户认可
  16. 真探rust和maggie_《真探》报选艾美最佳剧情类 老白与Rust将厮杀
  17. 关于m3u8转MP4的几种情况
  18. ppt文字磨砂玻璃效果制作教程
  19. Ubuntu 测网速
  20. 解决 Error: spawn xdg-open ENOENT

热门文章

  1. 栈(Stack)——后进先出(LIFO)的数据结构(Data Structures)
  2. 前端多语言开发,如何中英文切换
  3. 深度学习实战案例:新闻文本分类
  4. java 视频转mp4_java视频转码mov转MP4
  5. 硕士研究生计算机专业录取分数线,全国所计算机研究生录取分数线.doc
  6. 机器人领域的会议和期刊【补充】
  7. LaTeX打出罗马数字、希腊字母和大写空心粗体字母
  8. python如何用opencv把一个视频按每10秒一小段切割
  9. 获取验证码以及验证验证码
  10. Java简答题整理(一)