Внедрение 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.
- плавающий между 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));
}