如何连接两条拟合的B样条曲线



我使用B样条曲线拟合来获得一条光滑的曲线。如果我得到了两条光滑的B样条,我如何才能平滑地连接。例如,我有59个点((x0,y0,z0),。。。,(x58,y58,z58))和我有两个拟合的B样条曲线。一条B样条用于前30个点,另一条用于后30个点并且两个点集共享一个公共点((x29,y29,z29))。点(x29,y29,z29)将由于曲线拟合而被修改两次,并且将具有两个新位置。如果我只是连接两个新的位置,那么最终的曲线在点(x29,y29,z29)处将不平滑。目前,我对所有数据一起进行曲线拟合,但这将完全修改前30个点的平滑曲线。我希望只修改第一条平滑曲线的连接部分。我知道我需要施加导数,需要在关节处相等。我不知道该怎么做。

看起来你正在用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)移动到相同的位置来使它们为G0,该位置可以是(x29,y29,z29),或者简单地是p(n-2)和Q(0)之间的中点。让我们将这个新位置表示为R.

2) 现在,检查p(n-2)、R和Q(1)是否共线。如果它们恰好是共线的,那么两条B样条曲线也将是G1,就完成了。如果它们不共线,则从P(n-2)和Q(1)找到穿过R的最佳近似线,然后将P(n-1)和Q投影到这条线上,并使用投影点作为P(n-2中)和Q的新位置。

在这两个步骤之后,这两条B样条曲线应该以G1的方式连接。但是,对公共关节周围的原始数据点的误差将变得更大。

相关内容

  • 没有找到相关文章

最新更新