【问题标题】:Detect the direction of balls after collision [duplicate]碰撞后检测球的方向[重复]
【发布时间】:2016-03-23 10:40:50
【问题描述】:

我正在构建一个简单的 Android 游戏。 而且我一直在检测两个球碰撞的方向。 我有一个移动球A和一个固定球BA 球比 B 小很多。

我不在乎两个球的质量。两个小球碰撞后,小球B消失,小球A改变方向

我想要这样的东西..

这是我当前的代码:

private void collision(Ball a, Ball b){
        if(b.isVisible){
            double d = Math.sqrt((a.cx - b.cx)*(a.cx - b.cx) + (a.cy - b.cy)*(a.cy - b.cy));

            if(d <= a.radius + b.radius) {
                b.isVisible = false;
                if(a.dx * b.dx < 0 && a.dy * b.dy < 0){
                    a.dx = - a.dx;
                    a.dy = - a.dy;
                    b.dx = - b.dx;
                    b.dy = - b.dy;
                } else if(a.dx * b.dx < 0){
                    a.dx =- b.dx;
                    a.dx = - b.dx;
                } else if(a.dy * b.dy < 0){
                    a.dy = - a.dy;
                    b.dy = - b.dy;
                } else{
                    a.dx = - a.dx;
                    a.dy = - a.dy;
                    b.dx = - b.dx;
                    b.dy = - b.dy;
                }
            }

        }

    }

但它只是颠倒了球B的方向

所以,我正在寻找更好的解决方案。 有人帮忙吗?非常感谢!

【问题讨论】:

  • 我认为您的意思是要计算方向。既然'b'会消失,为什么不把它从代码中去掉。您需要计算 A 撞击 B 的角度,因为它垂直于它会反弹的那个角度。

标签: java android collision


【解决方案1】:

我可以为您的案例提供一些指导,而无需深入研究方程式。

你想要实现的重要方面是移动球的接触点和方向(注意你的情况是一种假设,因为两个球的质量和速度通常都很重要).

您可以在两个球之间的接触点处画一条假想的切线,并将其视为反射面。考虑到这一点,您可以根据移动球的方向计算反射角 (see the attached picture)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-06
    • 2016-08-08
    • 2015-07-12
    • 2010-09-25
    相关资源
    最近更新 更多