找回密码
 马上注册

QQ登录

只需一步,快速开始

楼主: 非常乐

乐高8547迷宫机

  [复制链接]
发表于 2013-7-16 01:42:31 | 显示全部楼层
谢谢分享!!!!!
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2013-7-22 09:44:23 | 显示全部楼层
非常乐 发表于 2012-8-19 11:45
恩,只是曲柄滑块的精度不好,来回过程到达的同一位置时,不一致有误差。

能不能给曲柄上加装减速齿轮组?我需要高精度动作时就用减速齿轮组
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2013-11-29 19:00:19 | 显示全部楼层
能给个结构图么?
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2014-1-24 18:46:43 | 显示全部楼层
非常乐 发表于 2012-8-27 13:18
我也说不清是什么算法,感觉还是比较简单的算法。

笔头贴着黑边的左边 或者右边埋头向前走就是终点
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2014-1-24 20:53:32 | 显示全部楼层
厉害~
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

 楼主| 发表于 2014-1-25 13:06:42 | 显示全部楼层
捞屎人 发表于 2014-1-24 18:46
笔头贴着黑边的左边 或者右边埋头向前走就是终点

我这个不是,是先扫描迷宫,计算出路径,然后再走。
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2014-1-26 01:27:15 | 显示全部楼层
非常乐 发表于 2014-1-25 13:06
我这个不是,是先扫描迷宫,计算出路径,然后再走。

这个难度更大一些,是识别点阵 还是图形识别 ?如果是点阵和前面说的 贴着黑边左侧或右侧走算法是一个道理,利用二维数组完成,算法比较幼稚,这是我当年学C的算法效率不是很高
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

 楼主| 发表于 2014-1-30 12:35:00 | 显示全部楼层
捞屎人 发表于 2014-1-26 01:27
这个难度更大一些,是识别点阵 还是图形识别 ?如果是点阵和前面说的 贴着黑边左侧或右侧走算法是一个道 ...

用的是递归算法,不是右手走法。
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2014-1-31 16:24:15 | 显示全部楼层
本帖最后由 捞屎人 于 2014-2-1 21:05 编辑

nxc不支持递归吧
用纯c写了一个  有空 嫁接到nxc


#include<stdio.h>
#include<conio.h>  
#define M 11
#define N 16
//设置迷宫,最外围1为墙 里边0为可走路径 1为障碍
int MiGong[M][N]=
{
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
{1,0,0,0,1,0,0,0,1,0,0,0,0,1,0,1},
{1,0,1,0,0,0,1,0,1,0,1,1,0,1,0,1},
{1,0,1,0,1,0,1,1,1,0,1,0,0,1,0,1},
{1,0,1,1,1,0,0,0,0,0,1,0,1,1,0,1},
{1,0,0,0,1,1,1,0,1,1,1,0,0,0,0,1},
{1,0,1,0,1,0,0,0,0,0,1,1,1,0,1,1},
{1,1,1,0,1,0,1,1,1,0,1,0,0,0,0,1},
{1,0,0,0,1,0,0,0,1,0,1,0,1,0,1,1},
{1,0,1,0,0,0,1,0,1,0,0,0,1,0,0,1},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}
};


int num,lj[M*N][3];
void ShuChu(int a[M][N])//打印地图函数
{
int i,j;
for(i=0;i<M;i++)
   {
   for(j=0;j<N;j++)
   printf("%d",a[j]);
   printf("\n");
   }
}
int XunLu(int QiDian[2],int MuBiao[2],int FangXiang[M*N][2])
{
int i,j,top=0,x,y,d,find,FangAn=0,ZuiYou=M*N,LuJing[M*N][2],DiTu[M][N];//d为设置方向,上下左右。find为设置找不找得到路
lj[top][0]=QiDian[0];
lj[top][1]=QiDian[1];
MiGong[QiDian[0]][QiDian[1]]=-1;
find=0;d=-1;
while(top>-1)
{
if(lj[top][0]==MuBiao[0]&&lj[top][1]==MuBiao[1])
{
FangAn++;
printf("方案%d共计%d步路径如下:\n",FangAn,top);
printf("出发:");
for(x=0;x<=top;x++)
{
printf("(%d,%d)→",lj[x][0],lj[x][1]);//把找到的路径输出
num++;
}
printf("结束\n");
if(ZuiYou>top)
{
        ZuiYou=top;
        for(i=0;i<ZuiYou;i++)
           for(j=0;j<2;j++)
                LuJing[j]=lj[j];
}
}
while(d<4&&find==0)
{
d++;
switch(d)
{
case 0:x=lj[top][0]-1; y=lj[top][1];  break;//方向为上
case 1:x=lj[top][0];   y=lj[top][1]+1;break;//方向为右
case 2:x=lj[top][0]+1; y=lj[top][1];  break;//方向为下
case 3:x=lj[top][0];   y=lj[top][1]-1;//方向为左
}
if(MiGong[x][y]==0)
   find=1;
}
if(find==1)//判断是否找得到
{     
lj[top][2]=d;
top++;
lj[top][0]=x;
lj[top][1]=y;
d=-1;find=0;     //重新调整方向
MiGong[x][y]=-1;
}
else
{
MiGong[lj[top][0]][lj[top][1]]=0;
top--;d=lj[top][2]; //找不到的话退栈
}
}
for(i=0;i<M;i++)
   for(j=0;j<N;j++)
   DiTu[j]=MiGong[j];
for(i=0;i<ZuiYou;i++)
           {
     DiTu[LuJing[0]][LuJing[1]]=2;
            FangXiang[0]=LuJing[i+1][0]-LuJing[0];
            FangXiang[1]=LuJing[i+1][1]-LuJing[1];
           }
printf("%d种方案,最佳路径%d步:\n",FangAn,ZuiYou);
ShuChu(DiTu);
return ZuiYou;
}

int main()
{
int l=0,k,i,j=1,QiDian[2]={1,1},MuBiao[2],FangXiang[M*N][2];
printf("迷宫地图:\n");
ShuChu(MiGong);

for(i=0;i<M*N;i++)
{
printf("起点:%d%4d\n",QiDian[0],QiDian[1]);
printf("输入目标:");
scanf("%d%d",&MuBiao[0],&MuBiao[1]);
if(MiGong[MuBiao[0]][MuBiao[1]]==0&&MuBiao[0]<M&&MuBiao[1]<N)
     {   
      k=XunLu(QiDian,MuBiao,FangXiang);
      QiDian[0]=MuBiao[0];
      QiDian[1]=MuBiao[1];
      printf("方向:",l++);
          for(j=0;j<k-1;j++)
          printf("(%d,%d)",FangXiang[j][0],FangXiang[j][1]);
          printf("\n第%d次执行成功\n\n",l++);
          }
else printf("错误!\n");
}
}

如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2014-1-31 21:16:01 | 显示全部楼层
本帖最后由 捞屎人 于 2014-2-1 19:19 编辑
非常乐 发表于 2014-1-30 12:35
用的是递归算法,不是右手走法。

1代表 墙   0带表可以到的地方 基本算法就是这个了 递归调用 本人真心不太擅长 搞得头大 而且我专业也不是计算机  只是偶尔做一点耍耍,c语言也十多年没接触了,把这个嫁接到nxc  还有点麻烦,brcc不支持很多c的函数,尤其是文本读写这部分更是和c不一样,帮助文件也是看得一头雾水   ,可否共享一下递归的代码
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2014-2-4 00:29:49 | 显示全部楼层
花了些时间把上面的代码用 brcc移植到nxt  居然让机器人死机了  然后就是拔电池
楼主可否共享一下代码
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

 楼主| 发表于 2014-2-6 18:40:36 | 显示全部楼层
捞屎人 发表于 2014-2-4 00:29
花了些时间把上面的代码用 brcc移植到nxt  居然让机器人死机了  然后就是拔电池
楼主可否共享一下代码

共享在一楼压缩包里了。
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

头像被屏蔽
发表于 2015-4-16 22:36:35 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

 楼主| 发表于 2015-4-30 21:29:04 | 显示全部楼层
349508142 发表于 2015-4-16 22:36
为什么我用nxc编译会出错?

额,之前是对的,是不是程序被动过了,还是版本问题
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

头像被屏蔽
发表于 2015-5-6 10:42:47 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|中文乐高 ( 桂ICP备13001575号-7 )

GMT+8, 2024-5-23 17:41 , Processed in 0.085285 second(s), 16 queries .

Powered by Discuz! X3.5

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表