在坐标网格中球的弹跳(离线)实际表现

4
问题
我正在尝试制作一个程序,通过计算球与线相交时的角度,并围绕交点旋转该线来使球弹跳。我已经有了所有的算法和公式,只是在将斜率传递回球动量的部分遇到了问题。所有计算的最终结果(我已经确认过)是线的斜率和交点(弹跳点)。如果我只有斜率,如何判断球在弹跳后沿着斜率的哪个方向移动?
附注: 我使用的语言是Java 1.8,带有一些任意的外部图形库,但我不是在寻找要插入预先存在的代码中的代码,而是在寻找您认为我可能能够做什么的一般想法。对于这个问题至关重要的是,整个项目都是基于坐标的。
非常感谢您提供的任何意见或可能的答案,如果您需要问题的详细说明,请随时问我!

1
如果没有人回答你,你可以查看我们在http://cwynn.com/bounce/上使用的方法。如果我登录电脑时还没有得到答案,我会帮助你解决任何问题。 - Charlie Wynn
1
我投票关闭此问题,因为这实际上是一个数学/物理问题。 - Keith Nicholas
1
这是相关话题。@jake正在询问如何以编程方式实现这个。 - MLavrentyev
1个回答

4

https://cwynn.com/ball-bounce/是我几年前制作的一个小的html5画布,它演示了op想要如何处理“反弹”。

你有一个球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);
    }

决定添加一张图片...

唯一的“真实”物体是球和棕色线

“球”是粉色的,朝着光线“路径”的中心的“接触点”前进

投影是球通过接触点的反射,反射是投影点相对于直线的反射。

一旦球接触到棕色线,它的方向向量应该从“路径”变为“新路径”(位于接触点和反射上的线)

enter image description here


1
谢谢!我甚至没有看到这个问题的原始深度。一个建议——在你实际的答案旁边加上你在评论中放置的链接。那是一个非常酷的小演示,很好地帮助说明了正在发生的事情。 - Barry Gackle
@BarryGackle 你已经解决了难点。谢谢!我也在这里添加了一个链接。 - Charlie Wynn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接