C++ 任意数量控制点的B样条

C++ 任意数量控制点的B样条,c++,bezier,spline,bspline,softbody,C++,Bezier,Spline,Bspline,Softbody,我目前正在使用数字弹簧物理学研究一个柔体系统,我终于可以工作了。我的问题是目前一切都是直线的 我的目标是复制类似于游戏“地板是果冻”的东西,除了光滑的角落和变形外,所有东西都能正常工作,目前它们是直的和有角度的 我尝试过使用三次贝塞尔方程,但这仅仅意味着每3个节点我就有一条新曲线。是否有一个Bezier样条曲线方程,它包含n个控制点,这些控制点将与vec2的循环一起工作(因此节点[0]是第一个也是最后一个控制点) 很抱歉,我没有为此显示任何代码,但我完全被难住了,谷歌搜索什么也没找到。简单地谷歌

我目前正在使用数字弹簧物理学研究一个柔体系统,我终于可以工作了。我的问题是目前一切都是直线的

我的目标是复制类似于游戏“地板是果冻”的东西,除了光滑的角落和变形外,所有东西都能正常工作,目前它们是直的和有角度的

我尝试过使用三次贝塞尔方程,但这仅仅意味着每3个节点我就有一条新曲线。是否有一个Bezier样条曲线方程,它包含n个控制点,这些控制点将与vec2的循环一起工作(因此节点[0]是第一个也是最后一个控制点)

很抱歉,我没有为此显示任何代码,但我完全被难住了,谷歌搜索什么也没找到。

简单地谷歌“B样条函数库”将为您提供许多参考。话虽如此,B样条曲线并不是您唯一的选择。也可以使用三次Hermite样条曲线(由一系列点和导数定义)(有关详细信息,请参见)

另一方面,您也可以继续在系统中使用直线,并创建一条曲线插值直线顶点,仅用于显示目的。要通过一系列数据点创建插值曲线,Catmull Rom样条曲线是一个易于实现的好选择。与在系统中实际使用B样条曲线相比,这种方法可能具有更好的性能。

简单地谷歌“B样条曲线库”将为您提供许多参考。话虽如此,B样条曲线并不是您唯一的选择。也可以使用三次Hermite样条曲线(由一系列点和导数定义)(有关详细信息,请参见)


另一方面,您也可以继续在系统中使用直线,并创建一条曲线插值直线顶点,仅用于显示目的。要通过一系列数据点创建插值曲线,Catmull Rom样条曲线是一个易于实现的好选择。与在系统中实际使用B样条曲线相比,这种方法可能具有更好的性能。

我将使用B样条曲线解决此问题,因为它们可以用最少数量的控制点表示平滑曲线。此外,寻找给定数据集的近似光滑曲面是一个简单的线性代数问题

我编写了一个简单的B样条C++库(包括贝塞尔曲线),我用它来进行科学计算,这里:

它可以接受任意数量的控制点/多重性,并返回一个基准。但是,创建适合您的数据的B样条曲线是您必须做的事情

GNU GSL( )。在此,您必须在给定基础上实现2/3D控制点,并固定边界条件以适合您的数据

有关开/闭曲线和B样条曲线的详细信息,请参见:
我将使用B样条曲线来解决这个问题,因为它们可以用最少数量的控制点来表示平滑曲线。此外,寻找给定数据集的近似光滑曲面是一个简单的线性代数问题

我编写了一个简单的B样条C++库(包括贝塞尔曲线),我用它来进行科学计算,这里:

它可以接受任意数量的控制点/多重性,并返回一个基准。但是,创建适合您的数据的B样条曲线是您必须做的事情

GNU GSL( )。在此,您必须在给定基础上实现2/3D控制点,并固定边界条件以适合您的数据

有关开/闭曲线和B样条曲线的详细信息,请参见:

有一个样条线库。我用过一次,尽管官方不支持,它还是没问题。但我认为它不支持闭合曲线。也许值得一读,因为实现b样条实际上并不是那么多工作。也是一个高度可读的JS实现,几乎是广泛地应用于广泛的其他语言,包括C++具有一个样条库。我用过一次,尽管官方不支持,它还是没问题。但我认为它不支持闭合曲线。也许值得一读,因为实现b样条实际上并不是那么多工作。这也是一个可读性很强的JS实现,它(几乎)被广泛的其他语言所采用,包括C++Catmull Rom spline是完美且快速的!在几乎不改变方程式的情况下使用闭合曲线!卡特穆尔Rom样条曲线完美且快速!在几乎不改变方程式的情况下使用闭合曲线!