当前位置:  开发笔记 > 人工智能 > 正文

在3D空间中的点之间进行插值以形成光滑表面的简单方法

如何解决《在3D空间中的点之间进行插值以形成光滑表面的简单方法》经验,为你挑选了1个好方法。

我试图想出一种简单而有效的方法来创建一个与许多给定"样本"点相交的光滑表面.

对于表面上的任何X,Y点,我在4个方向中的每个方向上识别最多4个采样点(X上的下一个较高点和较低点,然后是Y轴).鉴于这一点,我想要一种计算在4个样本点之间插值的Z值的方法.

当然,给定4个采样点中的任何一个的X,Y位置的算法应输出该点的Z值.另请注意,可能少于4个采样点.

我猜测4个样本点的Z值的某些函数,不知何故被样本点的距离反向偏置,但我无法弄清楚如何做到这一点.

有人对这个简单的方法有任何想法吗?



1> Bob Cross..:

您可以通过构建Catmull-Rom样条曲线中的补丁来完成此操作.这些样条线将击中每个控制点,并且它们在一阶导数中是连续的(尽管不是第二个).我也发现它们非常容易使用.数学很简单,直观,控制点略有变化.

在最高级别,每个补丁需要16个点(在数据集的边缘,您可以在同一个样条曲线中使用两次角点和边缘点).

首先,您需要在4x4矩阵的每一行中对点p [i] [j]进行插值,以创建一组四个中间控制点q [i].这是我的意思的粗略ASCII草图.

p00 p01 q0 p02 p03
p10 p11 q1 p12 p13
p20 p21 q2 p22 p23
p30 p31 q3 p32 p33

现在,您可以在这四个中间控制点中的每一个之间进行插值,以在曲面上找到最终的花键点.

这是Catmull-Rom花键横跨四个点的结构.在此示例中,您使用p [i-2]p [i + 1]两侧的控制点在点p [i-1]p [i]之间进行插值. u是从0到1的插值因子. τ定义为样条上的张力,将影响花键表面与控制点的紧密程度.

                 | 0   1   0    0 | | p[i?2] |
                 |??   0   ?    0 | | p[i?1] |
p(u) = 1 u u2 u3 | 2? ??3 3?2? ?? | | p[i]   |
                 |??  2?? ??2   ? | | p[i+1] |

注意:如何在Stackoverflow的gui中展示它并不是很明显,但u2u3分别代表u平方u立方.

推荐阅读
U友50081205_653
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有