如何检测墙壁碰撞和旋转机器人90度?

问题描述 投票:-1回答:1

最近,我们被指派编码多个圈子,这些圈子就像GUI界面中的机器人一样。基本上,一个机器人模拟器。

我有代码可以在多个圈子中产生,可以像机器人一样。

这是我目前用于检测机器人和方块末端之间的墙碰撞的代码:

private void checkCollisions(double maxX, double maxY) {

for (ListIterator<Ball> slowIt = balls.listIterator(); slowIt.hasNext();) {
        Ball b1 = slowIt.next();
        // check wall collisions:
        double xVel = b1.getXVelocity();
        double yVel = b1.getYVelocity();
        if ((b1.getCenterX() - b1.getRadius() <= 0 && xVel < 0)
                || (b1.getCenterX() + b1.getRadius() >= maxX && xVel > 0)) {
            b1.setXVelocity(-xVel);
        }
        if ((b1.getCenterY() - b1.getRadius() <= 0 && yVel < 0)
                || (b1.getCenterY() + b1.getRadius() >= maxY && yVel > 0)) {
            b1.setYVelocity(-yVel);
        }
        for (ListIterator<Ball> fastIt = balls.listIterator(slowIt.nextIndex()); fastIt.hasNext();) {
            Ball b2 = fastIt.next();

            final double deltaX = b2.getCenterX() - b1.getCenterX() ;
            final double deltaY = b2.getCenterY() - b1.getCenterY() ;
            if (colliding(b1, b2, deltaX, deltaY)) {
                bounce(b1, b2, deltaX, deltaY);
            }
        }
    }
}

b1.setXVelocity(-xVel);  

b1.setYVelocity(-yVel); 

是使圆圈从墙壁反弹回来的主要部分。然而,取而代之的是,我希望球能够检测到墙壁并旋转90度,而不是像弹跳球那样从墙壁反弹回来。

任何帮助都将得到充分的理解,或者是一段可以为我做这件事的代码。我有一个叫做'球'的所有球的AraryList。

如果需要,我可以提供源代码。

这就是我到目前为止所拥有的。但我需要每个球都有一个传感器连接到它们,检测前方是否有墙。

https://i.stack.imgur.com/XsQvX.png

java user-interface collision simulator robot
1个回答
0
投票

假设你只有方形墙:

例如,如果球击中右壁,则需要移除所有x速度,然后添加正或负速度。

这个问题是机器人最终会绕过地图的外边缘。

© www.soinside.com 2019 - 2024. All rights reserved.