用B样条曲线拟合得到一条光滑曲线.如果我得到两个光滑的B样条,我怎样才能顺利地连接.例如,我有59个点((x0,y0,z0),.,(x58,y58,z58))和两个拟合的B样条。一个B样条为前30个点,另一个为后30个点,两点集共享一个公共点((x29,y29,z29))。由于曲线拟合,点(x29,y29,z29)将被修改两次,并将有两个新的位置。如果我只是连接这两个新的位置,最后的曲线将不会光滑的点(x29,y29,z29)。目前,我执行曲线拟合所有的数据在一起,但这将修改前30个点的平滑曲线。我只希望修改第一条平滑曲线的连接部分。我知道我需要强制要求衍生品在联合市场上是平等的。我不知道该怎么做。
发布于 2014-10-27 15:43:33
看起来你是在用B样条曲线或类似的东西进行LS拟合,通常,这样得到的B样条将不会通过任何数据点。这就是为什么两个B样条不相交的原因.
要解决这个问题,您可以增强您的LS拟合功能,将约束作为输入的一部分。在您的情况下,这些约束是线性的,因此您的问题仍然是线性的。一旦完成这一步,您可以预先计算在公共点的斜率,并约束B样条拟合到公共点和共同斜率。这样,得到的两个B样条至少在公共点上是G1连续的.
尽管如此,实现有限的LS拟合并不是一项琐碎的任务,在这里也不容易阐述。因此,你将不得不做一些“谷歌”自己。另一种解决方案是“调整”两个B样条,使它们以G1方式连接。但这样做肯定会增加拟合误差,因为最小二乘误差的意义被破坏。通过“调整”,我的意思是在本地改变B样条的控制点。在下面我将给出更多的细节。
假设有两个B样条,C1(t)和C2(t),C1(t)的后两个控制点是P(n-2)和P(n-1),C2(t)的前两个控制点是Q(0)和Q(1)。P(n-1)和Q(0)应接近两个数据集的公共点(x29,y29,z29)。调整B样条曲线只需改变P(n-2)、P(n-1)、Q(0)和Q(1)的位置,使这两条B样条曲线以G1方式相交。为了做到这一点,
( 1)我们首先将P(n-1)和Q(0)移动到相同的位置(x29,y29,z29),或者只是P(n-1)和Q(0)之间的中点。让我们把这个新的位置表示为R。
2)现在,检验P(n-2)、R和Q(1)是否是共线的。如果它们碰巧是共线的,那么两个B样条曲线也将是G1,你就完成了。如果它们不是共线,则从P(n-2)和Q(1)中求出通过R的最佳逼近线,然后投影P(n-2)和Q(1),并将投影点作为P(n-2)和Q(1)的新位置。
在这两个步骤之后,这两条B样条曲线应以G1方式连接.但对共同节点周围原始数据点的误差会变大。
https://stackoverflow.com/questions/26580543
复制相似问题