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

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

?? map.cpp

?? 機器人的行為控制模擬程序。用于機器人的環境識別。A robot action decision simulation used for robot enviroment recognition.
?? CPP
字號:
/* 
    Robot Simulator

    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License
    as published by the Free Software Foundation; either version 2
    of the License, or (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.

    (C) 2006 Jason Hunt
    nulluser@gmail.gom 
    
    File: map.cpp
*/

#include <windows.h>
#include <math.h>

#include "map.h"
#include "main.h"
#include "world.h"
#include "robot.h"


// x, y Offsets for map directions
int offsets [][2] = {{1,0},  {1,1},   {0,1},  {-1,1}, 
                    {-1,0}, {-1,-1}, {0,-1}, {1,-1}}; 
       

/* Convert world x to map x */
int get_map_x(double x)
{
    unsigned int mx = (int) ((x/world.x_size) * MAP_GRID_X);
    
    if (mx < 0) mx = 0;
    if (mx > MAP_GRID_X-1) mx = MAP_GRID_X-1;
    
    return(mx); 
}
/* End of get_map_x */


/* Convert world y to map y */
int get_map_y(double y)
{
    unsigned int my = (int) ((y/world.y_size) * MAP_GRID_Y);
    
    if (my < 0) my = 0;
    if (my > MAP_GRID_Y-1) my= MAP_GRID_Y-1;
    
    return(my); 
}
/* End of get_map_y */


/* Mark wal location on map */
void world_set_map(int x, int y)
{
    if (x < 0) x = 0;
    if (x > MAP_GRID_X-1) x = MAP_GRID_X-1;

    if (y < 0) y = 0;
    if (y > MAP_GRID_Y-1) y = MAP_GRID_Y-1;
    
    world.map_grid[x][y] = -1;
}
/* End of world_set_map */


/* Get map value */
int world_test_map( int map[MAP_GRID_X][MAP_GRID_Y], int x, int y)
{
    if (x < 0) return(255);
    if (y < 0) return(255);
   
    if (x > MAP_GRID_X - 1) return(255);
    if (y > MAP_GRID_Y - 1) return(255);
    
    return(world.map_grid[x][y] & 0x0fff);    
}
/* End of world_test_map */


/* COpute index of direction pointing to smallest neighbor */
int world_get_lowest_index(int map[MAP_GRID_X][MAP_GRID_Y], int x, int y)
{
    int lowest_index = 8;
    int lowest_num = 255;
    int v;

    for (int i  = 0; i < 8; i++)
    {    
        v = world_test_map( world.map_grid, x+offsets[i][0], y+offsets[i][1]);    

        if (v <lowest_num && v != -1) 
        { 
            lowest_num = v; 
            lowest_index = i;
        }
    }
    
    return(lowest_index);
}        
/* End of world_get_lowest_index */


/* Get vector for nagivation */
void compute_map_nav(point &nav, double x, double y)
{
    double angle = 0;

    double sum_x = 0;
    double sum_y = 0;

    for (int i  = 0; i < 8; i++)
    {    
        int v = world_test_map( world.map_grid, get_map_x(x)+offsets[i][0], get_map_y(y)+offsets[i][1]);    
    
        // Not a wall?
        if (v != -1)
        {
            sum_x -= v * cos(angle);
            sum_y -= v * sin(angle);
        }

        angle += M_PI/4.0;
    }

    nav.x = sum_x;
    nav.y = sum_y;    
}
/* End of compute_map_nav */


/* Perform map itteration */
void world_compute_map_pass( bool &change)
{
    int temp_map[MAP_GRID_X][MAP_GRID_Y];

    bool new_change = false;

    for (int y = 0; y < MAP_GRID_Y; y++)
    {
        for (int x = 0; x < MAP_GRID_X; x++)
        {
            int v, min = 255;

            v = world_test_map(world.map_grid, x-1, y);
            if (v < min && v != -1) min = v;
            
            v = world_test_map(world.map_grid,x+1, y);
            if (v < min && v != -1) min = v;

            v = world_test_map(world.map_grid,x, y-1);
            if (v < min && v != -1) min = v;

            v = world_test_map(world.map_grid,x, y+1);
            if (v < min && v != -1) min = v;

            if (min != 255 && world.map_grid[x][y] != 0 && world.map_grid[x][y] != -1)
            {
                temp_map[x][y] = min + 1;
            }
            else
                temp_map[x][y] = world.map_grid[x][y];
        }       
    }

    for (int y = 0; y < MAP_GRID_Y; y++)
        for (int x = 0; x < MAP_GRID_X; x++)
        {

            if (world.map_grid[x][y] != temp_map[x][y])
                new_change = true;

            world.map_grid[x][y] = temp_map[x][y];
            
        }
            
            
    if (!new_change) change = false;
}
/* End of world_compute_map_pass */


/* Compute navigation map */
void world_compute_map_grid( void )
{
    for (int map_x = 0; map_x < MAP_GRID_X; map_x++)
        for (int map_y = 0; map_y < MAP_GRID_Y; map_y++)
            world.map_grid[map_x][map_y] = 255;   
 
    impact_type *i = world.impacts;
 
     while (i != NULL)
     {
        world_set_map(get_map_x(i->x), get_map_y(i->y));

        world_set_map(get_map_x(i->x)+1, get_map_y(i->y));
        world_set_map(get_map_x(i->x)-1, get_map_y(i->y));
        world_set_map(get_map_x(i->x), get_map_y(i->y)+1);
        world_set_map(get_map_x(i->x), get_map_y(i->y)-1);
 
         i = i->next;
    }
 
    // Mark goal
    world.map_grid[get_map_x(world.target_x)][get_map_y(world.target_y)] = 0;
    world.map_grid[get_map_x(world.target_x)][get_map_y(world.target_y)] = 0;
 
    bool  change = true;

    // Itterage map
    while (change)
       world_compute_map_pass(change); 
 
 
    // mark path
    
    int p_x = get_map_x(robot.x);
    int p_y = get_map_y(robot.y);
    
    int val = 255;
    
    
   int old_map[MAP_GRID_X][MAP_GRID_Y];
    

    for (int y = 0; y < MAP_GRID_Y; y++)
        for (int x = 0; x < MAP_GRID_X; x++)
       old_map[x][y] = world.map_grid[x][y];
            
    int count = 0;

    int  max_path = 255;      
    
                              
    world_free_waypoints();                
                
    while(val > 0 && count++<max_path-1) 
    {
        unsigned int index = world_get_lowest_index(world.map_grid, p_x, p_y);

        // Add direction
        p_x += offsets[index][0];
        p_y += offsets[index][1];
        
        // Range check the result
        if (p_x < 0) p_x = 0;
        if (p_x > MAP_GRID_X -1) p_x = MAP_GRID_X -1;
        
        if (p_y < 0) p_y = 0;
        if (p_y > MAP_GRID_Y -1) p_y = MAP_GRID_Y -1;
        
        
        // Not a wall?, add waypoint
        if ( (val = world_test_map(world.map_grid, p_x, p_y)) != -1)
        {
            double world_x = p_x * world.x_size / (double)MAP_GRID_X;
            double world_y = p_y * world.y_size / (double)MAP_GRID_Y;
            
            point nav;

            compute_map_nav(nav, world_x, world_y);
            
            double dir = atan2(nav.y, nav.x);

            world.map_grid[p_x][p_y] |= 0x4000;

            world_add_waypoint( world_x, world_y, dir);
        }                        
    }
    
    // No path found
    if (count == max_path)
    {
         world_set_target(f_rand(1, world.x_size-1), f_rand(1, world.y_size-1));
         return;
    }

    // Number the way points
    
    waypoint_type *w = world.waypoints;
    
    int cur_waypoint = 0;
    
    while(w != NULL)
    {
        w->num = cur_waypoint++;
        w = w->next;
    }

    // Set starting waypoint
    world.cur_waypoint = world.num_waypoints - 1;
   
}
/* End of  world_compute_map_grid */





/* Draw navigation map grid */
void  world_draw_map_grid( HDC dc )
{
    double x_size = display_x /(double)(MAP_GRID_X);
    double y_size = display_y /(double)(MAP_GRID_Y);
    
    HBRUSH br;
    HPEN pen;
    return;
        
    for (int map_x = 0; map_x < MAP_GRID_X; map_x++)
        for (int map_y = 0; map_y < MAP_GRID_Y; map_y++)
        {
            int  val = world.map_grid[map_x][map_y];

            bool draw_cell = true;
   
           if (val == -1)
            {
                 draw_cell = false;
               //  br = CreateSolidBrush(RGB(255, 0, 0));
               //  pen = CreatePen(PS_SOLID, 1, RGB(255,0,0));                
            } else
            if (val & 0x4000)
            {
                 br = CreateSolidBrush(RGB(0, 0, 0));
                 pen = CreatePen(PS_SOLID, 1, RGB(0,0,0));                
            }
            else        
            { 

                draw_cell = false;
    
                val *= 10;
                if (val > 255) val = 255;

//val = 0;

              //  br = CreateSolidBrush(RGB(0, 0, val));
               // pen = CreatePen(PS_SOLID, 1, RGB(0,0,val));

               // br = CreateSolidBrush(RGB(255, 255, 255));
               //en = CreatePen(PS_SOLID, 1, RGB(255,255,255));


            }

        if (draw_cell)
        {
            SelectObject(dc, br);
            SelectObject(dc, pen);

            int screen_x = (int)(map_x * x_size);
            int screen_y = (int)(map_y * y_size);            

            Rectangle(dc, screen_x, screen_y, (int)(screen_x+x_size)+1, (int)(screen_y+y_size)+1);


         //  if (world.map_grid[map_x][map_y] < 255)
          /*  {
                    char b[400];
                 sprintf(b, "%4d", world.map_grid[map_x][map_y]);
                 TextOut(dc, screen_x, screen_y, b, strlen(b));
            }*/
            DeleteObject(br);
            DeleteObject(pen);
        }
    }
    
}
/* End of world_draw_map_grid */



?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美在线制服丝袜| 免费观看91视频大全| 欧美午夜精品久久久久久孕妇 | 色综合久久久网| 亚洲一区二区三区激情| 日韩欧美黄色影院| av亚洲精华国产精华精| 欧美aaaaaa午夜精品| 一区二区在线免费观看| 国产偷国产偷亚洲高清人白洁| 欧美日韩三级一区二区| 色综合久久天天综合网| 高清不卡在线观看| 久久99热99| 日韩av中文在线观看| 亚洲第一会所有码转帖| 国产精品不卡视频| 久久精品人人做人人综合| 日韩午夜精品视频| 在线综合+亚洲+欧美中文字幕| 91麻豆.com| 91视频免费播放| 99久久国产免费看| www.av精品| 成人激情小说乱人伦| 国产成人av一区| 国产精品一区专区| 国产精品中文字幕一区二区三区| 另类小说视频一区二区| 免费人成在线不卡| 免费成人av在线播放| 亚洲成人激情综合网| 亚洲成人1区2区| 亚洲成年人影院| 五月天久久比比资源色| 亚洲午夜在线观看视频在线| 亚洲乱码国产乱码精品精可以看| 最近日韩中文字幕| 精品无人码麻豆乱码1区2区 | 成人午夜短视频| 丁香天五香天堂综合| 国产精品99久久久| 国产91丝袜在线18| 99久久精品费精品国产一区二区| av一区二区三区四区| 在线一区二区三区| 欧美性xxxxxxxx| 91精品麻豆日日躁夜夜躁| 日韩视频免费观看高清在线视频| 精品日韩欧美一区二区| 久久亚洲综合av| 国产精品日韩成人| 一区二区三区在线观看动漫| 亚洲综合久久av| 日日欢夜夜爽一区| 国内欧美视频一区二区 | 国产麻豆精品视频| 国产成人免费av在线| 99久久夜色精品国产网站| 色噜噜狠狠色综合欧洲selulu | 欧美激情在线一区二区三区| 国产精品嫩草影院com| 一区二区三区中文字幕精品精品| 亚洲最大色网站| 久久99国产精品成人| 成人免费视频视频| 色先锋资源久久综合| 91麻豆精品91久久久久久清纯| 久久综合九色综合97_久久久| 18成人在线观看| 日韩精品成人一区二区在线| 国产一区二区三区免费看| 99久久er热在这里只有精品15 | 精品粉嫩超白一线天av| 中文字幕永久在线不卡| 亚洲成人免费在线观看| 国产成人激情av| 欧美精品tushy高清| 久久先锋资源网| 亚洲夂夂婷婷色拍ww47| 精品在线视频一区| 色婷婷亚洲一区二区三区| 精品日产卡一卡二卡麻豆| 亚洲欧洲日本在线| 免费精品视频最新在线| 成人精品在线视频观看| 日韩亚洲欧美成人一区| 日韩毛片在线免费观看| 精品一区二区三区免费毛片爱| 不卡大黄网站免费看| 日韩一区二区三区电影| 综合久久一区二区三区| 国产一区不卡在线| 欧美高清一级片在线| 亚洲天堂精品在线观看| 久久99国产精品麻豆| 欧美日韩亚洲综合一区| 一区在线中文字幕| 国产一区二区三区观看| 亚洲天堂av老司机| 国产露脸91国语对白| 777xxx欧美| 亚洲无人区一区| 99这里只有久久精品视频| 亚洲精品在线免费播放| 日韩精品91亚洲二区在线观看 | 青青草原综合久久大伊人精品优势 | 精品国产一二三| 亚洲国产综合色| 91在线观看视频| 欧美激情一区二区三区全黄| 久久99精品视频| 日韩三级中文字幕| 石原莉奈在线亚洲二区| 欧美日韩在线不卡| 亚洲精品v日韩精品| av成人动漫在线观看| 亚洲国产精品v| 国产成人自拍高清视频在线免费播放| 日韩一区二区免费在线观看| 亚洲福利视频三区| 欧美在线一区二区三区| 亚洲综合色视频| 日本韩国一区二区三区视频| 亚洲视频免费在线观看| 91视视频在线观看入口直接观看www | 一区在线观看视频| av一区二区三区在线| 中文字幕亚洲成人| 91免费精品国自产拍在线不卡| 中文字幕亚洲在| 91在线观看下载| 亚洲精品国产精品乱码不99| 99vv1com这只有精品| 亚洲乱码一区二区三区在线观看| 99精品欧美一区| 亚洲美女在线一区| 欧洲一区在线电影| 亚洲国产成人av好男人在线观看| 欧美中文一区二区三区| 亚洲bdsm女犯bdsm网站| 欧美日本在线视频| 开心九九激情九九欧美日韩精美视频电影| 奇米综合一区二区三区精品视频 | 欧美久久久影院| 婷婷亚洲久悠悠色悠在线播放| 欧美日韩成人在线| 美国欧美日韩国产在线播放| 26uuu欧美日本| 高清beeg欧美| 亚洲精品免费在线| 欧美精品久久一区二区三区| 欧美三级视频在线观看| 日韩激情一区二区| 久久人人爽人人爽| 波多野结衣亚洲一区| 亚洲欧美日韩小说| 欧美日韩另类国产亚洲欧美一级| 全国精品久久少妇| 国产无人区一区二区三区| www.亚洲精品| 视频一区二区三区入口| 久久影院电视剧免费观看| 大桥未久av一区二区三区中文| 亚洲色图20p| 欧美一级欧美一级在线播放| 国产福利不卡视频| 免费观看30秒视频久久| 欧美日韩一区二区三区高清| 免费观看在线色综合| 国产日产欧美一区| 欧美伊人精品成人久久综合97| 免费精品99久久国产综合精品| 欧美韩国日本综合| 欧美日韩另类一区| 国产精一区二区三区| 亚洲码国产岛国毛片在线| 欧美一区二区观看视频| 不卡视频免费播放| 日韩主播视频在线| 国产精品久久久久四虎| 欧美精品三级日韩久久| 国产91精品在线观看| 午夜精品久久久久影视| 欧美国产在线观看| 91精品在线麻豆| av午夜一区麻豆| 国内精品免费在线观看| 亚洲午夜在线观看视频在线| 久久久精品2019中文字幕之3| 欧美色图激情小说| va亚洲va日韩不卡在线观看| 日韩电影一区二区三区四区| 日韩毛片一二三区| 久久丝袜美腿综合| 欧美一区二区黄色| 在线观看亚洲a| 成人免费视频视频| 精品一区二区三区在线播放视频| 亚洲午夜激情av|