Algorithm 样条曲面插值
假设有n个点定义了z轴上的曲面Algorithm 样条曲面插值,algorithm,math,3d,spline,Algorithm,Math,3d,Spline,假设有n个点定义了z轴上的曲面 f(x1,y1) = 10 f(x2,y2) = 12 f(x3,y3) = 5 f(x4,y4) = 2 ... f(xn,yn) = 21 现在我想要能够近似地得到f(x,y)。我正在寻找一个线性算法,尤其是样条曲线近似算法。一个示例算法或至少一些指针会很好。您可以使用您的点作为Bezier(或Bspline)曲面的控制点,特别是当(xi,yi)在XY平面中采样矩形时。在这方面,没有合适的地方 您将获得的曲面将位于点的凸包中,并将在{xi,yi}的边界处与点
f(x1,y1) = 10
f(x2,y2) = 12
f(x3,y3) = 5
f(x4,y4) = 2
...
f(xn,yn) = 21
现在我想要能够近似地得到f(x,y)。我正在寻找一个线性算法,尤其是样条曲线近似算法。一个示例算法或至少一些指针会很好。您可以使用您的点作为Bezier(或Bspline)曲面的控制点,特别是当
(xi,yi)
在XY
平面中采样矩形时。在这方面,没有合适的地方
您将获得的曲面将位于点的凸包中,并将在{xi,yi}
的边界处与点相交(插值)
如果你想做实验,在
Matlab
中似乎包含简单的代码,如果你没有Matlab
,你也可以用它来做同样的事情(尽管它需要计算程序的文件格式)。这是对线性近似方法的模糊描述
(x\u i,y\u i)
)(x\u i,y\u i)
和(x\u j,y\u j)
的距离是相等的(并且比任何其他线对都近)下面将在Python中实现前两个步骤。你生活的规律性 网格可以让你加快速度(也可能会搞乱三角测量)
导入itertools
“”基于http://stackoverflow.com/a/1165943/2336725 """
def为ccw(tri):
返回((tri[1][0]-tri[0][0])*(tri[1][1]+tri[0][1])
+(tri[2][0]-tri[1][0])*(tri[2][1]+tri[1][1])
+(tri[0][0]-tri[2][0])*(tri[0][1]+tri[2][1])<0
def外圆包含点(三角形,点):
将numpy作为np导入
矩阵=np.数组([[p[0],p[1],p[0]**2+p[1]**2,1]表示三角形中的p+点])
返回值为逆时针(三角形)=(np.linalg.det(矩阵)>0)
三角剖分=集合()
"""
Delaunay三角剖分中的三角形当且仅当其外接性
圆不包含其他点。此实现为O(n^4)。更快的方法
在http://en.wikipedia.org/wiki/Delaunay_triangulation
"""
对于itertools中的三角形。组合(点,3):
三角形_为空=真
对于点到点:
如果三角形中的点:
下一个
如果外圆包含点(三角形,点):
三角形_为空=假
打破
如果三角形_为空:
三角剖分。添加(三角形)
对不规则二维数据进行插值并不是那么容易。我知道没有真正的样条线推广到不规则二维
除了基于三角剖分的方法外,您还可以查看Barnes()和反向距离加权()或更一般的RBF()
如果您的点分布非常不均匀(密集簇),则可能需要使函数的大小自适应,或者采用近似而不是插值。wikipedia][1]文章有点令人望而生畏,但至少请尝试查看示例部分。[1] :您是规则网格上的x,y控制点吗?对于形式为f(x,y)的函数,更常见的做法是假设基础数据的形式(K次多项式、N高斯和等),然后通过最小二乘法确定系数。这里行吗?你知道这些数据代表什么吗?如果您真的想要样条曲线,那么NURBS值得一看。它们具有很好的渲染特性。构造(x,y)点的Delaunay三角剖分以获得基础,除非它们位于规则网格上。对于平面拟合,你需要一个标准的最小二乘拟合,我不需要样条曲线。线性的就足够了。关于平面拟合,我不能说太多,但数据点位于规则网格上。只是缺少了一些数据点。最终的实现必须是ruby,所以Matlab不是一个真正的选项。但问题确实是关于XY平面上的矩形。我从未使用过Ruby,但我确信它有一个Bezier/Bspline包。实际上,它们并没有扩散太多。最糟糕的情况是,我甚至可以使用线性插值,但我更喜欢更平滑的曲面。近似听起来也是一个有趣的角度。径向基函数+1。几年前,我写了一篇论文,研究这些被推广到流形上的函数的对象。只要你没有稠密的星团,而且n点的数目不太大,它们就可以工作得很好。(如果n确实变大了,你希望你的RBF有紧凑的支持,这样所涉及的矩阵是稀疏的。但是你需要使用稀疏线性代数来保持它的可接受的伸缩性。)漂亮、平滑的插值。