00001 /* 00002 * Player - One Hell of a Robot Server 00003 * Copyright (C) 2000 Brian Gerkey & Kasper Stoy 00004 * gerkey@usc.edu kaspers@robotics.usc.edu 00005 * 00006 * This library is free software; you can redistribute it and/or 00007 * modify it under the terms of the GNU Lesser General Public 00008 * License as published by the Free Software Foundation; either 00009 * version 2.1 of the License, or (at your option) any later version. 00010 * 00011 * This library is distributed in the hope that it will be useful, 00012 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00014 * Lesser General Public License for more details. 00015 * 00016 * You should have received a copy of the GNU Lesser General Public 00017 * License along with this library; if not, write to the Free Software 00018 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 00019 * 00020 */ 00021 /************************************************************************** 00022 * Desc: Global map (grid-based) 00023 * Author: Andrew Howard 00024 * Date: 6 Feb 2003 00025 * CVS: $Id: map.c 1713 2003-08-23 04:03:43Z inspectorg $ 00026 **************************************************************************/ 00027 00028 #include <assert.h> 00029 #include <math.h> 00030 #include <stdlib.h> 00031 #include <string.h> 00032 #include <stdio.h> 00033 00034 #include "map.h" 00035 00036 00037 // Create a new map 00038 map_t *map_alloc(void) 00039 { 00040 map_t *map; 00041 00042 map = (map_t*) malloc(sizeof(map_t)); 00043 00044 // Assume we start at (0, 0) 00045 map->origin_x = 0; 00046 map->origin_y = 0; 00047 00048 // Make the size odd 00049 map->size_x = 0; 00050 map->size_y = 0; 00051 map->scale = 0; 00052 00053 // Allocate storage for main map 00054 map->cells = (map_cell_t*) NULL; 00055 00056 return map; 00057 } 00058 00059 00060 // Destroy a map 00061 void map_free(map_t *map) 00062 { 00063 free(map->cells); 00064 free(map); 00065 return; 00066 } 00067 00068 00069 // Get the cell at the given point 00070 map_cell_t *map_get_cell(map_t *map, double ox, double oy, double oa) 00071 { 00072 int i, j; 00073 map_cell_t *cell; 00074 00075 i = MAP_GXWX(map, ox); 00076 j = MAP_GYWY(map, oy); 00077 00078 if (!MAP_VALID(map, i, j)) 00079 return NULL; 00080 00081 cell = map->cells + MAP_INDEX(map, i, j); 00082 return cell; 00083 } 00084