Внедрение Catmull Rom Spline (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[] "s

2 ответа

Решение

Что ты сделал. Заполните баллами:

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));
    }
Другие вопросы по тегам