【问题标题】:How to represent N E S W orientation in OOP?如何在 OOP 中表示 N E S W 方向?
【发布时间】:2013-08-13 17:49:25
【问题描述】:

我正在尝试找到一种在网格上表示对象方向的编程概念,但我的逻辑在这里严重失败。 如果我有机器人(R)并且他面向北方,我希望他左右转并相应地改变方向。显然,这需要在一个循环中(可能是一个循环链表),如果 R 面向西方但我向右转,那么 R 需要返回面向北方。

我已经看到这个答案Position and orientation of robot in a grid 并且我已经使用数组做了类似的事情,但它似乎不正确。必须有更好的方法来做到这一点。

在 Google 上查找此内容只会为我提供面向编程的链接或非常复杂的机器人设计论文。

提前致谢!

【问题讨论】:

  • 您也可以在 robotics.stackexchange.com 上询问机器人特定问题。
  • 我没有做任何特定于机器人技术的事情。我正在做一个简单的火星漫游者项目——类似于 Winlogo。所以我不知道它是否有任何相关性。不过谢谢。我从没听说过那个地方。

标签: oop logic orientation robotics


【解决方案1】:

由于您没有针对特定语言提出问题,因此我可以建议一个 oo-pseudocode 版本的我会做的事情:

class Orientation2d
{
   int direction = 0;
   static Position2d[4] move = { {0,1}, {1,0}, {-1,0}, {-1,-1} };

   void left()
   {
       direction = (direction+4-1) % 4;
   }
   void right()
   {
       direction = (direction+1) % 4;
   }
   Pose2d forward()
   {
      return move[ direction ];
   }
}

class Pose2d
{
   Position2d pos;
   Orientation2d or;

   void moveForward()
   {
       pos += or.forward();
   }
   void turnLeft()
   {
       or.left();
   }
   void turnRight()
   {
       or.right();
   }
}

您应该能够轻松地将其转换为 C++ 或 Java。

【讨论】:

    【解决方案2】:

    执行此操作的方法是通过枚举,类似于您设置星期几的方式。它们处于某种循环中,您可以使用枚举选项映射关联的字符。

    public enum CardinalPosition {
        NORTH('N'), EAST('E'), SOUTH('S'), WEST('W)
    
        private CardinalPosition left;
        private CardinalPosition right;
    
        // here you set each left and right per enum value
        private void setupRight() {
            NORTH.right = CardinalPosition.EAST;
            ...
            WEST.right = CardinalPosition.NORTH;
        }
    
        private void setupLeft() {
            EAST.left = CardinalPosition.NORTH;
            ...
            NORTH.left = CardinalPosition.WEST;
        }
    
        // so the rotateLeft and rotateRight would just return the left and right values of the given CardinalPosition
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-29
      • 1970-01-01
      • 1970-01-01
      • 2019-10-17
      • 1970-01-01
      • 2019-07-28
      • 1970-01-01
      相关资源
      最近更新 更多