Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在OOP中表示N E S W方向?_Oop_Logic_Orientation_Robotics - Fatal编程技术网

如何在OOP中表示N E S W方向?

如何在OOP中表示N E S W方向?,oop,logic,orientation,robotics,Oop,Logic,Orientation,Robotics,我试图找到一种编程概念,即在网格上表示对象的方向,但我的逻辑在这里严重失败。 如果我有机器人(R),他面向北方,我希望他向左和向右转动,并相应地改变方向。显然,这需要在一个循环中(可能是一个循环链表),如果R面向西方,但我向右转,那么R需要回到北方 我已经看到了这个答案,我已经使用数组做了类似的事情,但它似乎不正确。一定有更好的办法 在谷歌上查找这些信息,我只会得到面向对象的编程链接或真正复杂的机器人设计论文 提前谢谢 既然你没有问特定语言的问题,我可以推荐一个oo伪代码版本: class Or

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

我已经看到了这个答案,我已经使用数组做了类似的事情,但它似乎不正确。一定有更好的办法

在谷歌上查找这些信息,我只会得到面向对象的编程链接或真正复杂的机器人设计论文


提前谢谢

既然你没有问特定语言的问题,我可以推荐一个oo伪代码版本:

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。p> 实现这一点的方法是通过枚举,类似于您为一周中的几天设置样式的方法。它们位于某种循环中,您可以使用enum选项映射关联的字符

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

}

你也可以问一些关于机器人技术的问题。我没有做任何关于机器人技术的事情。我正在做一个简单的火星探测车项目——类似于Winlogo。所以我不知道它是否与此相关。但是谢谢你。我从没听说过那个地方。