迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > Python >

Matplotlib 三角剖分

作者:迹忆客 最近更新:2023/05/01 浏览次数:

Python 的 Matplotlib 工具包可用于构建静态、动画和交互式可视化。 它使困难的事情成为可能,例如生成适合发布的图表以及制作具有缩放、平移和更新功能的交互式图表。


Matplotlib 三角剖分

为了绘制三角剖分,Matplotlib 提供了库和函数。 一个表面或平面多边形以这种方式被分成几个三角形。

通常,每个三角形顶点由两个相邻三角形共享。

Python 绘制连续曲面的能力是通过三角剖分思想实现的。 三角形可以具有用户定义的坐标,或者具有三角形中的点集合,以维持由 Delaunay 三角剖分覆盖的曲面图。

这篇文章将向我们介绍 Matplotlib 三角剖分。 函数 matplotlib.pyplot.triplot() 至少接受两个参数——x 和 y 数据点——是绘制三角剖分所必需的。

n 个点和 ntri 个三角形组成一个非结构化的三角形网格。

三角形可以使用 Delaunay 三角剖分自动创建或由用户指定它们(生成覆盖对象的三角形网格)。

让我们创建一个随机三角形:

首先,您必须导入所需的库,例如 Matplotlib、NumPy 等。

Import library

当我们生成随机三角形时,让我们首先为三角形生成随机数据。

出于演示目的,以下代码用于创建随机点云:

Generate Random Data

在为 Matplotlib 三角剖分图生成数据之前,我们确保三角剖分是真实的。 它不能包含由共线点、相同点或重叠三角形组成的三角形。

Generate Triangle

在 matplotlib.tri 函数中,使用函数 triangulation() 生成三角形,该函数至少需要两个参数,x 和 y 数据点。

我们可以使用 matplotlib.pyplot.triplot() 方法在图形上绘制三角剖分。

Display Triangles

由于三角点云是随机生成的,因此每次执行脚本时您都会观察到一个新的三角点。

让我们在 3D 空间中执行 Matplotlib 三角剖分。 在本节中,我们将使用 Matplotlib 三角剖分绘制球体。

我们必须参数化球体以使用三角测量绘制球体。 我们必须在 x 轴上取两个向量 cos(a) 和 sin(b) 的外积,在 y 轴上取 sin(a) 和 sin(b),在 z 轴上取 cos() ( b).

a 列给出了从 0 到 2π 的等间距数字列表,b 列给出了 0 到 π 的等间距数字列表。

以下代码使用 Matplotlib 三角剖分绘制球体:

import numpy as np
from scipy.spatial import Delaunay
import matplotlib.pyplot as plt
from matplotlib import cm
from mpl_toolkits.mplot3d import Axes3D

ax = plt.figure().gca(projection='3d')

def triangulateSphere(ax, k=30, cmap=cm.magma):

    # domain parametrization
    U = np.linspace(0, 2 * np.pi, k)
    V = np.linspace(0, np.pi, k)
    [X, Y] = np.meshgrid(U, V)

    # sphere parametrization
    S1 = np.cos(X) * np.sin(Y)
    S2 = np.sin(X) * np.sin(Y)
    S3 = np.cos(Y)

    # triangulate the points in [0,2pi] x [0,pi]
    tri = Delaunay(np.array([X.flatten(), Y.flatten()]).T)

    # plot the sphere
    ax.plot_trisurf(
        S1.flatten(), S2.flatten(), S3.flatten(),
        triangles=tri.simplices,
        cmap=cmap
    )
triangulateSphere(ax)
plt.show()

首先,我们导入了所需的模块并设置了图形大小。 之后,ax = plt.figure().gca(projection='3d') 将图形从 2D 更改为 3D。

numpy.linspace() 方法为列表 U 和 V 生成 30 个均匀间隔的数字。函数 numpy.meshgrid() 接受编码网格坐标的一维数组作为输入,并从坐标向量返回坐标矩阵。

向量(cos(a) 和 sin(b))、(sin(a) 和 sin(b))和(1 和 cos(b) 的数组)相应地产生列表 S1、S2 和 S3。

使用 matplotlib.pyplot.show() 函数显示三角球图。 随着参数 k 的增加,更多的点被定义,导致更小的三角形和更平滑的球体。

运行代码将输出:

使用三角剖分 Matplotlib 绘制球面图

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

如何在 Matplotlib Pyplot 中显示网格

发布时间:2024/02/04 浏览次数:142 分类:Python

本文演示了如何在 Python Matplotlib 中在一个图上画一个网格。使用 grid()函数来绘制网格,并解释了如何改变网格颜色和线条类型。

如何在 Matplotlib 中画一条任意线

发布时间:2024/02/04 浏览次数:166 分类:Python

本教程讲解了我们如何在 Matplotlib 中使用 matplotlib.pyplot.plot()、matplotlib.pyplot.vlines()、matplotlib.pyplot.hlines()方法和 matplotlib.collection.LineCollection 绘制任意线条。

Matplotlib 中的叠加条形图

发布时间:2024/02/04 浏览次数:182 分类:Python

本教程展示了如何使用 plt.bar()方法将某些数据集的条形图堆叠在另一个数据集上。我们在 Matplotlib 中使用 matplotlib.pyplot.bar()方法生成条形图。

设置 Matplotlib 网格间隔

发布时间:2024/02/04 浏览次数:250 分类:Python

本教程将介绍我们如何在 Matplotlib 绘图中设置网格间距,并对主要网格和次要网格应用不同的样式。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便