#include "multilaterationalgorithm.hh" #include "minmax.hh" using namespace std ; using std::tr1::unordered_map ; /* *** Constructors *** */ MultilaterationAlgorithm::MultilaterationAlgorithm(): request(NULL) { // Will be changed when other multilateration methods will be // implemented multilateration_method = new MinMax(Point3D(-0.5, -0.5, 0), Point3D(10, 31.5, 6)) ; // FIXME: minmax start and stop } MultilaterationAlgorithm::~MultilaterationAlgorithm() { delete multilateration_method ; } /* *** Operations *** */ Result MultilaterationAlgorithm::compute(const Request &_request) { request = &_request ; compute_ap_distance_circles() ; Point3D position(multilaterate()) ; return Result(request, position) ; } void MultilaterationAlgorithm::compute_ap_distance_circles() { ap_distances.clear() ; const unordered_map &measurements = request->get_measurements() ; for (unordered_map::const_iterator i = measurements.begin() ; i != measurements.end() ; ++i) ap_distances[i->second.get_ap()] = estimate_distance(i->second) ; }