/usr/include/geos/algorithm/CentroidArea.h is in libgeos-dev 3.2.2-3ubuntu1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 | /**********************************************************************
* $Id: CentroidArea.h 2556 2009-06-06 22:22:28Z strk $
*
* GEOS - Geometry Engine Open Source
* http://geos.refractions.net
*
* Copyright (C) 2005-2006 Refractions Research Inc.
* Copyright (C) 2001-2002 Vivid Solutions Inc.
*
* This is free software; you can redistribute and/or modify it under
* the terms of the GNU Lesser General Public Licence as published
* by the Free Software Foundation.
* See the COPYING file for more information.
*
**********************************************************************/
#ifndef GEOS_ALGORITHM_CENTROIDAREA_H
#define GEOS_ALGORITHM_CENTROIDAREA_H
#include <geos/export.h>
#include <geos/geom/Coordinate.h>
// Forward declarations
namespace geos {
namespace geom {
class CoordinateSequence;
class Geometry;
class Polygon;
}
}
namespace geos {
namespace algorithm { // geos::algorithm
/**
* \class CentroidArea geosAlgorithm.h geos/geosAlgorithm.h
*
* \brief Computes the centroid of an area geometry.
*
* Algorithm:
*
* Based on the usual algorithm for calculating
* the centroid as a weighted sum of the centroids
* of a decomposition of the area into (possibly overlapping) triangles.
* The algorithm has been extended to handle holes and multi-polygons.
* See <code>http://www.faqs.org/faqs/graphics/algorithms-faq/</code>
* for further details of the basic approach.
*/
class GEOS_DLL CentroidArea {
public:
CentroidArea()
:
basePt(0.0, 0.0),
areasum2(0)
{}
~CentroidArea() {}
/**
* Adds the area defined by a Geometry to the centroid total.
* If the geometry has no area it does not contribute to the centroid.
*
* @param geom the geometry to add
*/
void add(const geom::Geometry *geom);
/**
* Adds the area defined by an array of
* coordinates. The array must be a ring;
* i.e. end with the same coordinate as it starts with.
* @param ring an array of {@link Coordinate}s
*/
void add(const geom::CoordinateSequence *ring);
geom::Coordinate* getCentroid() const;
/// Return false if a centroid couldn't be computed
bool getCentroid(geom::Coordinate& ret) const;
private:
/// the point all triangles are based at
geom::Coordinate basePt;
// temporary variable to hold centroid of triangle
geom::Coordinate triangleCent3;
/// Partial area sum
double areasum2;
/// partial centroid sum
geom::Coordinate cg3;
void setBasePoint(const geom::Coordinate &newbasePt);
void add(const geom::Polygon *poly);
void addShell(const geom::CoordinateSequence *pts);
void addHole(const geom::CoordinateSequence *pts);
void addTriangle(const geom::Coordinate &p0, const geom::Coordinate &p1,
const geom::Coordinate &p2,bool isPositiveArea);
static void centroid3(const geom::Coordinate &p1, const geom::Coordinate &p2,
const geom::Coordinate &p3, geom::Coordinate &c);
static double area2(const geom::Coordinate &p1, const geom::Coordinate &p2,
const geom::Coordinate &p3);
};
} // namespace geos::algorithm
} // namespace geos
#endif // GEOS_ALGORITHM_CENTROIDAREA_H
/**********************************************************************
* $Log$
* Revision 1.1 2006/03/09 16:46:48 strk
* geos::geom namespace definition, first pass at headers split
*
**********************************************************************/
|