Slick2d/lwjgl Кривая через массив точек

Я пытаюсь переписать Игру "Achtung, die Kurve" (Внимание, Кривая)

Теперь я застрял с проблемой: как я могу нарисовать кривую, которая проходит через N точек (координаты x/y)

for(int i = 0;i < xList.size();i++)
    {
        path.lineTo(player1.getShape().getCenterX(),player1.getShape().getCenterY());
    }

^ Это всегда будет создавать новую линию, поэтому мой FPS очень быстро достигает 10.

Любая помощь?


person Jonas Dellinger    schedule 13.02.2013    source источник


Ответы (1)


Это алгебраическая задача, которую можно решить с помощью систем линейных уравнений. http://en.wikipedia.org/wiki/System_of_linear_equations

Как правило, кривая, проходящая через N точек, является полиномом (N-1)-й степени. Итак, если вы хотите найти полином, который проходит через 3 точки (например, (-1,1), (0, 3), (1, -1)), вам понадобится квадратное уравнение, подобное этому: ax^2+bx+c=y.

Чтобы найти значения a, b и c, вам нужно подставить координаты x и y, а затем решить систему уравнений.

a(-1)^2+b(-1)+c=1
a(0)^2+b(0)+c=3
a(1)^2+b(1)+c=-1

что упрощает до

a-b+c=1
c=3
a+b+c=-1

Отлично, у нас уже есть c=3. Комбинируя первое уравнение и второе, мы можем получить

2a+2c=0

Поскольку мы знаем, что c=3, это становится

2a+3=0

So a=-1.5.

Отсюда мы можем поместить эти значения a и c в последнее уравнение, чтобы получить это

-1.5+b+3=-1

Что дает b=-3.5. Подстановка этих значений a, b и c обратно в квадратное уравнение дает это

-1.5x^2-3.5x+3=y

Я дважды не проверял свои математические расчеты, но если я все сделал правильно, это даст квадратичную кривую, проходящую через три точки.

Несомненно, для этого уже существует библиотека, но, к сожалению, я не знаю, что это будет. Надеемся, что знание математики, стоящей за вашей проблемой, поможет вам найти ответ.

person Jonbobbly    schedule 05.03.2013