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