Руководство LibGDX - отслеживание спрайтов 2D бесконечной случайной кривой Безье

Я смог применить плавную анимацию к своему спрайту и управлять ею с помощью акселерометра. Мой спрайт зафиксирован, чтобы двигаться влево и вправо по осям x.

Отсюда мне нужно выяснить, как создать вертикальную бесконечную волнистую линию, по которой спрайт будет пытаться проследить. цель моей игры состоит в том, чтобы пользователь мог управлять движением спрайта влево / вправо с помощью акселерометра, пытаясь как можно лучше проследить бесконечную волнистую линию, в то время как спрайт и камера движутся в вертикальном направлении, чтобы имитировать "движение" вдоль линии." Было бы идеально, если бы линия генерировалась случайным образом.

Я исследовал шлицы, плоскости, кривые Безье и т. Д., Но не могу найти ничего, что, казалось бы, достаточно близко к тому, чего я пытаюсь достичь.

Я просто ищу руководство относительно того, какие методы я мог бы использовать для этого. Любые идеи?


person jdubbing    schedule 24.02.2014    source источник
comment
Можете ли вы разместить ссылки на то, чего вы хотите достичь ..   -  person jpm    schedule 24.02.2014
comment
Хм, не совсем так, поскольку я сам придумал эту концепцию. В общих чертах, я хочу, чтобы пользователь мог управлять спрайтом для отслеживания линии. В конце концов я запишу, насколько точно пользователь смог провести линию со спрайтом. Извините, я не могу получить никаких рекомендаций - это то, что я ищу.   -  person jdubbing    schedule 24.02.2014


Ответы (1)


Вы можете использовать сумму от 4 до 5 синусоид (каждая с разной амплитудой, длиной волны и разностью фаз). Все три параметра могут быть случайными.

Результирующая кривая будет очень гладкой (поскольку она в основном синусоидальная), но будет выглядеть случайной (это период времени, равный НОК всех 4–5 случайных длин волн, что является огромным числом).

Так что кривая долго не будет повторяться, но памяти не будет. Что касается вычислительной сложности, вы всегда можете настроить ее, изменив количество синусоидальных членов с помощью FPS.

Должно получиться так.
введите описание изображения здесь

Это действительно легко реализовать. (даже я мог сгенерировать изображение выше .. ха-ха)

Надеюсь это поможет. Математические скалы. : D

(Основная идея здесь - конечный ряд Фурье, который, я думаю, должен быть идеальным для вашего варианта использования. )


Изменить:

Вы можете создать каждый такой термин и присвоить всем терминам случайные значения.

public class SineTerm {

    private float amplitude;
    private float waveLength;
    private float phaseDifference;

    public SineTerm(float amplitude, float waveLength, float phaseDifference) {
        this.amplitude = amplitude;
        this.waveLength = waveLength;
        this.phaseDifference = phaseDifference;
    }

    public float evaluate(float x) {
        return amplitude * (float) Math.sin(2 * Math.PI * x / waveLength + phaseDifference);
    }

}

Теперь создайте массив SineTerms и добавьте все значения, возвращаемые evaluate(x) (используйте одну координату спрайта в качестве входных). Используйте вывод как другую координату спрайта. Тебе должно быть хорошо.

Настоящая уловка будет заключаться в настройке этих случайных чисел.

Удачи.

person Tanmay Patil    schedule 24.02.2014
comment
Привет, Танмей, спасибо за подробный ответ! Я чувствую, что это немного выше моей головы, но не беспокойтесь, я исследую ключевые термины, чтобы лучше понять концепцию ряда Фурье. Однако прямо сейчас я не знаю, как на самом деле превратить эту идею в код ... если у вас есть какие-то указания по этому поводу, дайте мне знать. Ваше здоровье. - person jdubbing; 28.02.2014
comment
Рад узнать, что это помогло. Я обновил ответ, так что проверьте его. С Уважением. - person Tanmay Patil; 01.03.2014
comment
Спасибо, Танмей, ты действительно дал мне хорошую фору. Я полон решимости разобраться в этом, поэтому я возьму то, что вы мне дали, и построю оттуда. Спасибо еще раз! - person jdubbing; 02.03.2014
comment
Привет, @TanmayPatil. Я использовал класс sineTerm, но не знаю, как создать спрайт с волнистым эффектом с помощью метода Assessment (x). Пожалуйста, помогите мне - person Venkatesh S; 13.02.2015
comment
Создание спрайта из него было бы совершенно другой проблемой, которую, я не думаю, можно объяснить в комментариях. Я думаю, вам следует опубликовать его как новый вопрос со ссылкой на этот вопрос. - person Tanmay Patil; 13.02.2015