基于Python绘制一个会动的3D立体粽子

 更新时间:2023年06月14日 09:29:30   作者:微小冷  
下周就要到端午节了,所以本文小编就来和大家分享一个有趣的Python项目——绘制会动的3D立体粽子,文中的示例代码讲解详细,感兴趣的可以了解一下

粽子曲面

之前通过matplotlib绘制了圆锥曲面,但matplotlib绘制曲面图有几个问题,其中plot_surface需要有规范的xOy坐标,然后根据其坐标绘制z轴参数;plot_trisurf则必须有明确的三角面的顶点。这些限制提高了绘制三维曲面的技术要求,所以接下来用open3d来以点云的形式来绘制一些更复杂的曲面。

首先就是下面这个参数方程对应的曲面

下面是绘图代码

import numpy as np
import open3d as o3d

def getSin(N):
    u = np.linspace(0, np.pi*2, N)
    v = np.linspace(0, np.pi*2, N)
    u,v = np.meshgrid(u,v)
    x = np.cos(u).reshape(-1)
    y = np.cos(v).reshape(-1)
    z = np.cos(u+v).reshape(-1)
    return np.array([x,y,z]).T

pcd = o3d.geometry.PointCloud()
pcd.points = o3d.utility.Vector3dVector(getSin(500))
o3d.visualization.draw_geometries([pcd])

最后效果如下,非常像一个粽子

真·粽子曲面

上面的粽子图,其实是散点图,只不过点数太多,看上去就比较连续,接下来通过open3d,将这个粽子的散点图,转换为粽子曲面。由于曲面生成的本质是绘制三角面,而随着点数的增多,所需绘制时间也就越长,故而少选一些点

tri = o3d.geometry.TriangleMesh

pcd = o3d.geometry.PointCloud()
pcd.points = o3d.utility.Vector3dVector(getSin(20))
mesh = tri.create_from_point_cloud_alpha_shape(pcd, 2)
mesh.compute_vertex_normals()
o3d.visualization.draw_geometries([mesh], mesh_show_back_face=True)

其中,o3d.geometry.TriangleMesh是一个类,之所以将其重新赋值,皆因后面调用的生成曲面的方法名字太长,这样可以缩减一下一行的长度。

compute_vertex_normals用于生成法线,如果没有这个,最后得到的曲面是看不出三维效果的。

最终得到的效果如下,像是个金属质感的粽子,还挺好看的

点击Ctrl+数字,可以更改曲面的配色,为了表现得更加细腻,下面用100×100的网格来生成粽子曲面,效果如下

正弦曲面

粽子曲面又叫余弦曲面,如果把cos换成sin,那么就得到了正弦曲面

其绘图代码如下

import numpy as np
import open3d as o3d

def getCos(N):
    u = np.linspace(0, np.pi*2, N)
    v = np.linspace(0, np.pi*2, N)
    u,v = np.meshgrid(u,v)
    x = np.sin(u).reshape(-1)
    y = np.sin(v).reshape(-1)
    z = np.sin(u+v).reshape(-1)
    return np.array([x,y,z]).T

pcd = o3d.geometry.PointCloud()
pcd.points = o3d.utility.Vector3dVector(getCos(500))
pcd.estimate_normals()
o3d.visualization.draw_geometries([pcd])

其中,estimate_normals用于估计点的法线,这样在绘图的时候会产生漂亮的光效,最终绘图结果如下,可见正弦曲面和余弦曲面的确有着类似互补的性质。

到此这篇关于基于Python绘制一个会动的3D立体粽子的文章就介绍到这了,更多相关Python粽子内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • OpenCV实现相机校正

    OpenCV实现相机校正

    这篇文章主要为大家详细介绍了OpenCV实现相机校正,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-05-05
  • python利用MethodType绑定方法到类示例代码

    python利用MethodType绑定方法到类示例代码

    这篇文章主要给大家介绍了关于python利用MethodType绑定方法到类的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面跟着小编来一起学习学习吧。
    2017-08-08
  • tensorflow实现残差网络方式(mnist数据集)

    tensorflow实现残差网络方式(mnist数据集)

    这篇文章主要介绍了tensorflow实现残差网络方式(mnist数据集),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-05-05
  • 用Python实现服务器中只重载被修改的进程的方法

    用Python实现服务器中只重载被修改的进程的方法

    这篇文章主要介绍了用Python实现服务器中只重载被修改的进程的方法,包括用watchdog来检测文件的变化等,实现起来充分体现了Python作为动态语言的灵活性,强烈推荐!需要的朋友可以参考下
    2015-04-04
  • Python实现批量图片转GIF动图(附源代码)

    Python实现批量图片转GIF动图(附源代码)

    本文介绍了一个Python实现的批量图片转GIF工具,提供简洁版和专业版两种实现方案,该工具支持从指定目录读取PNG/JPG/BMP等格式图片,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下
    2026-04-04
  • python利用TextBlob库实现轻松分析文本情感

    python利用TextBlob库实现轻松分析文本情感

    TextBlob是一个基于NLTK(Natural Language Toolkit)和Pattern库的Python库,它提供了一系列方便的接口和方法来处理文本数据,下面我们就来学习一下如何利用TextBlob库实现轻松分析文本情感吧
    2023-12-12
  • Python Paramiko模块的安装与使用详解

    Python Paramiko模块的安装与使用详解

    最近闲着学习python,看到有个paramiko模块,貌似很强大,所以从网上学习后总结了这篇文章,下面这篇文章就给大家介绍了Python中Paramiko模块的安装与使用,文中介绍的很详细,相信对大家的学习很有帮助,有需要的朋友们下面来一起看看吧。
    2016-11-11
  • python绘制横竖条形图的方法

    python绘制横竖条形图的方法

    这篇文章主要为大家详细介绍了python绘制横竖条形图的方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-04-04
  • Python简单网络编程示例【客户端与服务端】

    Python简单网络编程示例【客户端与服务端】

    这篇文章主要介绍了Python简单网络编程,详细介绍了客户端与服务端的具体实现技巧与相关注意事项,需要的朋友可以参考下
    2017-05-05
  • python实现冒泡排序算法的两种方法

    python实现冒泡排序算法的两种方法

    本篇文章主要介绍了python实现冒泡排序的两种方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-03-03

最新评论