亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? navigation.c

?? 此程序是GPS定位導航程序
?? C
字號:
/*****************************************************************/
/*函數名稱: GPS_Navigation.c                                    */
/*函數功能: 小車導航,實現最短路徑                              */      
/*有無返回: 無                                                  */
/*修改記錄: 無修改記錄                                          */
/*編寫作者: t483-4-19chenyong                                   */
/*編寫日期: 2008-3-12                                           */
/*****************************************************************/


#include "common.h"                    
#include "TS12864A.h"
#include "navigation.h "
#include "delay.h" 
#include "map.h"  
#include "key.h"
#include "astar.h"
#include "window.h"

/*****************************************************************/
/*
				   /----------GPS導航電子地圖(測試版本)
				  /
			  	 /-------------------------------------------
                |       S,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,	 |
				|	    *,*,*,*,*,B,*,*,*,*,*,*,*,*,*,*,	 | 
                |       *,*,*,*,*,*,*,*,*,*,*,*,*,*,E,*,	 | 
				|	    *,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,	 | 
				|	    *,*,*,A,*,*,*,*,*,*,*,*,*,*,*,*,	 |
				|	    *,*,*,*,*,*,*,*,*,*,C,*,*,*,*,*,	 | 
				|	    *,*,*,*,*,*,F,*,*,*,*,*,*,*,*,*,	 | 
				|	    *,*,*,*,*,*,*,*,*,*,*,*,*,*,D,*,	 |
			   	 -------------------------------------------
說明: A,B,C,D,E,F為用戶要到達的終點,S為起點。通過按鍵盤上的按鍵
       實現小車的最短路徑搜索,并通過液晶顯示行駛的步數。

*/


struct 	MapData 
              {
			        unsigned char Gps_Map_Length[Map_Length];
              		unsigned char Gps_Map_Width[Map_Width];	  			  
			  };

xdata   struct  MapData;
extern unsigned char key;
extern unsigned int  Position;

byte_t    maze[MAZE_HEIGHT][MAZE_WIDTH] = {
                0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
                1,0,1,0,1,1,1,0,1,1,1,0,0,1,0,1,
                0,0,1,0,1,0,0,1,1,0,1,1,0,1,1,1,
                1,0,1,1,1,1,1,1,1,1,1,1,1,0,1,1,
                1,1,1,1,0,1,1,0,1,0,1,0,1,1,1,1,
                1,1,0,1,1,1,1,1,1,0,1,0,1,1,0,0,
                0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,
                0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
};
byte_t    maze0[MAZE_HEIGHT][MAZE_WIDTH] = {
                0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
                1,0,1,0,1,1,1,0,1,1,1,0,0,1,0,1,
                0,0,1,0,1,0,0,1,1,0,1,1,0,1,1,1,
                1,0,1,1,1,1,1,1,1,1,1,1,1,0,1,1,
                1,1,1,1,0,1,1,0,1,0,1,0,1,1,1,1,
                1,1,0,1,1,1,1,1,1,0,1,0,1,1,0,0,
                0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,
                0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
};

/*
    方向信號量查詢表
    0x01(0000 0001) : 上
    0x02(0000 0010) : 下
    0x04(0000 0100) : 左
    0x08(0000 1000) : 右
*/

byte_t d_signal[4]  = {0x01, 0x02, 0x04, 0x08};

/*
    方向信號量使用表
    如果指定方向已經走過,那么使用“與”運算去處該方向
    0x0E(0000 1110) : 上
    0x0D(0000 1101) : 下
    0x0B(0000 1011) : 左
    0x07(0000 0111) : 右
*/

byte_t d_spend[4]   = {0x0E, 0x0D, 0x0B, 0x07};

/* 指定方向移動偏量 */
int      move[4][2]   = { {0, -1}, {0, 1}, {-1, 0}, {1, 0} };

/* 打印迷宮用的符號 */
byte_t symbol[3]   = {0,1,2};

/* 求兩點間的距離 */

uint_t distance( uint_t pos1X, uint_t pos1Y, uint_t pos2X, uint_t pos2Y ) {

    uint_t    ret = 0;

    /* 距離公式 */
    ret = (uint_t)sqrt((pow((double)((int)pos1X - (int)pos2X),2) + pow((double)((int)pos1Y - (int)pos2Y),2)));

    return ret;

}

/* 壓縮坐標 */
uint_t create_pos( uint_t pX, uint_t pY ) {
    uint_t ret = 0;
    /* 將pX賦給ret,這樣pX坐標在ret的低八位 */
    ret = pX;

    /* 將pX坐標移到高八位去,這樣低位就能存放pY */
    ret <<= 8;
    /* 將pY存放放到ret的低八位,并保持高八位的數據不變 */
    ret  |= pY;

    return ret;
}

/*
== 估計函數 ===========================================
-p            : 當前移動到的節點指針
-quit_x
-quit_y        : quit_x 和 quit_y表示迷宮出口坐標
-maze       : 迷宮矩陣
=======================================================
*/
path_t * evaluate( path_t *p, uint_t quit_x, uint_t quit_y, byte_t maze[MAZE_HEIGHT][MAZE_WIDTH] ) {
    uint_t pX, pY;

    /* 用于接收四個方向離開出口的距離,以便選擇最近的方向移動 */
    int    dis[4];
    int minDis = 32767;
    int minId  = -1;

    path_t *pnode = (path_t *)0;

    register int i;

    /* 計算當前節點的坐標 */
    pX = p->pos >> 8;
    pY = p->pos & 0x00FF;

    memset(dis, (int)-1, sizeof(int)*4);

    /* 計算每個方向離開出口的距離,一次存放到dis數組,若沒有i方向,則dis[i]任保留-1 */
    for( i = 0; i < 4; ++i ) {
        if( (p->direct & d_signal[i]) >> i == 0x01 )
            dis[i] =(int)distance(pX + move[i][0], pY + move[i][1], quit_x, quit_y);
    }

    /* 獲得最短距離的方向 */
    for(i = 0; i < 4; ++i) {
        if(dis[i] != -1 && dis[i] < minDis) {
            minId = i;
            minDis = dis[i];
        }
    }

    /* 若沒有可用的方向,則通知尋徑函數折回 */
    if(minId == -1)
        return (path_t *)0;

    /* 用去最近距離方向的信號量 */
    p->direct &= d_spend[minId];
    /* 在移動到新位置之前,在舊位置處留下足跡 */
    maze[pY][pX] = (byte_t)PATH_FOOTPRINT;

    /* 構建新的路徑節點 */
    pnode = (path_t *)malloc(sizeof(path_t));
    assert(pnode);

    /* 計算下一個位置的坐標 */
    pX += move[minId][0];
    pY += move[minId][1];

    pnode->pos      = create_pos(pX, pY);
    pnode->prev   = p;
    pnode->next   = (path_t *)0;
    pnode->direct = 0;

    /* 在新位置處,計算下一個位置可用的移動方向 */
    for(i = 0; i < 4; ++i) {
        if(maze[pY + move[i][1]][pX + move[i][0]] != PATH_BLOCK && maze[pY + move[i][1]][pX + move[i][0]] != PATH_FOOTPRINT) {
            /* 若嘗試的下一個位置不是障礙物或自己走過的足跡,則視為可用方向,獲得該方向的信號量 */
                pnode->direct |= d_signal[i];
        }
    }

    return pnode;

}

/*
== A*算法尋徑函數 ===========================================
-eX
-eY                  :入口坐標
-qX
-qY                  :出口坐標
-maze              :迷宮矩陣
=============================================================
*/

path_t * AStar(uint_t eX, uint_t eY, uint_t qX, uint_t qY, byte_t maze[MAZE_HEIGHT][MAZE_WIDTH]) {
    register int i;


    /* 壓縮坐標 */
    uint_t quit_pos = create_pos(qX, qY);

    /* 構建入口路徑節點,視為路徑鏈的頭 */
    path_t *head = (path_t *)malloc(sizeof(path_t));
    path_t *p    = (path_t *)0;
    path_t *back = (path_t *)0;
    assert(head);

    p = head;
    p->direct = 0;
    p->pos    = create_pos(eX,eY);
    p->next   = (path_t *)0;
    p->prev   = (path_t *)0;

    /* 創建入口處的可用方向 */
    for(i = 0; i < 4; ++i) {
        if(maze[eY + move[i][1]][eX + move[i][0]] != PATH_BLOCK)
            /* 若無障礙物則獲得該方向的信號量 */
            p->direct |= d_signal[i];
    }

    do {

        /* 獲得下個路徑的節點指針 */
        back = evaluate(p, qX, qY, maze);
        if(back) {
            p->next = back;
            p = p->next;
        }

        /* 無路可走則折回 */
        if(p->direct == 0 && p != head && p->pos != quit_pos) {
            back = p->prev;
            back->next = (path_t *)0;

            /* 清楚腳印 */
            maze[p->pos & 0x00FF][p->pos >> 8] = (byte_t)PATH_WALKON;

            free(p);
            p = back;
        }

        /* 若走不出迷宮,即折回到入口,且入口處的可用方向全部嘗試過 */
        if(p == head && p->direct == 0) {
            free(head);
            return (path_t *)0;
        }

    } while( p->pos != quit_pos );

    /* 在出口處留下腳印,便于打印 */
    maze[p->pos & 0x00FF][p->pos >> 8] = (byte_t)PATH_FOOTPRINT;

    return head;

}
/*****************************************************************/


/*****************************************************************/
/*函數名稱: show_menu_DaoHang.c                                 */
/*函數功能: GPS導航                                             */      
/*有無返回: 無                                                  */
/*修改記錄: 無修改記錄                                          */
/*入口參數: 
             start_x------------------------------------起點x坐標
			 start_y------------------------------------起點y坐標
			 end_x  ------------------------------------終點x坐標
			 end_y  ------------------------------------終點y坐標
			                                                     */
/*編寫日期: 2008-5-01                                           */
/*****************************************************************/

//void show_menu_DaoHang(unsigned char start_x,unsigned char start_y,unsigned char end_x,unsigned char end_y)
void show_menu_DaoHang()
 {
     register unsigned char  i=0,j=0; 
	 path_t *pHead;
 	 byte_t    mazetemp[MAZE_HEIGHT][MAZE_WIDTH]={0};

	 for(i = 0; i < MAZE_HEIGHT; ++i) 
	 {
        for(j = 0; j < MAZE_WIDTH; ++j)
	    mazetemp[i][j]=maze[i][j];
     
	 } 
     pHead=AStar((uint_t)(Position/1000),(uint_t)(Position%1000/100),(uint_t)(Position%100/10),(uint_t)(Position%10),mazetemp);
  
    
    /* 打印地圖 */
 
     for(i = 0; i < MAZE_HEIGHT; ++i) 
	 {
        for(j = 0; j < MAZE_WIDTH; ++j)
        Display_Point(j,i,symbol[mazetemp[i][j]]);
		/*
			  j-------代表x方向
			  i-------代表y方向
			  symbolic-路徑顯示	    
		*/

     }
 
}
 
void Show_Map()
{

	 register unsigned char point_x=0,point_y=0;
     for(point_y = 0; point_y < MAZE_HEIGHT; ++point_y) 
	 {
        for(point_x = 0; point_x < MAZE_WIDTH; ++point_x)

//         Display_Point(point_x,point_y,symbol[maze[point_y][point_x]]);
		   Display_Point(point_x,point_y,symbol[maze0[point_y][point_x]]);
		
			/*	  i-------代表y方向													
	        	  j-------代表x方向
			     symbolic-路徑顯示	    
		    */

     }

}
  
    

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人午夜免费av| 中文字幕亚洲不卡| 日本在线观看不卡视频| 91麻豆精品国产综合久久久久久| 亚洲欧美另类小说| 色婷婷综合久久久中文字幕| 一区二区三区日韩欧美精品| 欧美日韩国产高清一区二区| 性久久久久久久久久久久| 欧美一区二区三区免费观看视频| 免费成人你懂的| 久久这里只精品最新地址| 成人黄色在线看| 亚洲精品国产一区二区精华液| 欧美日韩视频在线观看一区二区三区| 天天av天天翘天天综合网色鬼国产| 91麻豆精品国产91久久久久| 国产九色精品成人porny | 精品日产卡一卡二卡麻豆| 黄色资源网久久资源365| 欧美激情一区三区| 在线欧美日韩国产| 看国产成人h片视频| 久久久亚洲午夜电影| 波波电影院一区二区三区| 一区二区三区四区不卡视频| 欧美一区二区三区免费在线看| 国产成人免费在线| 亚洲一区二区视频在线| 日韩精品一区二区三区视频在线观看| 国产精品一区二区男女羞羞无遮挡 | 日韩制服丝袜先锋影音| 久久夜色精品国产噜噜av| aaa亚洲精品| 日韩国产精品久久| 日韩福利电影在线观看| 久久久精品国产免费观看同学| 在线中文字幕一区| 久久99日本精品| 岛国av在线一区| 欧美日韩中文字幕一区| 青椒成人免费视频| 国产欧美日韩不卡| 欧美日韩综合色| 成人av高清在线| 麻豆精品国产91久久久久久 | 精品国产乱码久久久久久免费 | 色视频一区二区| 天堂资源在线中文精品| 日本一区二区综合亚洲| 欧美酷刑日本凌虐凌虐| 99久久精品免费看国产免费软件| 久久国产精品一区二区| 亚洲一区二区不卡免费| 国产视频911| 精品欧美乱码久久久久久1区2区| 在线中文字幕一区二区| 国产成人亚洲综合a∨婷婷| 国产成人精品亚洲日本在线桃色| 亚洲线精品一区二区三区 | 精品免费国产二区三区| 精品污污网站免费看| 一本大道久久a久久综合| 国产成人一级电影| 国模冰冰炮一区二区| 人妖欧美一区二区| 成人av免费在线| 国产精品1区二区.| 久久精品国产精品亚洲红杏| 亚洲国产你懂的| 一区二区在线观看av| 中文字幕中文字幕一区二区| 国产三级精品三级在线专区| 久久久久国产精品免费免费搜索| 欧美精品一区二区高清在线观看| 日韩一区二区麻豆国产| 欧美电影一区二区| 欧美一区二区在线免费观看| 欧美精品欧美精品系列| 欧美日韩你懂得| 欧美日韩成人综合| 欧美日韩日日摸| 337p亚洲精品色噜噜| 欧美一区二区三区不卡| 欧美精品第1页| 日韩免费在线观看| 日韩欧美中文字幕公布| 自拍av一区二区三区| 椎名由奈av一区二区三区| 亚洲精品久久7777| 欧美一级夜夜爽| 色婷婷av一区二区三区之一色屋| 91视视频在线观看入口直接观看www | 亚洲成av人在线观看| 天堂久久一区二区三区| 久久机这里只有精品| 国产精品小仙女| 99久久精品免费| 欧美丝袜自拍制服另类| 欧美一区二区啪啪| 久久久精品欧美丰满| 国产精品国产成人国产三级| 亚洲黄色尤物视频| 免费高清在线一区| 国产成人免费视频一区| 色综合久久九月婷婷色综合| 欧美日韩综合色| 精品国产一区二区三区忘忧草| 盗摄精品av一区二区三区| 国产精品一区二区久激情瑜伽| 成人一区二区三区中文字幕| 91香蕉视频在线| 7777精品伊人久久久大香线蕉经典版下载 | 国产麻豆精品一区二区| av一区二区三区| 欧美精品一级二级三级| 国产欧美一区二区精品性色| 一区二区三区高清| 久久se精品一区精品二区| 99久久精品国产精品久久| 欧美精品久久一区| 国产欧美一区二区在线观看| 一区二区三区四区av| 国产一区中文字幕| 欧美视频一区二区在线观看| 久久人人97超碰com| 一区二区三区高清不卡| 精品久久久久久久久久久久久久久 | 99视频精品在线| 8x8x8国产精品| 国产精品国产自产拍在线| 日韩国产在线一| 波多野洁衣一区| 欧美成人一区二区三区片免费 | 99精品欧美一区二区三区小说| 欧美特级限制片免费在线观看| 亚洲精品一区二区三区精华液| 亚洲美女视频在线观看| 国产激情一区二区三区四区| 欧美三级韩国三级日本一级| 久久久精品日韩欧美| 日韩高清不卡在线| 成人app在线| 欧美一区二区三区免费观看视频 | 欧美一级高清片在线观看| 136国产福利精品导航| 韩国成人福利片在线播放| 欧美午夜在线观看| 中文字幕欧美一| 国产福利一区二区三区视频| 制服丝袜亚洲网站| 亚洲成人综合视频| 色天天综合久久久久综合片| 久久久午夜精品| 毛片av中文字幕一区二区| 欧美日韩激情一区二区| 亚洲日本青草视频在线怡红院 | 91美女片黄在线| 国产欧美一区二区精品性色| 久久99精品久久久久久国产越南| 欧美日韩一区二区欧美激情 | 亚洲国产日韩在线一区模特| 99r精品视频| 欧美激情一区二区三区| 国产成人精品三级| 国产亚洲综合av| 国产九九视频一区二区三区| 久久影院午夜片一区| 国产一区二区视频在线播放| xfplay精品久久| 国产麻豆成人精品| 国产亚洲1区2区3区| 国产成人av电影免费在线观看| 国产婷婷色一区二区三区四区| 国产成人精品亚洲午夜麻豆| 国产欧美精品一区aⅴ影院| 床上的激情91.| 1区2区3区精品视频| 日本电影欧美片| 亚洲国产欧美日韩另类综合 | 国精产品一区一区三区mba视频 | 7777精品伊人久久久大香线蕉| 国产精品资源站在线| 国产欧美日韩视频在线观看| 国产成人免费视| 亚洲欧美欧美一区二区三区| 色激情天天射综合网| 亚洲国产日日夜夜| 日韩欧美一区在线观看| 黄色小说综合网站| 国产精品国产精品国产专区不蜜 | 日本久久精品电影| 亚洲一区二区三区四区在线观看 | 日韩亚洲电影在线| 国产一区二区按摩在线观看| 国产女人aaa级久久久级| 97se亚洲国产综合自在线| 亚洲网友自拍偷拍| 精品国产一区二区三区久久影院| 国产成人免费xxxxxxxx|