⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 geo-tools.cc

📁 无线个域网(WPAN)就是在个人周围空间形成的无线网络
💻 CC
字号:
//// geo-tools.cc   : GEAR Tools// authors        : Yan Yu and Fabio Silva//// Copyright (C) 2000-2002 by the University of Southern California// Copyright (C) 2000-2002 by the University of California// $Id: geo-tools.cc,v 1.6 2002/11/26 22:45:37 haldar Exp $//// This program is free software; you can redistribute it and/or// modify it under the terms of the GNU General Public License,// version 2, as published by the Free Software Foundation.//// 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.////#include "geo-tools.hh"bool IsSameLocation(GeoLocation src, GeoLocation dst){  if  ((src.longitude_ == dst.longitude_) &&       (src.latitude_ == dst.latitude_))    return true;  return false;}double Distance(double long1, double lat1, double long2, double lat2){  double distance;   distance = sqrt((long1 - long2) * (long1 - long2) +		  (lat1 - lat2) * (lat1 - lat2));  return distance;}//subregion must clear to be the same as target_region...int HeuristicValueTable::retrieveEntry(GeoLocation *dst){  int i;  bool once = true;  if (first_ == -1)    return FAIL;  for (i = first_; (once || (i != next(last_))); i = next(i)){    if (IsSameLocation(table_[i].dst_, *dst))      return i;    once = false;  }  return FAIL;}bool HeuristicValueTable::updateEntry(GeoLocation dst,				      double heuristic_value){  double old_heuristic_value;  int index;  if ((index = retrieveEntry(&dst)) == FAIL){    addEntry(dst, heuristic_value);    return true;  }  else{    old_heuristic_value = table_[index].heuristic_value_;    table_[index].heuristic_value_ = heuristic_value;    if (ABS(heuristic_value - old_heuristic_value)	>= GEO_HEURISTIC_VALUE_UPDATE_THRESHOLD)      return true;  }  return false;}void HeuristicValueTable::addEntry(GeoLocation dst, double heuristic_value){  int i;  if (num_entries_ >= FORWARD_TABLE_SIZE){    if (((last_ + 1) % FORWARD_TABLE_SIZE) != first_){      DiffPrint(DEBUG_IMPORTANT, "GEO: last: %d, first: %d\n", last_, first_);    }    assert(((last_ + 1) % FORWARD_TABLE_SIZE) == first_);    first_++;    first_ = first_ % FORWARD_TABLE_SIZE;    last_++;    last_ = last_ % FORWARD_TABLE_SIZE;    i = last_;    table_[i].dst_ = dst;    table_[i].heuristic_value_ = heuristic_value;    return;  }  if (first_ == -1){    first_ = 0;    last_ = 0;  }  else{    last_++;    last_ = last_ % FORWARD_TABLE_SIZE;  }  i = last_;  table_[i].dst_ = dst;  table_[i].heuristic_value_ = heuristic_value;  num_entries_++;}//subregion must clear to be the same as target_region...int LearnedCostTable::retrieveEntry(int neighbor_id, GeoLocation *dst){  int i;  bool once = true;  if (first_ == -1)    return FAIL;  for (i = first_; (once || (i != next(last_))); i = next(i)){    if (IsSameLocation(table_[i].dst_, *dst) &&	(neighbor_id == table_[i].node_id_))      return i;    once = false;  }  return FAIL;}void LearnedCostTable::updateEntry(int neighbor_id, GeoLocation dst,				   double learned_cost){  int index;  if ((index = retrieveEntry(neighbor_id, &dst)) == FAIL)    addEntry(neighbor_id, dst, learned_cost);  else    table_[index].learned_cost_value_ = learned_cost;}void LearnedCostTable::addEntry(int neighbor_id, GeoLocation dst,				double learned_cost){  int i;  if (num_entries_ >= LEARNED_COST_TABLE_SIZE){    if (((last_ + 1) % LEARNED_COST_TABLE_SIZE) != first_){      DiffPrint(DEBUG_IMPORTANT,		"GEO: LEARNED cost table ERROR: last = %d, first = %d\n",		last_, first_);    }    assert(((last_ + 1) % LEARNED_COST_TABLE_SIZE) == first_);    first_++;    first_ = first_ % LEARNED_COST_TABLE_SIZE;    last_++;    last_ = last_ % LEARNED_COST_TABLE_SIZE;    i = last_;    table_[i].node_id_ = neighbor_id;    table_[i].dst_ = dst;    table_[i].learned_cost_value_ = learned_cost;    return;  }  if (first_ == -1){    first_ = 0;    last_ = 0;  }  else{    last_++;    last_ = last_ % LEARNED_COST_TABLE_SIZE;  }  i = last_;  table_[i].node_id_ = neighbor_id;  table_[i].dst_ = dst;  table_[i].learned_cost_value_ = learned_cost;  num_entries_++;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -