在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
芯片精品文章合集(500篇!) 创芯人才网--重磅上线啦!
查看: 2337|回复: 2

[原创] 一个东西,随便看看

[复制链接]
发表于 2011-12-28 15:24:33 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
# include"recognition.h"
extern xdata unsigned int Coord_Buf[8];
typedef struct CoordSift {         
unsigned int  x;             // x 坐标
unsigned int  y;             // y 坐标
unsigned char xym;           // xy 差和
unsigned char channel;       //
};
CoordSift CoordSiftA {
unsigned int  x = 0;
unsigned int  y = 0;
unsigned int  xym = 0;
unsigned char channel = 0;
}

CoordSift CoordSiftB {
unsigned int  x = 0;
unsigned int  y = 0;
unsigned int  xym = 0;
unsigned char channel = 0;
}
void CoordRank(unsigned char len)
{
    unsigned char  i;

       switch(len)
     case 1  :  if(CoordSiftB.channel == 0)
             {
          CoordSiftA.channel  = 8;      
       CoordSiftB.channel  = 0;
       }
       else if(CoordSiftA.channel == 0)
       {  
            CoordSiftA.channel  = 0;                                                   
          CoordSiftB.channel  = 8;         
       }
       else
       {
           if(CoordSiftA.x  >  Coord_Buf[0])
            CoordSiftA.xym  = CoordSiftA.x - Coord_Buf[0];
                       else
              CoordSiftA.xym  = Coord_Buf[0] - CoordSiftA.x;
      
           if(CoordSiftA.y  >  Coord_Buf[1])
            CoordSiftA.xym  += CoordSiftA.y - Coord_Buf[1];
                       else
              CoordSiftA.xym  += Coord_Buf[1] - CoordSiftA.x;        
        //----------------------------------------------------------//
           if(CoordSiftB.x  >  Coord_Buf[0])
            CoordSiftB.xym  = CoordSiftB.x - Coord_Buf[0];
                       else
              CoordSiftB.xym  = Coord_Buf[0] - CoordSiftB.x;
      
            if(CoordSiftB.y  >  Coord_Buf[1])
            CoordSiftB.xym  += CoordSiftB.y - Coord_Buf[1];
                        else
              CoordSiftB.xym  += Coord_Buf[1] - CoordSiftB.x;
                       //----------------------------------------------------------//
                        if(CoordSiftB.xym  > CoordSiftA.xym )
                        {
               CoordSiftA.channel = 8;
         CoordSiftB.channel = 0;           
      }
                        else
                        {
               CoordSiftA.channel = 0;
         CoordSiftB.channel = 8;                  
      }        
       }
      
       if(CoordSiftA.channel == 8)
                   {
            CoordSiftA.x = Coord_Buf[0];
            CoordSiftA.y = Coord_Buf[1];      
            CoordSiftB.x = 0;
            CoordSiftB.y = 0;      
       }
                   else
                   {
            CoordSiftA.x = 0;
            CoordSiftA.y = 0;
      CoordSiftB.x = Coord_Buf[0];
            CoordSiftB.y = Coord_Buf[1];               
       }
    break;
      
  case 2  :   if((CoordSiftB.x << 1) > (Coord_Buf[0] + Coord_Buf[2]))
     {
            CoordSiftA.channel  = 1;                                                        
            CoordSiftB.channel  = 4;
     }
     else
     {
            CoordSiftB.channel  = 1;                                                        
            CoordSiftA.channel  = 4;        
     }
      
       if(CoordSiftA.channel == 1)
                      {
          CoordSiftA.x = Coord_Buf[0];
             CoordSiftA.y = Coord_Buf[1];
          CoordSiftB.x = Coord_Buf[2];
             CoordSiftB.y = Coord_Buf[3];      
       }
                   else
                   {
             CoordSiftA.x = Coord_Buf[2];
             CoordSiftA.y = Coord_Buf[3];
       CoordSiftB.x = Coord_Buf[0];
             CoordSiftB.y = Coord_Buf[1];              
       }        
      
    break;
      
  case 3  :   if(CoordSiftB.x > Coord_Buf[2])   //
     {
           CoordSiftA.channel  = 1;                                                        
           CoordSiftB.channel  = 4;
     }
     else
     {
           CoordSiftB.channel  = 1;                                                        
           CoordSiftA.channel  = 4;        
     }
      
       if(CoordSiftA.channel == 1)
                   {
          CoordSiftA.x = Coord_Buf[0];
             CoordSiftA.y = Coord_Buf[1];
          CoordSiftB.x = Coord_Buf[6];
             CoordSiftB.y = Coord_Buf[7];      
       }
                   else
                   {
             CoordSiftA.x = Coord_Buf[6];
             CoordSiftA.y = Coord_Buf[7];
       CoordSiftB.x = Coord_Buf[0];
             CoordSiftB.y = Coord_Buf[1];              
       }
    break;
      
  case 4  :  if(CoordSiftA.channel | CoordSiftB.channel == 8)    // 1 -> 2
             {
            if(CoordSiftA.channel == 8)
      {
          CoordSiftB.xym  = 0xffff;
       for(i = 0; i < 4; i++)
       {
                    if(CoordSiftA.x  >  Coord_Buf[i<<1])
                     CoordSiftA.xym  = CoordSiftA.x - Coord_Buf[i<<1];
                                else
                        CoordSiftA.xym  = Coord_Buf[i<<1] - CoordSiftA.x;
                 
                    if(CoordSiftA.y  >  Coord_Buf[i<<1 + 1])
                     CoordSiftA.xym  += CoordSiftA.y - Coord_Buf[i<<1 + 1];
                                else
                        CoordSiftA.xym  += Coord_Buf[i<<1 + 1] - CoordSiftA.x;
                                if(CoordSiftA.xym < CoordSiftB.xym)
        {
            CoordSiftB.xym     = CoordSiftA.xym;
         CoordSiftA.channel = i;
           }         
       }
      }
      else
      {
          CoordSiftA.xym  = 0xffff;
       for(i = 0; i < 4; i++)
       {
                    if(CoordSiftB.x  >  Coord_Buf[i<<1])
                     CoordSiftB.xym  = CoordSiftB.x - Coord_Buf[i<<1];
                                else
                        CoordSiftB.xym  = Coord_Buf[i<<1] - CoordSiftB.x;
                 
                    if(CoordSiftB.y  >  Coord_Buf[i<<1 + 1])
                     CoordSiftB.xym  += CoordSiftB.y - Coord_Buf[i<<1 + 1];
                                else
                        CoordSiftB.xym  += Coord_Buf[i<<1 + 1] - CoordSiftB.x;
                                if(CoordSiftB.xym < CoordSiftA.xym)
        {
            CoordSiftA.xym     = CoordSiftB.xym;
         CoordSiftB.channel = i;
           }         
       }      
      }                 
       }
       else if(CoordSiftA.channel | CoordSiftB.channel != 0)    // 2 -> 2
       {
                           if(inverterA == 1)
                           {
          switch(CoordSiftA.channel)
              case 1 :  CoordSiftA.channel  = 2;                                                        
                              CoordSiftB.channel  = 3;
                      break;
        case 2 :  CoordSiftA.channel  = 1;                                                        
                              CoordSiftB.channel  = 4;   
          break;
        case 3 :  CoordSiftA.channel  = 4;                                                        
                              CoordSiftB.channel  = 1;   
          break;
        case 4 :  CoordSiftA.channel  = 3;                                                        
                              CoordSiftB.channel  = 2;   
          break;            
                                default: ;
      }  
      
                           if(inverterB == 1)
                           {
          switch(CoordSiftA.channel)
              case 1 :  CoordSiftA.channel  = 3;                                                        
                              CoordSiftB.channel  = 2;
                      break;
        case 2 :  CoordSiftA.channel  = 4;                                                        
                              CoordSiftB.channel  = 1;   
          break;
        case 3 :  CoordSiftA.channel  = 1;                                                        
                              CoordSiftB.channel  = 4;   
          break;
        case 4 :  CoordSiftA.channel  = 2;                                                        
                              CoordSiftB.channel  = 3;   
          break;            
                                default: ;
      }
       }
       else   // 0 -> 2
       {
            CoordSiftA.channel  = 1;                                                        
            CoordSiftB.channel  = 4;
       }
      
        switch(CoordSiftA.channel)
      case 1 :  CoordSiftA.x = Coord_Buf[0];
                      CoordSiftA.y = Coord_Buf[1];
                   CoordSiftB.x = Coord_Buf[6];
                      CoordSiftB.y = Coord_Buf[7];
              break;
         case 2 :  CoordSiftA.x = Coord_Buf[2];
                      CoordSiftA.y = Coord_Buf[3];
                   CoordSiftB.x = Coord_Buf[4];
                      CoordSiftB.y = Coord_Buf[5];   
           break;
         case 3 :  CoordSiftA.x = Coord_Buf[4];
                      CoordSiftA.y = Coord_Buf[5];
                   CoordSiftB.x = Coord_Buf[2];
                      CoordSiftB.y = Coord_Buf[3];   
           break;
         case 4 :  CoordSiftA.x = Coord_Buf[6];
                      CoordSiftA.y = Coord_Buf[7];
                   CoordSiftB.x = Coord_Buf[0];
                      CoordSiftB.y = Coord_Buf[1];   
           break;            
                       default: ;
        break;        
        default : ;        
}
发表于 2012-2-2 09:15:07 | 显示全部楼层
什么东东
发表于 2014-12-3 11:46:58 | 显示全部楼层
恩 隨便看看  也頂一下
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-12-19 05:13 , Processed in 0.016353 second(s), 8 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表