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.ます。スプラインに沿ったポイントを取得したいのですが、これら 2 つのベクトルを使用してこれを行うにはどうすればよいですか? CatmullRomSpline のコンストラクターは、 2 つではVector2なく 1 つを取り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 の間の float で、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 に答える