坐标网格中球的真实反弹(离线)

Realistic Bounce of Ball (off Line) in Coordinate Grid

问题

所以我正在尝试编写一个程序,通过计算球与线的角度(如果它是一条相交线)并旋转该线来创建球从线反弹交点以找到新的坡度。我拥有所有 algorithms 和公式,除了我将斜率交还给球动量的部分。所有计算的最终结果(我已经确定有效)是直线的斜率和交点,或反弹点。如果我只有一个斜坡,我怎么知道反弹后球在斜坡上的运动方向?

旁注: 我正在使用的语言是 Java 1.8 和一些任意的外部 graphics library,但我不是在寻找代码来插入我已有的代码,我是在寻找你认为我的总体思路也许可以做到。此外,对问题至关重要的是,整个项目都是基于坐标的。

非常感谢您提供任何意见或可能的答案,并询问我是否需要有关该问题的说明!

https://cwynn.com/ball-bounce/ 是我几年前做的一个 html5 canvas 小东西,它说明了 op 想要如何处理 'bounce'

你有你的球 B,它将在碰撞点 C 上击中一条直线 L。B->C 形成一条直线。在 C 之外的那条直线上取一个点并将其反射到 L 以获得反射点 R。当球击中 C 时,您可以删除它的方向向量,并给它 C->R 的向量。你需要重置他们的速度。所以获取方向向量的大小,并缩放新的方向向量以匹配。

编辑:决定添加代码(这让我意识到我忘记了缩放它们的速度)

    //closestCollPt[0] is the line the 'player' will hit next
    var dist = player.position.dist(closestCollPt[0]);

    //the 'player' in my case is a circle, so this indicates collision
    if(dist < player.radius*2)
    {
        //the collision point to the reflection like I mentioned
        //in the text above
        var newDir = closestCollPt[0].vecTo(reflection);

        //I break out their parts, b/c I want to scale the vector
        //doable in one line, but hard to debug
        var newDirX = newDir.x;
        var newDirY = newDir.y;
        var newDirDist = newDir.dist(new Vector(0,0));
        //for whatever reason I was calling the size of a vector
        //'dist' when I wrote this


        var currDirDist = player.direction.dist(new Vector(0,0));

        //give the player the direction we got from Coll->Ref
        //scale it so their speed doesn't change
        player.direction = newDir.scale(currDirDist).scale(1/newDirDist);
    }

决定添加图片...

唯一的'real'东西是球和棕线

'ball'是粉色的, 朝向射线 'path'、

中心的 'contact' 点

投影是球越过接触点的反射,反射是投影点越过直线的反射。

一旦球接触到棕色线,它的方向矢量应该从 'path' 变为 'new path'(位于接触和反射上的线)