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 值。
如何将这些点输入到样条对象中并将其呈现在屏幕上?
-谢谢
更新
让我改写我的问题更具体一点..
我的控制点由 xPts
和 yPts.
表示 现在我想获得沿着样条曲线的点,如何使用这两个向量来实现? CatmullRomSpline 的构造函数需要一个 Vector2
,而不是两个 float[]
的
你做了什么。填写分数:
curve = new CatmullRomSpline<Vector2>(points,false);
获取曲线上的一个点:
Vector2 point = new Vector2();
curve.valueAt(point, 0.5f);
valueAt()参数说明:
1(点)你要找的点存储在Vector2对象中。
- 在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));
}
我想在我的屏幕上生成随机样条。 这是我目前所拥有的:
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[]
的
你做了什么。填写分数:
curve = new CatmullRomSpline<Vector2>(points,false);
获取曲线上的一个点:
Vector2 point = new Vector2();
curve.valueAt(point, 0.5f);
valueAt()参数说明:
1(点)你要找的点存储在Vector2对象中。
- 在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));
}