标题:★☆机器人坐标变换问题☆★
只看楼主
xiaosan669
Rank: 1
来 自:西北工业大学
等 级:新手上路
帖 子:78
专家分:0
注 册:2007-3-9
 问题点数:0 回复次数:13 
★☆机器人坐标变换问题☆★
[bo]描述:[/bo]
机器人面向x轴正方向站在原点。当他接受到一个数字n时开始动作。
当n=-1时,机器人左转,
  n=-2时,右转,
  n>0时,机器人前进n步。
  n=0时,结束。
[bo]输入:[/bo]
若干个整数,每个整数大于等于-2,小于100。最后一个整数为0,代表输入结束。(除最后一个整数,其他整数均不为0)
[bo]输出:[/bo]
两个整数,每个一行,代表机器人最终的x坐标和y坐标。
输入样例:
-1
2
-2
1
0
[bo]输出样例:[/bo]1
2


这个问题应该怎么思考?   【可以把C程序贴上来 大家讨论讨论】

[[it] 本帖最后由 xiaosan669 于 2008-4-10 12:52 编辑 [/it]]
搜索更多相关主题的帖子: 机器人 坐标变换 
2008-04-10 11:43
xiaosan669
Rank: 1
来 自:西北工业大学
等 级:新手上路
帖 子:78
专家分:0
注 册:2007-3-9
得分:0 
杂没有人说呢 。。。。我可是在线等呀!

========== 我的世界,我说了算! ==========
2008-04-10 11:54
cobby
Rank: 1
等 级:新手上路
威 望:1
帖 子:565
专家分:0
注 册:2007-7-11
得分:0 
设置两个变量,一个axis,代表坐标轴号,可以令axis=0(代表当前移动轴为x轴),axis=1(代表当前移动轴为y轴).
另一个dir,代表正负方向,可以令dir=0(代表正向移动),dir=1(代表负向移动)

则,初始状态下,axis=0,dir=0;
因为每次改变方向,必定转换移动轴,所以读入-1或-2时,axis=1-axis.而dir变化要具体分析,
比如若当前状态为axis=0,dir=0,遇到-1,状态改变为axis=1,dir=0,以此类推。

不知道有没有更简单的方法。

努力成为菜鸟!
2008-04-10 11:55
xiaosan669
Rank: 1
来 自:西北工业大学
等 级:新手上路
帖 子:78
专家分:0
注 册:2007-3-9
得分:0 
[bo]以下是引用 [un]cobby[/un] 在 2008-4-10 11:55 的发言:[/bo]

设置两个变量,一个axis,代表坐标轴号,可以令axis=0(代表当前移动轴为x轴),axis=1(代表当前移动轴为y轴).
另一个dir,代表正负方向,可以令dir=0(代表正向移动),dir=1(代表负向移动)

则,初始状态下,axis=0,dir=0;
因为每次改变 ...



貌似这样下来代码不少哦  》。。。。

========== 我的世界,我说了算! ==========
2008-04-10 11:56
cobby
Rank: 1
等 级:新手上路
威 望:1
帖 子:565
专家分:0
注 册:2007-7-11
得分:0 
初一想就这办法呵,不知道有没有更好的办法

努力成为菜鸟!
2008-04-10 12:09
leeco
Rank: 4
等 级:贵宾
威 望:10
帖 子:1026
专家分:177
注 册:2007-5-10
得分:0 
程序代码:
#include <iostream>
#include <assert.h>
using namespace std;

int dx[]={1,0,-1,0};
int dy[]={0,-1,0,1};

class CRobot{
    int x,y;
    int dirc;
public:
    CRobot():x(0),y(0),dirc(0){}
    
    void turn_left(){
        dirc=(dirc+3)%4;
    }
    
    void turn_right(){
        dirc=(dirc+1)%4;
    }       
    
    void go_ahead(int n){
        x+=dx[dirc]*n;
        y+=dy[dirc]*n;
    }
    
    void operate(int n){
        switch(n){
        case -1:
            turn_left();            
            break;
        case -2:
            turn_right();
            break;
        default:
            assert(n>0);
            go_ahead(n);
        }    
    }
    
    void tell_location(){
        printf("%d\n%d\n",x,y);
    }    
};

int main()
{
    CRobot robot;
    int n;
    while(scanf("%d",&n),n){
        robot.operate(n);
    }
    robot.tell_location();
    scanf("%*s");
}
2008-04-10 12:25
xiaosan669
Rank: 1
来 自:西北工业大学
等 级:新手上路
帖 子:78
专家分:0
注 册:2007-3-9
得分:0 
[bo]以下是引用 [un]leeco[/un] 在 2008-4-10 12:25 的发言:[/bo]


#include
#include
using namespace std;

int dx[]={1,0,-1,0};
int dy[]={0,-1,0,1};

class CRobot{
    int x,y;
    int dirc;
public:
    CRobot():x(0),y(0),dirc(0){}
   
    void turn_left(){
      ...

非常感谢  不过最近看的是C...
嘿嘿....

========== 我的世界,我说了算! ==========
2008-04-10 12:30
xiaosan669
Rank: 1
来 自:西北工业大学
等 级:新手上路
帖 子:78
专家分:0
注 册:2007-3-9
得分:0 
大家有没有C的源代码参考一下?

========== 我的世界,我说了算! ==========
2008-04-10 12:53
yd4433
Rank: 1
等 级:新手上路
帖 子:404
专家分:0
注 册:2008-3-9
得分:0 
不同的语言 有很多相通的地方 酸法也相通 侃侃6#的思路当是学习了 怎么感觉是JAVA  或者是C++

[[it] 本帖最后由 yd4433 于 2008-4-10 13:18 编辑 [/it]]

------...-.-..-...-----........-------.......----.....------....||- - !
2008-04-10 13:11
xiaosan669
Rank: 1
来 自:西北工业大学
等 级:新手上路
帖 子:78
专家分:0
注 册:2007-3-9
得分:0 
[bo]以下是引用 [un]yd4433[/un] 在 2008-4-10 13:11 的发言:[/bo]

JAVA 和C 有很多相通的地方 酸法也相通 侃侃6#的思路当是学习了

那个貌似是C++吧  ....

========== 我的世界,我说了算! ==========
2008-04-10 13:13



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-208161-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.892719 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved