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

news2024/11/18 3:41:42

文章目录

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

粽子曲面

之前通过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 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 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 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用于估计点的法线,这样在绘图的时候会产生漂亮的光效,最终绘图结果如下,可见正弦曲面和余弦曲面的确有着类似互补的性质。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/641912.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【AI人工智能】你们都是用它来干嘛?

🚀 个人主页 极客小俊 ✍🏻 作者简介:web开发者、设计师、技术分享博主 🐋 希望大家多多支持一下, 我们一起进步!😄 🏅 如果文章对你有帮助的话,欢迎评论 💬点赞&#x1…

基于Python的接口自动化测试框架

目录 前言: 项目背景 工具选择 框架思路 第三方库介绍 代码实现 不足之处 前言: Python是一种流行的编程语言,Python的易学性和易用性使得它成为编写接口自动化测试框架的理想选择。在Python中,有许多库可以帮助我们执行HTTP请求…

【探索 Kubernetes|作业管理篇 系列 8】探究 Pod 的 API 对象属性级别与重要字段用法

前言 大家好,我是秋意零。 本专栏上一篇中,我们介绍了 Pod 的核心思想以及 Pod 的工作原理。今天我们还是探讨 Pod ,聊一聊 Pod 的基本概念。 👿 简介 🏠 个人主页: 秋意零🧑 个人介绍&#x…

Centos7安装OpenJDK8到指定目录

系统配置 阿里云轻量应用服务器(Linux, centos7.9 x64) 安装步骤 1、官方下载OpenJDK 1.8 Java Platform, Standard Edition 8 ReferenceImplementations 2、通过WinScp工具,将下载好的安装包,上传到服务器 WinScp下载地址&…

ES7、ES8、ES9、ES10、ES11、ES12都增加了那些新特性?

大厂面试题分享 面试题库 前后端面试题库 (面试必备) 推荐:★★★★★ 地址:前端面试题库 web前端面试题库 VS java后端面试题库大全 ES7 ES2016(ES7)中新增了如下特性👇 Array.prototype…

批量压缩和修复Access数据库 Batch Access Database Compactor Crack

批量压缩和修复Access数据库 Batch Access Database Compactor 快速压缩和修复访问数据库。它是一个批处理Access数据库压缩程序,可以在不安装Office的情况下压缩和修复Access数据库。 Batch Access数据库压缩程序是一种软件工具,正如其标题所示&#x…

AC电源延长转换线:同为科技(TOWE)品牌,专注品质,安全连接

AC电源转换线虽是连接用电设备的一个配件,结构也相对简单,然而对用电设备的安全稳定运行起着重要的作用。AC电源转换线是通过电压较高的交流电的线材,因此产品质量需要具有一定安全标准。 即使AC电源转换线结构并不十分复杂,但也不…

学会使用这些Lumion照片级渲染技巧,秒出大片

Lumion 是一种渲染软件,可帮助建筑师以清晰、感性的方式传达他们的设计。十年来,人们发现 Lumion 的每个新版本都有新的功能、工作流程和控制方法。他们可以在 Revit、SketchUp 或其他 BIM 程序等软件中建模,并将模型导入 Lumion 进行渲染&am…

隐语“官网”新版上线!彩蛋连连,速来探索

距2022年7月隐语开源马上就要1周年啦🎉~隐语官网也迎来了2.0全新大改版。为了方便用户快速找到所需的文档,我们新增了“关键词”检索功能。前往官网,立即体验 https://www.secretflow.org.cn~还有惊喜彩蛋等你来探索&a…

国内精选五大优质互联网理财软件app最新排名(综合测评)

随着移动网络技术的飞速发展和大众经济水平的逐渐提高,现在市场上有很多互联网理财软件,选择一款好的软件是非常重要的。首先,要确保软件的安全性和可靠性,因为金融交易需要非常高的安全保障。 其次,要考虑软件的交易…

Channel通道使用进阶:通道关闭原则、生产者消费者问题、高并发map

1.Channel情况总结 在进行Channel通道使用之前,先根据总结有缓冲型channel使用的情况,若对下表有疑问可以前往Golang Channel 实现原理与源码分析进行阅读,如下所示: 从上表中我们可以发现,若我们已经对channel初始化…

测试老鸟整理,Selenium自动化测试POM模式分层实战(详细)

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 POM是Page Object…

3. SpringCloudAlibaba、nacos 实现配置中心

一、微服务中配置文件的问题 1.1 配置文件的问题: 配置文件的数量会随着服务的增加持续递增单个配置文件无法区分多个运行环境配置文件内容无法动态更新,需要重启服务 1.2 引入配置中心 引入配置中心:刚才架构就会成为这样。是由配置中心统…

ASP.NET Core Web API入门之二:Swagger详细使用路由设置

ASP.NET Core Web API入门之二:Swagger详细使用 一、引言二、Swagger的作用以及优点2.1 作用2.2 优点 三、API接口添加注释3.1 编辑项目文件3.2 修改 Startup.cs 文件的 ConfigureServices 方法3.3 修改浏览器的网页标题3.4 注册路由中间件3.4 接口添加注释 四、运行…

基于html+css的图展示125

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…

项目管理专业人员能力评价(CSPM)好考吗?考试时间什么时候?

2021年10月,中共中央、国务院发布的《国家标准化发展纲要》明确提出构建多层次从业人员培养培训体系,开展专业人才培养培训和国家质量基础设施综合教育。建立健全人才的职业能力评价和激励机制。由中国标准化协会(CAS)组织开展的项…

和数集团Baas服务如何推动区块链技术应用和产业发展?

近日,《区块链和分布式记账技术 参考架构》(GB/T 42752-2023)国家标准正式发布。这是我国首个获批发布的区块链技术领域国家标准。该标准在区块链技术应用和产业发展方面提出了参考架构规范,包括用户视图、功能视图、实现视图和部署视图。在功能架构方面…

启程阿拉德之怒三端架设教程

阿拉德之怒是一款横版动作冒险RPG手游,游戏采用虚拟按键模式呈现指尖上的连击盛宴,波动血气等不同的奥义带来多系转职技能,讲述不同时空交错的节点诞生的大陆之上,来个各界的强者们汇聚在一起冒险战斗故事,领悟鬼手之力…

基于ubuntu22.04-深入浅出 eBPF

笔者在很早之前就看eBPF这类似的文章,那时候看这个技术一脸懵逼,不知道它是用来做什么,可以解决什么问题。所以也没有太关注这个技术。很庆幸最近刚好有机会研究这个技术。 什么是BPF BPF的全称是Berkaley Packet Filter,即伯克利报文过法器…

计算机视觉的应用7-利用YOLOv5模型启动电脑摄像头进行目标检测

大家好,我是微学AI,今天给大家介绍一下计算机视觉的应用7-利用YOLOv5模型启动电脑摄像头进行目标检测,本文将详细介绍YOLOv5模型的原理,YOLOv5模型的结构,并展示如何利用电脑摄像头进行目标检测。文章将提供样例代码&a…