【问题标题】:Realistic Bounce of Ball (off Line) in Coordinate Grid坐标网格中球的真实反弹(离线)
【发布时间】:2015-05-12 01:50:25
【问题描述】:

问题

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

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

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

【问题讨论】:

  • 如果没有人回答这个问题,您可以查看我们的来源cwynn.com/bounce,它使用您描述的方法。如果我通过电脑登录时没有回答,我会引导您解决您的任何问题。
  • 我投票结束这个问题,因为这确实是一个数学/物理问题。
  • 这是主题。 @jake 正在询问如何以编程方式实现这一点。

标签: java graphics trigonometry physics-engine


【解决方案1】:

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);
    }

决定添加图片...

唯一“真实”的东西是球和棕色线

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

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

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

【讨论】:

  • 谢谢!我什至没有看到这个问题的原始深度。一个建议 - 在顶部添加您在评论中添加的链接,以在此处附上您的实际答案。这是一个非常酷的小演示,并且很好地帮助说明了正在发生的事情。
  • @BarryGackle 你已经弄清楚了困难的部分。谢谢!在这里也添加了一个链接
猜你喜欢
  • 2021-11-27
  • 1970-01-01
  • 1970-01-01
  • 2017-12-18
  • 2021-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多