Matplotlib学习---用mplot3d画莫比乌斯环(Mobius strip)
mplot3d是matplotlib里用于绘制3D图形的一个模块。关于mplot3d 绘图模块的介绍请见:https://blog.csdn.net/dahunihao/article/details/77833877。
莫比乌斯环(mobius strip)是一种只有一个曲面的拓扑结构。把一个纸条扭转180°后,两头再粘接起来,这样的纸带只有一个面(即单侧曲面),一只小虫可以爬遍整个曲面而不必跨过它的边缘。
莫比乌斯环是一个二维的紧致流形 (即一个有边界的面),可以嵌入到三维或更高维的流形中 。那么如何在3D空间上画莫比乌斯环呢?可以利用现有的方程式,将莫比乌斯环的两个参数(角度,宽度)映射到三维空间中。以下摘自维基百科(https://en.wikipedia.org/wiki/M%C3%B6bius_strip):
"""
One way to represent the Möbius strip as a subset of three-dimensional Euclidean space is using the parametrization:
where 0 ≤ u < 2π and −1 ≤ v ≤ 1. This creates a Möbius strip of width 1 whose center circle has radius 1, lies in the xyplane and is centered at (0, 0, 0). The parameter u runs around the strip while v moves from one edge to the other.
"""
大概的意思就是:这个方程组可以创造一个宽度为1,中心圆半径为1的莫比乌斯环,其所处位置为x-y平面,中心为(0,0,0)。参数u绕整个环转圈,参数v则从一个边缘移动到另一个边缘。
下面让我们一步一步来画莫比乌斯环。首先导入numpy,matplotlib和其3D模块,创建一个图形和一个三维坐标轴:
import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D fig = plt.figure() ax = plt.axes(projection='3d')
其次,定义u,v参数(u为绕环一圈的角度,v为环的宽度):
u = np.linspace(0, 2*np.pi, endpoint=True, num=50) v = np.linspace(-1, 1, endpoint=True, num=10)
然后,按照方程式,将u,v参数映射到三维空间(x轴,y轴和z轴):
u,v=np.meshgrid(u,v) u=u.flatten() v=v.flatten() x = (1 + 0.5 * v * np.cos(u / 2.0)) * np.cos(u) y = (1 + 0.5 * v * np.cos(u / 2.0)) * np.sin(u) z = 0.5 * v * np.sin(u / 2.0)
最后,选一个好看的配色方案,画出图像:
ax.plot_trisurf(x,y,z,cmap="cool")
此时图像如下:
可以看出图像已基本成型,但是部分地方还有缺角。这是因为三角剖分还不正确。可以使用matplotlib现成的方法定义三角剖分:
import matplotlib.tri as mtri tri = mtri.Triangulation(u, v)
最后的最后,把图像变大一点,把x轴,y轴和z轴的上下限修改一下,这样图像看起来更好一些。
完整代码如下:
import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D fig = plt.figure(figsize=(10,6)) ax = plt.axes(projection='3d')# u, v are parameterisation variables u = np.linspace(0, 2*np.pi, endpoint=True, num=50) v = np.linspace(-1, 1, endpoint=True, num=10)# This is the Mobius mapping, taking a u, v pair and returning an x, y, z # triple u,v=np.meshgrid(u,v) #用meshgrid函数来产生三维绘图时的矩阵 u=u.flatten() #把u展开,变成一维数组 v=v.flatten() #把v展开,变成一维数组 x = (1 + 0.5 * v * np.cos(u / 2.0)) * np.cos(u) y = (1 + 0.5 * v * np.cos(u / 2.0)) * np.sin(u) z = 0.5 * v * np.sin(u / 2.0)# Triangulate parameter space to determine the triangles import matplotlib.tri as mtri tri = mtri.Triangulation(u, v)# Plot the surface. The triangles in parameter space determine which x, y, z # points are connected by an edge. ax.plot_trisurf(x,y,z,cmap="cool",triangles=tri.triangles) ax.set_xlim(-1.1, 1.1) ax.set_ylim(-1.1, 1.1) ax.set_zlim(-1, 1)plt.show()
图像如下:
参考:https://matplotlib.org/gallery/mplot3d/trisurf3d_2.html?highlight=mobius
转载于:https://www.cnblogs.com/HuZihu/p/9441217.html
Matplotlib学习---用mplot3d画莫比乌斯环(Mobius strip)相关推荐
- 莫比乌斯函数_莫比乌斯环:python-matplotlib可视化实现
1 说明: ===== 1.1 莫比乌斯环:mobius strip,又叫莫比乌斯带. 1.2 公元1858年,德国数学家莫比乌斯(Mobius,1790~1868)和约翰·李斯丁发现. 图片来自网络 ...
- Python使用matplotlib进行3D可视化分析:3d柱状图、3d直方图、3d线框图、3d曲面图、3d翼面图(莫比乌斯环)
Python使用matplotlib进行3D可视化分析:3d柱状图.3d直方图.3d线框图.3d曲面图.3d翼面图(莫比乌斯环) 目录
- Matplotlib学习---用matplotlib画箱线图(boxplot)
箱线图通过数据的四分位数来展示数据的分布情况.例如:数据的中心位置,数据间的离散程度,是否有异常值等. 把数据从小到大进行排列并等分成四份,第一分位数(Q1),第二分位数(Q2)和第三分位数(Q3)分 ...
- Python实现3D莫比乌斯环的绘制
Python实现3D莫比乌斯环的绘制 在Python中,我们可以使用matplotlib库来实现3D图形的绘制,并且提供了很多方便的工具函数.本文将介绍如何使用Python绘制一个3D莫比乌斯环. 首 ...
- 莫比乌斯带catia建模_用sw2018制作莫比乌斯环图文教程
概述: 莫比乌斯环的概念来自于莫比乌斯带,公元1858年,德国数学家莫比乌斯(Mobius,1790-1868)和约翰·李斯丁发现:把一根纸条扭转180°后,两头再粘接起来做成的纸带圈,具有魔术般的性 ...
- python莫比乌斯_用python绘出一个莫比乌斯环
昨天写了一篇subplot的练习放到微信公众账号中,想用一个莫比乌斯环的图片作为封面图片,就去维基百科上扒了一个.但是分辨率很低,就想自己绘出一个来.没想到越陷越深,就一起把3D绘图给学习了一遍. ( ...
- python莫比乌斯环_【干货】用python绘出神奇的莫比乌斯环~
昨天写了一篇subplot的练习放到微信公众账号中,想用一个莫比乌斯环的图片作为封面图片,就去维基百科上扒了一个.但是分辨率很低,就想自己绘出一个来.没想到越陷越深,就一起把3D绘图给学习了一遍. 源 ...
- c莫比乌斯函数_代佳璇缘起一条莫比乌斯环,我爱上了难缠的数学!
上期回顾 代佳璇: 郑州市枫杨外国语学校八年级: 总成绩稳居年级前十. 自述 代佳璇 编辑 张璐莹 在小学阶段,大家可能都会遇到这样一种题:数一数图中有几条线段?变个问法:一共有三个人, ...
- python绘图工具基础-matplotlib学习之基本使用
matplotlib学习之基本使用 1.figure学习2.设置坐标轴3.Legend 图例4.Annotation 标注5.tick能见度 1.figure学习 导包 import matplotl ...
最新文章
- 数据结构50:二分查找法(折半查找法)
- Linux进程调度策略分析
- manifest.mf._MANIFEST.MF和feature.xml版本控制规则
- 两个精彩的比喻:吞吐量和延迟、信号量和互斥锁
- 传奇新增物品和装备的内观外观及特效Pak文件详解
- 拼多多砍价小程序源码/流量主系列微信小程序源码
- [系统安全] 十七.Windows PE病毒概念、分类及感染方式详解
- 详解电脑机械硬盘装什么系统好
- 设计一个小型的物联网应用系统_点赞 | 面向能源物联网的智能传感芯片设计与应用...
- 今年最后一月数据库排名公布!前三难以撼动!
- 计算机专业保研英语自我介绍,计算机专业保研面试英文自我介绍
- 混沌工程-为什么推广的如此困难
- word07去掉回车符
- 在Golang里如何实现结构体成员指针到结构体自身指针的转换
- 计算机主机如何睡眠,电脑如何设置睡眠
- 什么是共模干扰差模干扰共模信号差模信号
- 网络编程--TCP实例
- 「张一鸣」“突袭”「王兴」
- vue内容横向循环滚动_在Vue中使用better-scroll实现横向滚动和竖向滚动
- js实现简单的动态添加或删除一行数据
热门文章
- python 参数封装_扩展Python模块系列(三)----参数解析与结果封装
- 知识付费内容靠什么“变现”
- 自动编码器(AE、SDA、SDAE)的理解
- 软件架构设计系列总结—7—设计箴言理解
- 年终体检,你会紧张么?
- 外企面试的常见英语表达3
- 【java进阶06:数组】使用一维数组模拟栈数据结构 使用二维数组模拟酒店,酒店管理系统 Arrays工具类 冒泡排序算法、选择排序算法、二分法
- 力不如我的同学,靠这份Java面试八股文,秋招拿到了60w+的offer
- OSI 模型的七层是什么?
- bcc校验位怎么算的_BCC(异或校验)、CRC、LRC校验算法