gpt4 book ai didi

java - CatmullRomSplines 和其他平滑路径

转载 作者:搜寻专家 更新时间:2023-11-01 01:26:53 24 4
gpt4 key购买 nike

我一直在研究让二维平面上的对象遵循由多个控制点定义的平滑曲线。根据我的发现,我正在寻找 Catmull-Rom-Spline .

我一直在为我的项目使用 LibGDX,它有自己的 Catmull-Rom-Spline 实现,但我无法理解它是如何工作的,因为我找不到文档或其他源代码使用 LibGDX 实现 Catmull-Rom-Splines。

我正在寻找 LibGDX Catmull-Rom-Spline 实现的解释或其他实现平滑路径的方法,该路径使用 Catmull-Rom-Splines 或其他方法实现控制点。我所寻找的只是生成路径并传回该路径上某个点的 x 和 y 坐标的能力。如果有人有任何建议或指示,我们将不胜感激。谢谢。

最佳答案

libgdx 路径类(包括 CatmullRomSpline)适用于 2D 和 3D。所以在创建 CatmullRomSpline 时,必须指定要使用哪个 Vector(Vector2 或 Vector3):

CatmullRomSpline<Vector2> path = new CatmulRomSpline<Vector2> ( controlpoints, continuous );

例如:

float w = Gdx.graphics.getWidth();
float h = Gdx.graphics.getHeight();
Vector2 cp[] = new Vector2[]{
new Vector2(0, 0), new Vector2(w * 0.25f, h * 0.5f), new Vector2(0, h), new Vector2(w*0.5f, h*0.75f),
new Vector2(w, h), new Vector2(w * 0.75f, h * 0.5f), new Vector2(w, 0), new Vector2(w*0.5f, h*0.25f)
};
CatmullRomSpline<Vector2> path = new CatmullRomSpline<Vector2>(cp, true);

现在您可以使用 valueAt 方法获取路径上的位置(范围从 0 到 1):

Vector2 position = new Vector2();
float t = a_vulue_between_0_and_1;
path.valueAt(position, t);

例如:

Vector2 position = new Vector2();
float t = 0;
public void render() {
t = (t + Gdx.graphics.getDeltaTime()) % 1f;
path.valueAt(position, t);
// Now you can use the position vector
}

这是一个例子:https://github.com/libgdx/libgdx/blob/master/tests/gdx-tests/src/com/badlogic/gdx/tests/PathTest.java

关于java - CatmullRomSplines 和其他平滑路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18641199/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com