我想在屏幕上生成一个随机样条线。 以下是我到目前为止的情况:
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值。
如何将这些点输入到样条线对象中并在屏幕上呈现?
-Thanks
更新 让我重新提一下我的问题,让它更具体一点......
我的控制点由xPts
和yPts.
表示现在我想获得沿样条曲线落下的点,我如何使用这两个向量做到这一点? CatmullRomSpline的构造函数需要Vector2
,而不是两个float[]
答案 0 :(得分:3)
curve = new CatmullRomSpline<Vector2>(points,false);
要在曲线上得到一个点:
Vector2 point = new Vector2();
curve.valueAt(point, 0.5f);
valueAt()参数说明:
1(点)您要查找的点存储在Vector2对象中。
获得和渲染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);
答案 1 :(得分: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));
}