问题标签 [catmull-rom-curve]

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 投票
0 回答
521 浏览

libgdx - libgdx:计算沿 CatmullRomSpline 相同距离的点?

我正在构建一个 3D 游戏,其中相机遵循一系列预定义的路径(从 Blender 中绘制的曲线导入)。

在加载时,我提取 Blender 曲线点,并使用这些点创建使用CatmullRomSpline类的路径样条线。

相机路径

屏幕截图表明了我的意思(我已将相机移到一边以查看路径 - 浅蓝色框代表相机路径上的固定点)。

目前,我正在使用 Blender 来定义导入的样条曲线中应该有多少点 - 这反过来又决定了相机沿路径移动的速度(固定点)。这工作正常,但不同样条曲线(不同数量的控制点等)之间存在不一致。

我真正想要的是能够在每个“滴答”中沿着样条线移动一些固定距离,以便整体相机移动更加一致。

我更改了路径计算逻辑以考虑样条长度,然后使用“步长”来计算样条点。

但是,样条点之间的距离仍然不一致。

我很确定我遗漏了一些明显的东西——有什么想法吗?

0 投票
2 回答
1495 浏览

java - Catmull Rom 样条实现 (LibGDX)

我想在我的屏幕上生成一个随机样条。这是我到目前为止所拥有的:

}

我对提供的有关如何使用该CatmullRomSpline对象的文档感到非常困惑(https://github.com/libgdx/libgdx/wiki/Path-interface-&-Splines

基本上我在这里尝试做的是生成 10 个随机点,平均分布在我的屏幕高度上,并沿屏幕宽度随机放置以创建随机弯曲路径。

因此,在构造函数的 for 循环中,您可以看到我为样条线生成了每个控制点的 x 和 y 值。

如何将这些点输入样条线对象并将其呈现在屏幕上?

-谢谢

更新 让我改写我的问题更具体一点..

我的控制点由xPts和表示yPts.现在我想获得沿着样条线的点,我该如何使用这两个向量来做到这一点?CatmullRomSpline的构造函数采用一个Vector2,而不是两个float[]

0 投票
1 回答
2876 浏览

spline - Catmull-Rom 和 Hermite 样条如何关联?

我对它们之间的关系有点困惑。在我的课堂上,我的教授问如何使用自动计算的切线将 C1 连续分段 Hermite 曲线拟合到 x 个点。有人可以解释这是如何工作的吗?

0 投票
2 回答
445 浏览

cubic-spline - 切线为零的 1D Hermite Cubic Splines - 如何使其看起来更平滑

我得到 3 个值y0, y1, y2. 它们应该是均匀分布的,例如x0 = -0.5, x1 = 0.5, x2 = 1.5。并且为了能够通过所有这些绘制样条曲线,所有点的导数都被称为dy/dx = 0

现在渲染两个 Catmull-Rom-Splines 的结果(通过 GLSL 片段着色器完成,包括非线性变换)看起来相当严格。即,在曲线弯曲的地方,它确实很平滑,但是弯曲区域非常小。缩小会使弯曲看起来太尖锐。

我想切换到 TCB-Splines(又名 Kochanek-Bartels Splines),因为它们提供了张力参数——因此我希望我可以平滑外观。但我意识到所有应用于零切线的 TCB 参数都没有任何好处。

有什么想法可以让我获得更平滑的曲线吗?

0 投票
0 回答
622 浏览

python - 使用向心 Catmull-Rom 样条插值特定点

我一直在研究用于插值曲线的 Catmull-Rom (CR) 样条曲线,并喜欢我的结果,尽管我遇到了一个致命的问题:本质上,我无法映射“t”(比如 0<=t<=1 其中它测量...因为没有更好的方法来解释它...从 P1 到 P2 的“参数化”水平距离(此处使用 P0、P1、P2、P3)符号)到有形的“x”值实际上是在 X,Y 坐标空间中绘制的。当然,当使用非均匀 CR 样条时,这主要是一个问题(因为在这种情况下 xi=(ti-t0)+x0)。我特别喜欢向心 (alpha=0.5) CR 样条曲线的特性,但我现在能做的最好的事情就是让我的函数返回大量点并绘制曲线。例如,我无法说“当 x=我想要的某个点时,给我曲线上的点。

https://en.wikipedia.org/wiki/Centripetal_Catmull%E2%80%93Rom_spline很好地总结了我所拥有的东西(那里的python代码也很接近我的)

0 投票
1 回答
1112 浏览

opengl - 我在使用给定控制点绘制 Catmull-Rom 样条时需要帮助

我正在尝试创建一个 openGL 程序,该程序允许用户单击窗口上的任意位置,为每次单击在该精确光标坐标中创建一个点,然后通过这些点绘制一条曲线。我确实设法实现了该部分,并通过每个点画一条直线,但现在我必须使用 catmull-rom 使这条线弯曲。我是这个概念的新手,我确实找到了关于函数 glm:catmullRom() 工作原理的示例,但我找不到关于它如何与程序的其余部分一起绘制曲线的示例。我试图使用它,但现在我得到了一条从窗户上截断的直线。我需要知道如何正确处理这个设置。基本上,这是我到目前为止所做的:

0 投票
0 回答
38 浏览

c# - 通过每个点的反斜率移动曲线而不重叠

我正在尝试绘制距离曲线指定距离的曲线。有点像道路的两侧总是与中心的黄线保持一定的距离。我有代码可以做到这一点,但是,当使用我的代码完成时,它最终会在其中一条曲线中重叠。

这是我的代码:

这是结果的照片: 具有重叠的曲线

任何和所有的帮助将不胜感激。

0 投票
2 回答
2368 浏览

javascript - 如何将 THREE.CatmullRomCurve3 转换为网格?

我使用 THREE.js 和CatmullRomCurve3类创建了一个 3D 线图,它负责处理我想要的曲线和平滑。

不幸的是,现在我想把那条曲线变成一个网格,也许可以挤出那个网格,看来我做不到。当我尝试类似的事情时:

我得到的错误证明曲线不是几何构造函数想要的:

我已经看到了将曲线作为extrudePath传递的示例参数传递的示例,例如:

但这需要将形状传递给ExtrudeGeometry,但是当曲线已经定义了我想要挤出的形状时,必须有一种比尝试创建单独的形状更直接的方法。(这似乎也突出了路径,而不是它所描述的形状。)

任何帮助将不胜感激!

0 投票
1 回答
780 浏览

c# - 将 alpha 添加到 Catmull-Rom

我正在尝试从 Unity 中的点列表生成 Catmull-Rom 曲线。因为我不想在曲线的点之间存储点,所以我选择使用一种可以根据时间计算 Catmull-Rom 曲线中的位置的解决方案。这里这里有一些这样的例子,但是,它们都没有展示如何实现 alpha。

我想实现 alpha 的原因是我可以在向心曲线、弦曲线和统一的 Catmull-Rom 曲线之间切换。

代码来源

0 投票
4 回答
5094 浏览

c# - Unity 中的加速

我试图在 Unity 中模拟加速和减速。

我编写了代码以在 Unity 中生成轨道,并根据时间将对象放置在轨道上的特定位置。结果看起来有点像这样。

立方通过 Catmull-Rom 样条中途

我目前遇到的问题是样条曲线的每个部分都有不同的长度,并且立方体以不同但均匀的速度穿过每个部分。这会导致在不同部分之间转换时立方体的速度变化会突然发生跳跃。

为了尝试解决这个问题,我尝试在该方法上使用Robert Penner 的缓动方程GetTime(Vector3 p0, Vector3 p1, float alpha)。然而,虽然这确实有所帮助,但还不够。在转换之间仍然有速度跳跃。

有没有人知道我如何动态地缓解立方体的位置,使其看起来像是在加速和减速,而轨道段之间的速度没有大的跳跃?


我编写了一个脚本,显示了我的代码的简单实现。它可以附加到任何游戏对象。为了便于查看代码运行时发生的情况,请附加到立方体或球体等物体上。