前言
此博客记录了在大学生工程训练赛中设计的一个简单的小算法。
需求:
如下图所示,一个圆形转桶,分为四个扇形部分,分别为 1、 2、 3、4,有一个箭头 “ 0 ” 固定方向指向圆形转桶其中的一扇,转桶每次可转动 “ 90° ” ,箭头指向扇形部分需要变化时,要设计出最优路径,在完成要求的前提下使转桶转动角度最小 。
实现过程:
代码如下,注释很详细,不再赘述,仅供参考。
#include<math.h>
u8 obj; //串口数据,垃圾种类: 0x31 , 0x32 ,0x33 , 0x34
static u8 rec_obj = 0x31; //!!!!(写在外面,全局变量)
//启动时 1 号桶在正下方,逆时针依次为 2 3 4 号桶
if ( rec_obj - obj == 0 )
{
//不用转
}
else if ( abs(rec_obj - obj) == 0x02 ) //绝对值等与 2 ,任一方向随便转两次
{
//顺时针或者逆时针转 2 次
}
else if ( rec_obj - obj > 0 )
{
if (abs(rec_obj - obj) < 0x02)
{
//逆时针旋转 1 次
}
else if (abs(rec_obj - obj) > 0x02)
{
//顺时针旋转 1 次
}
}
else if (rec_obj - obj < 0)
{
if (abs(rec_obj - obj) < 0x02)
{
//顺时针旋转 1 次
}
else if (abs(rec_obj - obj) > 0x02)
{
//逆时针旋转 1 次
}
}
rec_obj = obj; //记录当前转桶位置