2

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

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 值。

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

-谢谢

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

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

4

2 回答 2

3

你做了什么。填充点:

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);
于 2015-08-22T23:48:32.173 回答
0

该过程也在此处详细说明: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));
    }
于 2016-04-23T14:15:17.647 回答