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

时间:2017-12-19 18:17:59

标签: java user-interface collision simulator robot

最近,我们被指派编码多个圈子,这些圈子就像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

1 个答案:

答案 0 :(得分:0)

假设你只有方形墙:

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

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