【问题标题】:How to detect Wall Collision and Rotate Robot by 90 degrees?如何检测墙壁碰撞并将机器人旋转 90 度?
【发布时间】:2017-12-19 18:17:58
【问题描述】:

最近,我们被指派为在 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 度,而不是像弹跳球那样从墙壁反弹回来。

我们将不胜感激任何帮助或可以为我执行此操作的工作代码。我有一个名为“balls”的所有球的 AraryList。

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

这是我目前所拥有的。但是我需要每个球都连接一个传感器,以检测前面是否有墙。

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

【问题讨论】:

    标签: java user-interface collision simulator robot


    【解决方案1】:

    假设你只有方形墙:

    例如,如果球击中右侧墙壁,您希望移除所有 x 速度,然后添加正速度或负速度。

    这样做的问题是机器人最终只会绕着地图的外边缘移动。

    【讨论】:

    • 是的,这是一种奇怪的情况,除非有不同的方法来做到这一点,比如一个传感器从圆圈中出来,检测它前面是否有墙,然后旋转它?但我不知道该怎么做
    猜你喜欢
    • 1970-01-01
    • 2016-04-24
    • 1970-01-01
    • 1970-01-01
    • 2018-05-06
    • 1970-01-01
    • 2016-10-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多