【问题标题】:B-Spline for any number of control points任意数量控制点的 B 样条
【发布时间】:2017-01-31 04:29:02
【问题描述】:

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

我的目标是复制类似于游戏“地板是果冻”的东西,除了平滑的角落和目前是直角的变形之外,一切都正常。

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

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

【问题讨论】:

标签: c++ bezier spline bspline softbody


【解决方案1】:

只需 google 一下“B 样条库”就会给你很多参考。话虽如此,B-spline 并不是您唯一的选择。您也可以使用三次 Hermite 样条(由一系列点和导数定义)(有关详细信息,请参阅 link)。

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

【讨论】:

  • Catmull-Rom 样条曲线完美而快速!使用闭合曲线几乎没有改变方程!
【解决方案2】:

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

我编写了一个简单的 B 样条 C++ 库(也包括贝塞尔曲线),用于科学计算,这里: https://github.com/feevos/bsplines

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

在 GNU GSL ( https://www.gnu.org/software/gsl/manual/html_node/Basis-Splines.html)。同样,您必须在给定的基础上将控制点实现为 2/3D,并修复边界条件以适合您的数据。

更多关于开/闭曲线和 B 样条的信息在这里: https://www.cs.mtu.edu/~shene/COURSES/cs3621/NOTES/index.html

【讨论】:

    猜你喜欢
    • 2014-12-16
    • 1970-01-01
    • 2019-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-16
    • 1970-01-01
    相关资源
    最近更新 更多