Catmull Rom Spline 实现 (LibGDX)

Catmull Rom Spline implementation (LibGDX)

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

public class CurvedPath {

Random rn;
CatmullRomSpline<Vector2> curve;

float[] xPts;
float[] yPts;
Vector2[] points;

public CurvedPath(){
    points = new Vector2[10];
    rn = new Random();
    curve = new CatmullRomSpline<Vector2>(points,false);

    for(int i = 0 ; i < 10; i++){
        xPts[i] = rn.nextFloat()*SampleGame.WIDTH;
        yPts[i] = SampleGame.HEIGHT*i/10;
    }


}

}

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

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

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

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

-谢谢

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

我的控制点由 xPtsyPts. 表示 现在我想获得沿着样条曲线的点,如何使用这两个向量来实现? CatmullRomSpline 的构造函数需要一个 Vector2,而不是两个 float[]

你做了什么。填写分数:

curve = new CatmullRomSpline<Vector2>(points,false);

获取曲线上的一个点:

Vector2 point = new Vector2();
curve.valueAt(point, 0.5f);

valueAt()参数说明:

1(点)你要找的点存储在Vector2对象中。

  1. 在0和1之间浮动,0是第一个点,1是最后一个点。 0.5f 是中间值。这个浮点数表示从第一个点到最后一个点的孔距。

获取并渲染 100 分可以是这样的:

Vector2 point = new Vector2();
for (int i = 0; i <= 100; i++) {

    curve.valueAt(point, i * 0.01f);

    // draw using point.x and point.y
}

对您已编辑问题的回答:

for(int i = 0 ; i < 10; i++){
        points[i].x = rn.nextFloat()*SampleGame.WIDTH;
        points[i].y = SampleGame.HEIGHT*i/10;
}
curve = new CatmullRomSpline<Vector2>(points,false);

这里也有详细的过程:https://github.com/libgdx/libgdx/wiki/Path-interface-&-Splines

    /*members*/
    int k = 100; //increase k for more fidelity to the spline
    Vector2[] points = new Vector2[k];

    /*init()*/
    CatmullRomSpline<Vector2> myCatmull = new CatmullRomSpline<Vector2>(dataSet, true);
    for(int i = 0; i < k; ++i)
    {
        points[i] = new Vector2();
        myCatmull.valueAt(points[i], ((float)i)/((float)k-1));
    }