问题标签 [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 回答
7288 浏览

python - 贝塞尔曲线与线段的交点

我正在用 Python(使用 pygame)编写一个游戏,它要求我为每个新游戏生成随机但漂亮的“海”。经过长时间的搜索,我确定了一种涉及贝塞尔曲线的算法,如padlib.py中定义的那样。我现在需要弄清楚 padlib 生成的曲线何时与线段相交。

蛮力方法是仅使用 padlib 生成的一组近似线段来找到答案。但是,我怀疑可以通过分析找到更好的答案。我只有几十条样条线段 - 搜索它们应该比数千条线段更快。

一点点搜索让我走上了这条路:Bezier Curve -> Kochanek-Bartels Spline -> Cubic Hermite spline

在最后一页,我发现了这个功能:

p (t) = h 00 (t) p 0 + h 10 (t) m 0 + h 01 (t) p 1 + h 11 (t) m 1

其中p (t) 实际上是一个点(二维向量),h ij (t) 函数是三次多项式,p 0p 1m 0m 1是我可以从 padlib 代码中获得的点。

现在,我可以看到我的问题的解决方案是p (t) = u + v * t 1,其中uv是我的线段的结尾。

但是,制定分析解决方案超出了我的范围。这里有人知道现有的解决方案吗?或者可以帮助我解决方程?

0 投票
3 回答
8432 浏览

math - 计算贝塞尔样条曲线以从点到点

我在 X,Y + Rotation 中有 2 个点,我需要计算一个贝塞尔样条曲线(二次贝塞尔曲线的集合),它可以平滑地连接这两个点。(见图)该点代表游戏中只能缓慢旋转的单位。所以从A点到B点,必须走很长的路。附图显示了一条相当夸张的弯曲路径,但你明白了。

替代文字

我可以使用哪些公式来计算这样的贝塞尔样条曲线?

0 投票
3 回答
5953 浏览

r - 如何在 R 中平滑数组?

我在 R 中有一个二维数组,它表示行和列网格的值数据。它看起来像这样:

我想“平滑”这些值。在这个概念验证点上,我可以使用任何流行的平滑函数。我目前正在尝试使用该smooth.spline功能:

通过(天真地)打电话

当我运行这个时,我得到这个错误:

Smooth.spline(a) 中的错误:需要至少四个唯一的“x”值

我的数组在每个维度中有四个或更多唯一值,所以我认为我不知道如何正确格式化输入数据。有人可以给我一些关于这种事情的指示吗?-like 函数的示例smooth似乎适用于一维向量,我似乎无法外推到二维世界。我是 R 新手,所以请随时在此处纠正我对术语的误用!

0 投票
2 回答
4071 浏览

python - 给定四个点,如何使用 wxPython 绘制贝塞尔曲线?

在我看来,DC对任何类型曲线的唯一支持是样条曲线。有没有添加贝塞尔函数的库,或者有没有办法将贝塞尔曲线转换为样条曲线?

0 投票
1 回答
6939 浏览

python - Python 最小二乘自然样条

我正在尝试找到一个适合自然样条的数值包,该样条可以最小化加权最小二乘。

scipy 中有一个包可以满足我对非自然样条曲线的要求。

0 投票
6 回答
34934 浏览

graphics - 三次贝塞尔曲线上的最近点?

如何沿着三次贝塞尔曲线找到最接近平面中任意点 P 的点 B(t)?

0 投票
0 回答
1924 浏览

c# - 使用 Catmull-Rom 样条线创建一个圆

我有一个类,您可以在其中输入 catmull-rom 样条线的控制点,然后它返回沿样条线运行的点列表。

我需要输入哪些点才能创建一个圆圈?

0 投票
5 回答
277 浏览

c++ - (一种)在 C++ 中旋转和切片容器的元素

我有一个std::vector包含Point struct(x,y,z 和其他一些非指针类型) 的。

这些点是用于绘制 bspline 曲线的控制点。我在绘制曲线时没有问题,但是当我必须关闭曲线时会出现复杂情况,这涉及以特定顺序添加控制点(容器内已经存在)。

例如,如果我有 5 个控制点

我必须得到 5 个这样的序列:

最初,我选择了std::rotate,但后来意识到这不是我想要的。

我在执行此操作时遇到了麻烦。我得到的最好的是 C++ 中的非工作版本(失败的原因不是问题,这是一个片段)。

有没有办法做到这一点?我知道我可以用许多嵌套的 for 循环来实现它,但我试图避免这种情况,寻找更优雅的东西(如果这个词合适的话)。

提前致谢。

0 投票
2 回答
12197 浏览

math - 数学:使用带有时间约束的 Hermite 曲线缓入、缓出位移

我正在尝试编写一种方法,该方法使用开始时的加速和结束时的减速(缓出/缓入)随时间从 0 插值到 x(对象在一维中的位置),唯一的约束是总时间提供, 以及加速 和 减速 的 持续 时间. 运动应该复制惯性效应,我正在考虑非线性部分的Hermite 曲线。

有人可以指出我的一部分代码吗?我不知道如何整合 Hermite 曲线,因此不知道我将在加速部分或减速部分移动多少,进而我无法弄清楚线性的速度是多少部分。

谢谢。

一些参考来说明我的问题。

编辑

  • start 和 end 速度为空,当前时间也是方法中参数的一部分,我已经更新了签名。
  • 基本上,这个想法是想象在距离 d 上以恒定速度移动,这给出了总持续时间。然后我们添加加速和减速阶段,同时保持相同的持续时间,因此我们有一个未知的新巡航速度要确定(因为我们在 Hermite 阶段中的移动比在它们所取代的线性阶段中移动的少)。与相同持续时间的线性移动相比,在 Hermite 阶段丢失的移动量可能是曲线顶部和底部区域之间的比率,这只是非专家的想法。

编辑:Roman 和 Bob10 提供了完整的工作解决方案。我实现了 Roman 的代码。谢谢你们俩,伙计们!感谢您的完美支持和详细的解决方案,您为我节省了长时间的搜索和试验。

0 投票
2 回答
12325 浏览

c# - 双精度数组的 Akima 插值

假设我有一个双打数组,使用Akima 插值对这个系列进行采样的好算法是什么?我太愚蠢了,无法将数学描述转化为代码。