python - 如何插值 3D 坐标

标签 python r 3d interpolation splines

我有 x,y,z 格式的数据点。它们形成闭合流形的点云。如何使用 R-Project 或 Python 对它们进行插值? (如多项式样条)

最佳答案

这取决于点最初代表什么。仅拥有点数组通常不足以从中导出原始流形。您需要知道哪些点是相辅相成的。

最常见的低级边界表示(“brep”)是一堆三角形。这是例如OpenGL 和 Directx 获取什么作为输入。我写了一个Python software可以转换 STL 中的三角形网格格式为例如PDF 图像。也许您可以根据您的目的进行调整。对三角形进行插值通常不是必需的,但也很简单。创建三个新点,每个点位于两个原始点之间。这三个点形成一个内三角形,曲面的其余部分形成三个三角形。这样你就将一个三角形变成了四个三角形。

如果这些点是样条曲面面片的控制点(例如 NURBSBézier surfaces ),您必须知道哪些点一起形成面片。由于这些是参数曲面,一旦知道控制点,就可以确定曲面上的所有点。下面是贝塞尔曲面的函数。参数 u 和 v 是表面的参数坐标。它们沿着补丁的两个相邻边缘从 0 运行到 1。控制点是k_ij。

formula of Bézier patch

B函数是每个控制点的权重函数;

weight functions

假设您想通过 10x10 点的网格来近似贝塞尔曲面。为此,您必须以 10 个步骤评估 u 和 v 从 0 到 1 的函数 p(使用 numpy.linspace 可以轻松生成这些步骤)。

对于每个 (u,v) 对,p 返回一个 3D 点。

如果您想可视化这些点,您可以使用 mplot3d来自 matplotlib。

关于python - 如何插值 3D 坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12534813/

相关文章:

python - 在大型 Python 代码库中从结果追溯到原因

python - pyparsing:字典列表的语法(erlang)

r - 在 text2vec R 包中准备词嵌入

r - 如何从 lme、lmer、glmer 到 Latex 提取回归结果?

c# - 64 位 Windows 上的 DirectX 应用程序

OpenGl 框全屏

python - 验证 BigQuery 表是否存在

r - 在 R 中向量化 "if"

math - 围绕原点进行 3d 旋转

python - 如何在Python中创建全局变量