问题标签 [bspline]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
matlab - 将封闭 b 样条拟合到 2D 数据
我正在尝试在 Matlab 中实现我自己的代码,以将封闭的 b 样条拟合到一组 2D 数据。
我以椭圆的形式生成了二维数据并使用了 De boor 算法。为开放 b 样条设置代码时,该代码确实可以正常工作,但它被封闭(周期性)b 样条卡住了。
以下是步骤:
- 以二维椭圆的形式生成有序二维数据C [2xn]
- 根据均匀间隔或弦长方法生成参数向量t [nx1]。
- 生成节点向量u [m+dx1] (:# control points, d: b-spline order): a) Open b-spline: uniform-clamped method b) closed b-spline: uniform
- 从t估计每个生成的参数值的 b 样条混合函数值。将结果存储在矩阵 B [nxm] 中。
构造 b 样条基矩阵B的函数:
估计 b 样条混合函数值的函数
- 在P中估计并存储控制点向量p(在最小二乘意义上)
P = (pinv(B)*C')';
- 在封闭 b 样条的情况下,将控制点向量包裹起来
P = [P(:,end-d+1:end),P(:,d+1:end-d)]
开放 b 样条设置的结果:
闭合(周期性)b 样条设置的结果
c++ - C++中具有n个控制点和k阶的B样条曲线
我有一些一维点,现在我想把它拟合成曲线。偶然地,一个建议是使用 B 样条曲线。我想使用代码 C++ 从一些 n 控制点(一些 1D 点)和阶(度)k 创建 B 样条曲线。谁能建议我任何 C++ 示例代码或指南/解释链接?先感谢您。
这是说明图
c++ - 使用 GNU 科学库 (GSL) 使用不均匀间隔的点绘制 2D B 样条路径
我正在尝试使用 GNU 科学库 (GSL) 绘制从 A 到 B 的平滑路径。我使用的 API 返回少量(在本例中为 8 个)不规则间隔的点(红色),即您可以在下图中看到:
紫色点代表我希望从 GSL 返回的点。
首先,这种 2D B-Spline 形状是否可以通过使用 GSL 获得?我对 B-Splines 了解不多,更不用说 2D B-Splines。我能够让此处显示的 B-Splines 示例运行并毫无问题地创建平滑的 .ps 文件,但该示例使用统一断点和以下代码:
就我而言,鉴于我提供的数据不稳定且间隔不均匀,我是否必须使用非均匀结?我尝试使用gsl_bspline_knots()
, 以便在以下测试代码中使用非统一断点,但我真的不确定这是否是正确的方向。
此外,我将如何翻译上述示例以在 2D x/y 坐标空间中绘制 B 样条线?如果 GNU Scientific Library 不适合这个,有人可以推荐一个更合适的 C/C++ 库吗?
任何有关方向的帮助或指示将不胜感激。
nurbs - 在 BSpline 中包含以下内容是否合理?
我有一个封闭的 3 阶(2 级)BSpline,它具有以下参数
9 个控制点 14 个结点
为什么关系是 9 + 3 + 2 = 14?
python - 使用 Python 进行 B 样条插值
我正在尝试使用 Python 重现 B 样条的 Mathematica 示例。
mathematica 示例的代码为
并产生我所期望的。现在我尝试对 Python/scipy 做同样的事情:
这会导致一些也被插值但看起来不太正确的东西。我使用与mathematica 相同的结分别对x 和y 分量进行参数化和样条化。但是,我得到了过冲和下冲,这使我的插值曲线弯曲到了控制点的凸包之外。这样做的正确方法是什么/mathematica 如何做到这一点?
r - 获得 R 上的样条曲面
如何生成 b 样条曲面,比方说:
将是样条基础的 x 和 y。z 是控制点的集合。
c++ - B样条曲线
我有一组要使用 B 样条曲线平滑的点。
我的问题是如何实现 B 样条曲线来平滑这些点集?
我想用 c++ 来实现它。
scipy - scipy.interpolate.splrep 为 b 样条提供不正确的插值
我正在使用以下代码:
但是 bSpline 有奇怪的结(有些是 0),然后 yInterp 都搞砸了:
yInterp 应该有一些值在正 0.30 左右,而不是 -28 和 -29
c++ - 函数崩溃取决于函数参数定义 - 双重释放或损坏
我已经定义了一个用于评估 bspline 基函数的类。我无处使用指针或新删除等。该类如下:
对用户透明并评估函数 B_i(x) 的函数是
当我在 for 循环中使用它时,使用一个变量整数 i,一切都很好,也就是说,在这个例子中:
打印正确的值。但是,如果我为函数的第一个参数定义一个常量整数,就像在这个例子中一样:
我收到以下错误:
当我在 gdb 中运行代码并回溯它时,我收到以下消息:
问题一定出在功能上
和
当我在循环外定义第一个参数时,我无法理解如何可能会出错。非常感谢任何帮助。
更新:请让我澄清一下问题不是因为索引(idx = 3)超出了允许的范围间隔。如果是这种情况,第一个 for 循环就会崩溃。变量 nbasis 远大于 3。
更新 2: 按照@Adrian 的建议,我将 Bix_temp 设为该类的一个元素,然后重新运行代码。代码再次崩溃,但知道它会产生一些输出(值 x 和 infs)。这是调试器的新输出:
再次让我强调,当我使用 for 循环索引时,我没有收到任何错误。
更新 3:发现错误,它是概念性的并且在函数内部
具体来说,在以下代码行中:
谢谢大家的帮助。
curve-fitting - 如何连接两条拟合的 B 样条曲线?
我使用 B 样条曲线拟合来获得一条平滑曲线。如果我获得两个平滑的 B-spline ,我如何才能顺利连接。例如,我有 59 个点 ((x0,y0,z0),...,(x58, y58, z58)) 并且我有两个拟合的 B 样条。一个 B 样条用于前 30 个点,另一个用于接下来的 30 个点,两个点集共享一个公共点 ((x29,y29,z29))。由于曲线拟合,点 (x29,y29,z29) 将被修改两次,并将有两个新位置。如果我只是连接两个新位置,则最终曲线在点 (x29,y29,z29) 处将不平滑。目前我对所有数据执行曲线拟合,但这将完全修改前 30 个点的平滑曲线。我希望只修改第一条平滑曲线的连接部分。我知道我需要在联合处施加必须相等的导数。我不知道该怎么做。