LibGDX制导-精灵跟踪2D无限随机贝塞尔曲线

LibGDX制导-精灵跟踪2D无限随机贝塞尔曲线,libgdx,sprite,bezier,spline,plane,Libgdx,Sprite,Bezier,Spline,Plane,我已经能够应用一个平滑的动画到我的精灵和控制它使用加速度计。我的精灵固定在x-AIX上左右移动 从这里开始,我需要弄清楚如何创建一条垂直的无限波浪线,以便精灵尝试跟踪。我的游戏的目的是让用户用加速计控制精灵的左/右移动,以尽可能地追踪永不结束的波浪线,同时精灵和相机都沿垂直方向移动,以模拟“沿直线移动”。如果线条是随机生成的,这将是理想的 我研究过样条曲线、平面、贝塞尔曲线等,但我找不到任何与我试图实现的目标有足够密切关系的东西 我只是想寻求一些指导,看看我可以用什么方法来达到这个目的。有什么想

我已经能够应用一个平滑的动画到我的精灵和控制它使用加速度计。我的精灵固定在x-AIX上左右移动

从这里开始,我需要弄清楚如何创建一条垂直的无限波浪线,以便精灵尝试跟踪。我的游戏的目的是让用户用加速计控制精灵的左/右移动,以尽可能地追踪永不结束的波浪线,同时精灵和相机都沿垂直方向移动,以模拟“沿直线移动”。如果线条是随机生成的,这将是理想的

我研究过样条曲线、平面、贝塞尔曲线等,但我找不到任何与我试图实现的目标有足够密切关系的东西


我只是想寻求一些指导,看看我可以用什么方法来达到这个目的。有什么想法吗?

您可以使用4到5个正弦波的总和(每个正弦波具有不同的振幅、波长和相位差)。所有这3个参数都可能是随机的

结果曲线将非常平滑(因为它主要是正弦曲线),但它看起来是随机的(它的时间周期将是所有4到5个随机波长的LCM,这是一个巨大的数字)

因此,这条曲线不会重复很长一段时间,但它不会对记忆造成困难。关于计算复杂性,您始终可以通过使用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);
    }

}
现在创建一个SineTerm的数组,并添加由
evaluate(x)
返回的所有值(使用sprite的一个坐标作为输入)。将输出用作sprite的其他坐标。你该走了

真正的诀窍是调整这些随机数


祝你好运。

你能发布一些你想要达到的目标的参考资料吗..嗯,不是真的,因为我自己提出了这个概念。基本上,我希望用户能够控制精灵跟踪线条。我将最终记录用户使用精灵追踪线条的准确程度。对不起,我找不到任何推荐信-这正是我要找的。嗨,Tanmay,谢谢你的深入回答!我觉得这有点过头了,但不用担心,我会研究关键术语,以便更好地理解傅立叶级数的概念。但是现在,我不知道如何将这个ace想法转化为代码。。。如果你在这方面有什么建议,请告诉我。干杯。很高兴知道这有帮助。我已经更新了答案,请查看。谢谢你,Tanmay,你给了我一个好的开始。我致力于解决这个问题,所以我会接受你给我的,并从那里开始建设。再次感谢!Hi@TanmayPatil我使用了sineTerm类,但我不知道如何使用evaluate(x)创建具有波浪效果的精灵。请帮助我用它创建精灵将是一个完全不同的问题,我认为在评论中无法解释。我认为你应该把它作为一个不同的新问题发布,并链接到这个问题。