问题标签 [spline]

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.

0 投票
2 回答
2192 浏览

matlab - 使用 MATLAB Spline 从 Y 获取 X

我在 MATLAB 中有两个向量,X 和 Y。Y
是 X 的函数,但 X 不是 Y 的函数。

对于给定的 Y 值,我想从 spline(X,Y) 获取 X 值。

我怎样才能做到这一点?我尝试使用样条曲线的 pp ,但我并没有走得太远。

0 投票
1 回答
5634 浏览

r - R中的三次样条插值

我正在尝试在 R 中实现三次样条曲线。我已经使用了 R 库中可用的样条曲线、smooth.spline 和 smooth.Pspline 函数,但我对结果并不满意,所以我想说服自己“自制”样条函数的结果的一致性。我已经计算了三次多项式的系数,但我不确定如何绘制结果……它们似乎是随机点。您可以在下面找到源代码。任何帮助,将不胜感激。

谢谢

0 投票
1 回答
1115 浏览

c++ - 在 C++ 程序中评估从 max 导出的 3d 样条线

我的 C++ 程序需要访问在 3ds Max (2011) 中构建的 3D 样条线。我找到了一个简单的 maxscript将这些样条线导出为 XML 文件 - 示例如下:

我的问题是——在我的 C++ 程序中访问和评估这个样条曲线的最简单(也是最轻量级)的方法是什么?我知道如何解析数据的 XML,但从那时起我现在迷路了。我需要能够a)沿着这个 3D 样条评估一个点,然后b)计算一个向量来描述这个点的切线(如果可能的话)。我知道有可用于此类事情的库,但我不确定哪个最合适 - 特别是就上述格式而言(结,每个都有一个 invec 和 outvec)。

0 投票
1 回答
755 浏览

r - 如何在累积和图上的常规时间点获得插值的斜率?

在交叉验证时,我问了一个关于按日期分析数据的问题,但不想通过按月对数据进行分箱来产生虚假的峰值和谷值。例如,如果一个人在每个月的最后一天支付账单,但有一次支付晚了几天,那么一个月将反映零费用,而下个月将反映通常费用的两倍。都是乱七八糟的垃圾。

我的问题的一个答案解释了在累积和上使用线性样条平滑来克服分箱中的打嗝的插值概念。我对它很感兴趣,想在 R 中实现它,但在网上找不到任何示例。我不只是想打印情节。我想获得每个时间点(可能是每天)的瞬时斜率,但该斜率应该来自一个样条曲线,该样条曲线输入几天(或者几周或几个月)之前到几天的点时间点之后。换句话说,在一天结束时,我想得到一个数据框之类的东西,其中一列是每天的钱或每周患者,但不受变幻莫测的影响,例如我是否迟交了几天或一个月是否碰巧有 5 个手术天(而不是通常的 4 个)。

这是一些简化的模拟和绘图,以显示我所反对的。

当一个人迟到几天付款时,看起来好像费用在一个月内为零,而在下一个月则翻倍。 那是假的

随着时间的推移累积数量消除了改变项目箱的可变性

两种情况,但显示每个月支付的金额

在这里,我们看到了两种场景的累积总和数据

因此,对于简单的绘图,变量 interpolate.daily 一年中的每一天约为每天 50/30.4 = 1.64 美元。对于第二个地块,每月支付的金额在第二年每个月都开始增加,第一年每天的每日费率为 1.64 美元,第二年的日期显示每日费率从每天 1.64 美元逐渐增加到每天约 3.12 美元。

非常感谢您一直阅读到最后。你一定和我一样感兴趣!

0 投票
1 回答
1226 浏览

geometry - 找到样条曲线上的点

想象一下,我有一条贝塞尔曲线,实际上是一条使用贝塞尔线段绘制的基数样条曲线。它是一个分段曲线段,取一个实际点和两个控制点。我有样条曲线。但我的要求是在曲线上得到一个点。

我已经按照下面的方法来实现它。

公式:P(t) = s(-t3 + 2t2 – t)P1 + s(-t3 + t2)P2 + (2t3 – 3t2 + 1)P2 + s(t3 – 2t2 + t)P3 + (-2t3 + 3t2)P3 + s(t3 – t2)P4

其中 P 是曲线上的点,P1,P2,P3,P4 是实际点,s 是切线,它与 t 成反比。t 是张力。我计算从 0 到 1 变化的 t 的 P(t)x 和 P(t)y 坐标。

但这些点是近似的。不准确。我需要得到曲线上的确切位置。

任何人都可以建议我找到曲线上的点的任何方法吗?

或者如何使用实际点和控制点绘制点?

问候, 莎米拉

0 投票
1 回答
4346 浏览

c# - 三次 Hermite 样条曲线表现异常

我正在尝试使用Cubic Hermite Splines绘制图形。我从这个插值方法页面中获取了执行此操作的简单代码。

这是我的代码:

使用此数据(y 值,从 0-1,x 值从 0-21 均匀分布):

0, 0.09448819, 0.1102362, 0.1338583, 0.1811024, 0.2283465 ,0.3543307, 0.4645669, 0.480315, 0.480315, 0.527559, 0.527559, 0.527559, 0.527559, 0.527559, 0.527559, 0.6062992, 0.6377953, 0.6377953, 0.6377953, 0.7480315

结果如下:

埃尔米特图

问题是,在图表的某些区域,线向下。查看数据,它从未减少。我不知道算法是否应该这样做,但对于我正在做的事情,我希望线条永远不会向下(如果我是手工绘制图表,我永远不会让它们指向下方) .

所以,

  • 图表有问题吗?
  • 算法应该这样做吗?如果是这样,有没有这种情况不会发生?
  • 我试过余弦插值,但不喜欢结果。

这是实际的图形功能:

0 投票
2 回答
2623 浏览

c++ - C++ 三次样条轨迹

我正在编写一个 C++ 程序来为一组点生成三次样条轨迹。这些点不需要沿 x 轴排序。例如,它可能是一个圆圈等。

我在网上找到了一些库,例如 ALGLIB 库或这里的一个类https://www.marcusbannerman.co.uk/index.php/home/42-articles/96-cubic-spline-class.html,但所有这些库都对数据点进行排序。我不需要这个,因为我想要生成的是类似于圆圈的东西。有没有办法做到这一点?

0 投票
1 回答
964 浏览

scipy - “大”数据集的合理三次插值,替代 interp1d?

我正在处理音频数据,所以我的数据集通常在 40000 到 120000 点(1 到 3 秒)左右。目前我正在为某些任务使用线性插值,我想使用三次插值来改善一些结果。

我一直在使用interp1dwithkind='linear'来生成插值函数。这很好用并且非常直观。

但是,当我切换到 时kind='cubic',我的电脑就疯了——内存开始抖动,Emacs 窗口变暗,鼠标指针开始移动非常缓慢,硬盘变得非常活跃。我认为这是因为它使用了大量内存。我被迫(非常缓慢地)打开一个新的终端窗口,运行htop并终止 Python 进程。(我应该提到我正在使用 Linux。)

我对三次插值的理解是一次只需要检查数据集的 5 个点,但也许这是错误的。

无论如何,我怎样才能最轻松地从线性插值切换到三次插值,而不会碰到这个明显的内存使用砖墙?所有示例都interp1d使用很少的数据点,并且文档中的任何地方都没有提到它对于更高阶的性能不佳,所以我不知道接下来要尝试什么。

编辑:我刚试过UnivariateSpline,这几乎就是我要找的。问题是插值不会触及所有数据点。我正在寻找能够生成通过所有数据点的平滑曲线的东西。

Edit2:看起来可能InterpolatedUnivariateSpline就是我要找的东西。

0 投票
1 回答
534 浏览

math - 沿样条线生成“自然路径”

我需要一种方法来获得沿样条曲线的任何点的方向(局部 x/y/z 轴)......其中 z 轴始终是样条线切线,x/y 相互垂直且 z。

一种常见的技术是计算一个轴矢量作为切线的变化率,即x(t) = z(t) X z(t+dt) y 是简单的x X z

但是我不确定这是否给出了我所说的“自然”方向路径。我的意思是,想象一下我有一根刚性钢棒,它弯曲成一些卷曲,然后我沿着这根棒推进一根柔性软管。如果摩擦力可以忽略不计,“自然”路径将意味着软管在任何时候都会以最小扭矩结束,因为它会“解开”自身以获得较低能量的状态。

有没有办法做到这一点,这并不意味着从 0-t 遍历样条线的长度以找到给定点 t 的变换?

0 投票
1 回答
393 浏览

graphics - 如何沿着贝塞尔样条找到相交的 Y 值?

我已经有一段时间没有做任何此类数学*了,所以也许有人可以为我回答这个问题。我不认为这个问题正是我想要的,因为我试图找到精确 x 值的交点。

所以我有一条从 X,Y 到 XX,YY 的样条线,每端都有控制点。我想我说这将是一条二次曲线是正确的(曲线不会自己交叉)。我计划使用给定图形库中的路径例程(目前正在考虑 HTML5 画布)来绘制这条线,所以我不会自己绘制它。

我有许多点,表示为 X + n,我想找到交点的 Y 值。我不是在询问沿路径给定点的位置,而是询问与 X 线相交的路径上的位置。

我打算画一条垂直线来与它相遇,所以如果可能的话,如果这个点足够精确,能够以令人信服的方式与曲线相遇(而不是偏离几个像素),那就太好了。

这些例程看起来并不难自己画线,所以我可以做到这一点,并且只是测试(有公差)沿着情节的 X 值,如果涉及到它。

*数学