Python德劳内三角剖分

news2024/11/28 10:35:39

文章目录

    • 初步认识
    • 构造函数和属性
    • 实战-画个球

初步认识

对于熟悉matplotlib三维画图的人来说,最常用的应该是plot_surface,但这个函数的绘图逻辑是,将xy平面映射到z轴,所以没法一次性绘制球,只能把球分成两半,上半球和下半球分别绘制。

如果想一次性绘制封闭图形,则可通过tri_surface,其绘图逻辑便是将图形拆分成一个个三角面,然后在对这些三角面进行绘制。所以,将一个曲面拆分成三角面,便构成了一个非常现实的问题,德劳内三角剖分便是建立在这个问题背景之下的。

scipy.spatial中提供了Delaunay类,下面以二维散点为例,来初步认识一下。

import numpy as np
import matplotlib.pyplot as plt
from scipy.spatial import Delaunay

pts = np.array([[0, 0], [0, 1], [2, 0], [2, 1]])
tri = Delaunay(pts)
plt.triplot(pts[:,0], pts[:,1], tri.simplices)
plt.plot(pts[:,0], pts[:,1], 'o')
plt.show()

效果如下

在这里插入图片描述

构造函数和属性

Delaunay的构造函数如下

Delaunay(points, furthest_site=False, incremental=False, qhull_options=None)

各参数含义为

  • points 输入散点
  • furthest_siteTrue时,计算最远点
  • incrementalTrue时,允许增量添加点
  • qhull_optionsqhull参数,具体可参考qhull

Delaunay对象中,有下面几个必须知道的常用属性

  • points 即输入的点集
  • simplices 三角面顶点在点集中的序号
  • neighbors 三角面相邻三角面的序号
  • equations 三角面方程

实战-画个球

想要画个球,第一步是要得到一个球

# N为点数
def getBall(N):
    pts = []
    while len(pts) < N:
        while True:
            u = np.random.uniform(-1, 1)
            v = np.random.uniform(-1, 1)
            r2 = u**2 + v**2
            if r2 < 1:
                break
        x = 2*u*np.sqrt(1-r2)
        y = 2*v*np.sqrt(1-r2)
        z = 1 - 2*r2
        pts.append((x,y,z))
    return np.vstack(pts)

下面测试一下

pts = getBall(200)
ax = plt.subplot(projection='3d')
ax.scatter(pts[:,0], pts[:,1], pts[:,2])
plt.show()  

在这里插入图片描述

接下来将这些随机点生成三角面,并进行绘图

tri = Delaunay(pts)

ax = plt.subplot(projection='3d')
for i in tri.simplices:
    ax.plot_trisurf(pts[i, 0], pts[i, 1], pts[i,2])

plt.show()

效果如下

在这里插入图片描述
看上去花花绿绿的这些三角形,便是通过德劳内三角剖分得到的,其equations属性可以查看这些三角面的方程参数

>>> tri.equations
array([[-2.35739179e-16, -1.64155539e-15, -1.54600295e-15,
        -1.00000000e+00,  2.41181971e-16],
       [-2.35739179e-16, -1.64155539e-15, -1.54600295e-15,
        -1.00000000e+00,  2.41181971e-16],
       [-2.35739179e-16, -1.64155539e-15, -1.54600295e-15,
        -1.00000000e+00,  2.41181971e-16],
       ...,
       [-2.35739179e-16, -1.64155539e-15, -1.54600295e-15,
        -1.00000000e+00,  2.41181971e-16],
       [-2.35739179e-16, -1.64155539e-15, -1.54600295e-15,
        -1.00000000e+00,  2.41181971e-16],
       [-2.35739179e-16, -1.64155539e-15, -1.54600295e-15,
        -1.00000000e+00,  2.41181971e-16]])
``

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

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

相关文章

python+nodejs+php+springboot+vue 企业仓库进销存管理系统

提供管理员管理和数据备份&#xff0c;确保信息的安全性和可靠性。仓库管理是企业的核心&#xff0c;是必不可少的一个部分。在企业的整个供应链中&#xff0c;仓库管理担负着最重要的角色。为满足如今日益复杂的管理需求&#xff0c;各类仓库管理程序也在不断改进。本系统除了…

三大本土化战略支点,大陆集团扩大中国市场生态合作「朋友圈」

“在中国&#xff0c;大陆集团已经走过30余年的发展与耕耘历程&#xff0c;并在过去10年间投资了超过30亿欧元。中国市场也成为了我们重要的‘增长引擎’与‘定海神针’。未来&#xff0c;我们将继续深耕中国这个技术导向的市场。”4月19日上海车展上&#xff0c;大陆集团首席执…

Python中的数据类型(python专栏002)

Python 中常用的数据类型包括&#xff1a; 数字类型&#xff1a;包括整型(int)、长整型(long)、浮点型(float)、复数型(complex)。字符串类型(str)&#xff1a;用于保存文本数据&#xff0c;可以使用单引号、双引号或三引号来定义字符串。列表类型(list)&#xff1a;可以保存多…

LeetCode:19. 删除链表的倒数第 N 个结点

&#x1f34e;道阻且长&#xff0c;行则将至。&#x1f353; &#x1f33b;算法&#xff0c;不如说它是一种思考方式&#x1f340; 算法专栏&#xff1a; &#x1f449;&#x1f3fb;123 一、&#x1f331;19. 删除链表的倒数第 N 个结点 题目描述&#xff1a;给你一个链表&a…

安装torch-cluster、torch-geometric、torch-scatter、torch-sparse、torch-spline-conv等库

在安装torch-cluster、torch-geometric、torch-scatter、torch-sparse、torch-spline-conv这些库时&#xff0c;要确保所下载的库与自己的torch和CUDA版本相匹配。以下是详细的步骤来找到并安装相应版本的库&#xff1a; 步骤一&#xff1a;首先&#xff0c;我们需要查看当前系…

【LeetCode】27. 消失的数字

题目链接&#xff1a;https://leetcode.cn/problems/remove-element/ &#x1f4d5;题目要求&#xff1a; 给你一个数组 nums 和一个值 val&#xff0c;你需要 原地 移除所有数值等于 val 的元素&#xff0c;并返回移除后数组的新长度。 不要使用额外的数组空间&#xff0c;…

HashMap底层源码解析及红黑树分析

HashMap线程不安全&#xff0c;底层数组链表红黑树 面试重点是put方法&#xff0c;扩容 总结 put方法 HashMap的put方法&#xff0c;首先通过key去生成一个hash值&#xff0c;第一次进来是null&#xff0c;此时初始化大小为16&#xff0c;i (n - 1) & hash计算下标值&a…

PWM输入信号转换模拟量电压电流隔离变送器1Hz~10KHz转0-10V/1-5V/4-20mA

主要特性: >>精度等级&#xff1a;0.1级。产品出厂前已检验校正&#xff0c;用户可以直接使用 >>辅助电源&#xff1a;8-32V 宽范围供电 >>PWM脉宽调制信号输入: 1Hz~10KHz >>输出标准信号&#xff1a;0-5V/0-10V/1-5V,0-10mA/0-20mA/4-20mA等&…

有什么牌子台灯性价比高?性价比最高的护眼台灯

由心感叹现在的孩子真不容易&#xff0c;学习压力比我们小时候大太多&#xff0c;特别是数学&#xff0c;不再是简单的计算&#xff0c;而更多的是培养学生其他思维方式&#xff0c;有时候我都觉得一年级数学题是不是超纲了。我女儿现在基本上都是晚上9点30左右上床睡觉&#x…

RK3399平台开发系列讲解(FLASH篇)MTD子系统结构

平台内核版本安卓版本RK3399Linux4.4Android7.1🚀返回专栏总目录 文章目录 一、什么是MTD二、MTD系统结构沉淀、分享、成长,让自己和他人都能有所收获!😄 📢Linux内核对Flash存储器有很好的支持。内核设计了一个MTD(Memory Technology Device,内存技术设备)结构支持F…

平安银行潘多拉指标平台建设案例

潘多拉指标平台是平安银⾏指标管理和指标应⽤的统⼀平台。该平台以业务场景为驱动&#xff0c;提供了 AIBI内容的基础能⼒&#xff0c;并结合组件化开放平台&#xff0c;提供数据分析与应⽤的⼀站式解决⽅案。内容⽅⾯&#xff0c;提供了指标、维度和标签的录⼊、发布和规范化管…

一文看懂数据分析必备计算功能—内存计算

各位数据的朋友&#xff0c;大家好&#xff0c;我是老周道数据&#xff0c;和你一起&#xff0c;用常人思维数据分析&#xff0c;通过数据讲故事。 接下来&#xff0c;我们准备讲一系列的奥威BI软件的内存计算在各种分析场景中的应用。在正式开讲之前&#xff0c;我先简单说一下…

什么是阻抗?影响阻抗的因素有哪些?

问 什么是阻抗&#xff1f; 答 在具有电阻、电感和电容的电路里&#xff0c;对电路中的电流所起的阻碍作用叫做阻抗。 问 什么是阻抗匹配&#xff1f; 答 阻抗匹配是指信号源或者传输线跟负载之间达到一种适合的搭配。阻抗匹配主要有两点作用&#xff0c;调整负载功率和…

MATLAB函数封装2:QT调用封装函数

在利用MATLAB进行封装函数之后&#xff0c;最主要的目的是对函数进行调用&#xff0c;能够对矩阵运算和其他算法的运行进行快捷处理。 在有了MATLAB函数之后封装成DLL文件之后&#xff0c;在QT中添加动态链接库&#xff0c;就可以实现函数的调用过程&#xff0c;这个过程相对简…

「OceanBase 4.1 体验」OceanBase 4.1社区版的部署及使用体验

「OceanBase 4.1 体验」OceanBase 4.1社区版的部署及使用体验 一、前言1.1 本次实践介绍1.2 本次实践目的 二、准备环境资源2.1 部署前需准备工作2.2 本地环境规划 三、部署Docker环境3.1 安装Docker3.2 配置Docker镜像加速3.3 开启路由转发3.4 重启Docker服务 四、检查本地Doc…

开发者如何成为更好的自己,耐心和观察是关键

个人成长需要有耐心和观察力&#xff0c;这是一个“等待并观察”的视角。个人成长是一个自我提升的过程&#xff0c;需要结合耐心和观察力。这个过程可能会面临挑战&#xff0c;需要花费很多时间和精力&#xff0c;但最终的结果是值得的。耐心和观察是个人成长过程中的两个重要…

windows搭建一个FTP服务器超详细

一.场景&#xff1a; 在开发过程中需要FTP文件上传下载功能&#xff0c;需要在本地或者服务器上搭建一个FTP服务器。 二.详细步骤&#xff1a; 1. 安装FTP服务器支持和配置IIS web服务器 打卡“启动关闭Window功能” 控制面板>程序>启动或关闭Windows功能 或者选择快…

明确自动化测试目的

明确自动化测试目的 1.提高测试人员的工作成就感和幸福感&#xff0c;减少手工测试中重复性的工作 目前&#xff0c;在大部分中小企业中&#xff0c;手工测试在日常测试工作占据的比例很大。测试人员必须跟随开发团队不断地进行选代式开发和测试。一个功能模块可能在整个测试周…

会声会影2023中文旗舰版新增功能讲解及下载更新教程

本次更新不仅带来了标题动作、标题特效、转场特效、音频标记等功能的更新&#xff0c;也增强了热门的GIF创作器、定格动画制作、多语字幕、短时长转场等功能&#xff0c;让大家能体验到更加新潮的视频制作方式。会声会影2023是一款视频编辑软件&#xff0c;由Corel开发。该软件…

【MATLAB数据处理实用案例详解(15)】——利用BP神经网络实现个人信贷信用评估

目录 一、问题描述二、BP神经网络实现个人信贷信用评估原理三、算法步骤3.1 读入数据3.2 划分训练样本与测试样本3.3 样本归一化3.4 创建BP神经网络&#xff0c;并完成训练3.5 测试 四、运行结果 一、问题描述 对个人信用的评估方法主要分为定性评估和定量评估两种&#xff0c…