端午节到了,用Python画一个粽子吧!

news/2024/10/23 11:24:24/

文章目录

    • 粽子曲面
    • 真·粽子曲面
    • 正弦曲面

粽子曲面

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

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

{ x = a cos ⁡ u y = a cos ⁡ v z = a cos ⁡ ( u + v ) u , v ∈ ( 0 , 2 π ) \left\{\begin{aligned} x&=a\cos u\\ y&=a\cos v\\ z&=a\cos(u+v) \end{aligned}\right.\quad u,v \in (0,2\pi) xyz=acosu=acosv=acos(u+v)u,v(0,2π)

下面是绘图代码

import numpy as np
import open3d as o3ddef 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]).Tpcd = o3d.geometry.PointCloud()
pcd.points = o3d.utility.Vector3dVector(getSin(500))
o3d.visualization.draw_geometries([pcd])

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

在这里插入图片描述

真·粽子曲面

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

tri = o3d.geometry.TriangleMeshpcd = 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 100\times100 100×100的网格来生成粽子曲面,效果如下

在这里插入图片描述

正弦曲面

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

{ x = a sin ⁡ u y = a sin ⁡ v z = a sin ⁡ ( u + v ) u , v ∈ ( 0 , 2 π ) \left\{\begin{aligned} x&=a\sin u\\ y&=a\sin v\\ z&=a\sin(u+v) \end{aligned}\right.\quad u,v \in (0,2\pi) xyz=asinu=asinv=asin(u+v)u,v(0,2π)

其绘图代码如下

import numpy as np
import open3d as o3ddef 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]).Tpcd = o3d.geometry.PointCloud()
pcd.points = o3d.utility.Vector3dVector(getCos(500))
pcd.estimate_normals()
o3d.visualization.draw_geometries([pcd])

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

在这里插入图片描述


http://www.ppmy.cn/news/366490.html

相关文章

第七十三天学习记录:计算机硬件技术基础:微型计算机基础

一、微型计算机的组成: 微型计算机由硬件和软件两大部分组成,硬件是指构成微型计算机的物理实体或物理装置,包括微型计算机的微处理器、储存器、总线接口电路和外部设备,以及电源和机械构件等。软件是指微型计算机所使用的各种程…

东芝雾语冰箱新品发布,搭载雾化保鲜科技还原果蔬鲜润

5月23日,东芝冰箱联合京东一起,携手花加、视觉中国、米其林三星日料大师等多位大咖,举办了中国首个沉浸式原始森林发布会,推出了东芝雾语冰箱,演绎了一场森林声色味盛宴。发布会上,视觉中国签约摄影师李珩说…

想提升居家生活幸福感?Samsung BESPOKE系列冰箱带给你

列夫托尔斯泰曾说:“有生活的时候就有幸福”。后疫情时代下,人们对于居家生活的体验愈发重视,不少人经常会被“种草”一些居家生活好物,给日常生活增加幸福感。在家居环境里,最常用的物品往往能够决定居家生活的体验&a…

追求“美”、定制“美”,Samsung BESPOKE系列冰箱诠释三星美学

在这个时代,“美”不再是抽象的概念,而是身边大大小小的物件,是具象的生活方式,更是生活的本身。人们对于各种物品的追求已经不止停留在“用”的阶段,即使购买以实用为主的文具、厨具、家电等商品,“美”也…

告别身材焦虑,Samsung BESPOKE系列冰箱为营养新鲜加冕

身材焦虑是现代年轻人心中的一大“心病”,越来越多的人被卷入减肥的行列中。俗话说“七分吃三分练”,一个健康有美感的好身材离不开适量运动,更离不开营养丰富的每一餐。三星冰箱在保鲜技术方面深耕已久,旗下的Samsung BESPOKE系列…

科技为新鲜加冕,三星品道家宴系列新品冰箱科技实力解析

科技让生活日新月异,许多事物因为科学技术的发展而发生巨变,以每天都要用到的家电为例,小时候电视机的机身是厚重的,到如今却越来越纤薄;以前冰箱的存储空间是狭小的,而到今天却有着超大容量。当然&#xf…

多重保鲜技术为新鲜加冕,三星冰箱为你的中秋“保鲜”

“万里无云镜九州,最团圆夜是中秋。”中秋将至,秋天的萧索催促着行人归乡。其实,每年中秋回家,最重要的还是那顿团圆饭,团圆饭代表着团聚,家人坐在一起,几道菜,一轮月,便…

三星发布KHAN系列多门冰箱新品

好工具讯 8月17日消息,三星电子于昨日推出了KHAN系列多门冰箱新品,同时发布了冰箱行业首个保鲜指数——《果蔬保鲜时刻表》,并通过了权威检测机构检测。此次《果蔬保鲜时刻表》的发布及三星KHAN系列多门冰箱的推出,将更加有助于推…