2

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

4

2 回答 2

4

这取决于最初代表的点。仅仅有一个点数组通常不足以从中导出原始流形。你需要知道哪些点是在一起的。

最常见的低级边界表示(“brep”)是一堆三角形。例如,这就是 OpenGL 和 Directx 获得的输入。我编写了一个 Python软件,可以将STL格式的三角形网格转换为例如 PDF 图像。也许您可以根据自己的目的进行调整。插值三角形通常不是必需的,而是微不足道的。在两个原始点的中间创建三个新点。这三个点形成一个内三角形,表面的其余部分形成三个三角形。所以有了这个,你已经把一个三角形变成了四个三角形。

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

贝塞尔补丁公式

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

权重函数

假设您想通过 10x10 点的网格来近似贝塞尔曲面。为此,您必须在 10 步中评估 u 和 v 从 0 到 1的函数pnumpy.linspace (生成这些步骤很容易用 来完成)。

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

如果要可视化这些点,可以使用matplotlib 中的mplot3d

于 2012-09-21T18:20:09.170 回答
1

“紧凑流形”是指低维函数,如嵌入 3d 中的轨迹或表面?对于 R 中的表面问题,您有多种选择,具体取决于您想要的“参数”或“非参数”。可以在估计平均值 f(x,y) 的框架内应用各种回归样条曲线,如果这些值“紧密”间隔,您可能会得到一个相对准确和简单的汇总估计。有几种非参数方法,例如在包“locfit”、“akima”和“mgcv”中找到。(我不太确定如何统计估计 3 空间中的 1 维流形。)

编辑:但如果我确实想查看 3D 分布并了解它是参数曲线还是轨迹,我会使用 package:rgl 并将其绘制在可旋转的 3D 框架中。

如果您改为尝试形成凸包(插值这个词可能是错误的选择),那么我知道有 2-d 解决方案,并且怀疑搜索也会找到 3-d 解决方案。构建正确的搜索策略将取决于到目前为止 2 条评论所反映的具体情况。我推测,如果您想使用回归工作来创建边界,则可以尝试将第 1 和第 99 百分位数等较低和较高阶的统计数据建模为 (x,y) 的函数。Roger Koenker 的分位数回归包 'rq' 得到了很好的支持。

于 2012-09-21T18:22:00.060 回答