0

我正在尝试重写游戏“Achtung, die Kurve”(注意,曲线)

现在,我遇到了一个问题:我如何绘制一条曲线,它通过 N 点(x/y 坐标)

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

^这总是会创建一条新线,所以我的 FPS 很快就达到了 10

有什么帮助吗?

4

1 回答 1

0

这是一个可以用线性方程组解决的代数问题。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

所以a=-1.5

从这里我们可以将 a 和 c 的这些值放入最后一个等式中得到这个

-1.5+b+3=-1

这给出了一个b=-3.5. 将 a、b 和 c 的这些值代入二次方程会得出以下结果

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

我没有仔细检查我的数学,但如果我做对了,这将给出一条穿过三个点的二次曲线。

毫无疑问,已经有一个图书馆可以做到这一点,但我很抱歉地说我不知道​​那会是什么。希望了解问题背后的数学能帮助您找到答案。

于 2013-03-05T09:44:33.927 回答