Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 通过点阵列的光滑2D/lwjgl曲线_Java_Lwjgl_Slick2d - Fatal编程技术网

Java 通过点阵列的光滑2D/lwjgl曲线

Java 通过点阵列的光滑2D/lwjgl曲线,java,lwjgl,slick2d,Java,Lwjgl,Slick2d,我正试图改写游戏“Achtung,die Kurve”(注意,曲线) 现在,我遇到了一个问题: 如何绘制穿过N个点(x/y坐标)的曲线 for(int i=0;i

我正试图改写游戏“Achtung,die Kurve”(注意,曲线)

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

for(int i=0;i
^这将始终创建一条新线,因此我的FPS很快达到10


有什么帮助吗?

这是一个代数问题,可以用线性方程组来解决

通常,通过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

它给出了a
b=-3.5
。将这些a、b和c的值重新插入二次方程中,可以得到以下结果

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

我没有仔细检查我的数学,但如果我做得正确,这将给出一条通过三个点的二次曲线

毫无疑问,已经有一个图书馆在做这件事,但我很抱歉地说,我不知道那将是什么。希望了解问题背后的数学知识能帮助你找到答案

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