• Main Page
  • Related Pages
  • Namespaces
  • Classes
  • Files
  • File List

PointPairDistance.h

00001 /**********************************************************************
00002  * $Id: PointPairDistance.h 2809 2009-12-06 01:05:24Z mloskot $
00003  *
00004  * GEOS - Geometry Engine Open Source
00005  * http://geos.refractions.net
00006  *
00007  * Copyright (C) 2009  Sandro Santilli <strk@keybit.net>
00008  *
00009  * This is free software; you can redistribute and/or modify it under
00010  * the terms of the GNU Lesser General Public Licence as published
00011  * by the Free Software Foundation. 
00012  * See the COPYING file for more information.
00013  *
00014  **********************************************************************
00015  *
00016  * Last port: algorithm/distance/PointPairDistance.java 1.1 (JTS-1.9)
00017  *
00018  **********************************************************************/
00019 
00020 #ifndef GEOS_ALGORITHM_DISTANCE_POINTPAIRDISTANCE_H
00021 #define GEOS_ALGORITHM_DISTANCE_POINTPAIRDISTANCE_H
00022 
00023 //#include <geos/geom/LineSegment.h> // for composition
00024 #include <geos/platform.h> // for DoubleNotANumber
00025 #include <geos/geom/Coordinate.h> // for inlines
00026 
00027 #include <vector> // for composition
00028 #include <cassert>
00029 
00030 namespace geos {
00031         namespace algorithm {
00032                 namespace distance {
00033                         //class PointPairDistance;
00034                 }
00035         }
00036         namespace geom {
00037                 //class Geometry;
00038                 class Coordinate; 
00039                 //class LineString; 
00040                 //class Polygon; 
00041         }
00042 }
00043 
00044 namespace geos {
00045 namespace algorithm { // geos::algorithm
00046 namespace distance { // geos::algorithm::distance
00047 
00053 class PointPairDistance
00054 {
00055 public:
00056 
00057         PointPairDistance()
00058                 :
00059                 pt(2),
00060                 distance(DoubleNotANumber),
00061                 isNull(true)
00062         {
00063                 assert(pt.size() == 2);
00064         }
00065 
00066         void initialize()
00067         {
00068                 isNull = true;
00069         }
00070 
00071         void initialize(const geom::Coordinate& p0, const geom::Coordinate& p1)
00072         {
00073                 pt[0] = p0;
00074                 pt[1] = p1;
00075                 distance = p0.distance(p1);
00076                 isNull = false;
00077         }
00078 
00079         double getDistance() const
00080         {
00081                 return distance;
00082         }
00083 
00084         const std::vector<geom::Coordinate>& getCoordinates() const
00085         {
00086                 return pt;
00087         }
00088 
00089         const geom::Coordinate& getCoordinate(unsigned int i) const
00090         {
00091                 assert(i<pt.size());
00092                 return pt[i];
00093         }
00094 
00095         void setMaximum(const PointPairDistance& ptDist)
00096         {
00097                 setMaximum(ptDist.pt[0], ptDist.pt[1]);
00098         }
00099 
00100         void setMaximum(const geom::Coordinate& p0, const geom::Coordinate& p1)
00101         {
00102                 if (isNull) {
00103                         initialize(p0, p1);
00104                         return;
00105                 }
00106                 double dist = p0.distance(p1);
00107                 if (dist > distance)
00108                         initialize(p0, p1, dist);
00109         }
00110 
00111         void setMinimum(const PointPairDistance& ptDist)
00112         {
00113                 setMinimum(ptDist.pt[0], ptDist.pt[1]);
00114         }
00115 
00116         void setMinimum(const geom::Coordinate& p0, const geom::Coordinate& p1)
00117         {
00118                 if (isNull) {
00119                         initialize(p0, p1);
00120                         return;
00121                 }
00122                 double dist = p0.distance(p1);
00123                 if (dist < distance)
00124                         initialize(p0, p1, dist);
00125         }
00126 
00127 private:
00128 
00135         void initialize(const geom::Coordinate& p0, const geom::Coordinate& p1,
00136                         double dist)
00137         {
00138                 pt[0] = p0;
00139                 pt[1] = p1;
00140                 distance = dist;
00141                 isNull = false;
00142         }
00143 
00144         std::vector<geom::Coordinate> pt;
00145 
00146         double distance;
00147 
00148         bool isNull;
00149 };
00150 
00151 } // geos::algorithm::distance
00152 } // geos::algorithm
00153 } // geos
00154 
00155 #endif // GEOS_ALGORITHM_DISTANCE_POINTPAIRDISTANCE_H
00156 
00157 /**********************************************************************
00158  * $Log$
00159  **********************************************************************/
00160 

Generated on Thu Jul 22 2010 for GEOS by  doxygen 1.7.1