Class pinside (o2scl)¶
-
class pinside¶
Test line intersection and point inside polygon.
This is a fast and dirty implementation of the point inside polygon test from Jerome L. Lewis, SIGSCE Bulletin, 34 (2002) 81.
Note that an error in that article (“count-” should have been “count–”) has been corrected here.
- Idea for Future:
The inside() functions actually copy the points twice. This can be made more efficient.
Public Types
-
typedef boost::numeric::ublas::vector<double> ubvector¶
Public Functions
-
inline int intersect(double x1, double y1, double x2, double y2, double x3, double y3, double x4, double y4)¶
Determine if two line segments intersect.
The function returns 1 if the line segment determined by the endpoints \( (x_1,y_1) \) and \( (x_2,y_2) \) and the line segment determined by the endpoints \( (x_3,y_3) \) and \( (x_4,y_4) \) intersect, and 0 otherwise.
-
int inside(double x, double y, const ubvector &xa, const ubvector &ya)¶
Determine if point (x,y) is inside a polygon.
This returns 1 if the point (x,y) is inside the polygon defined by
xa
andya
, and 0 otherwise.Note that if the point (x,y) is exactly on the polygon, then the result of this function is not well-defined and it will return either 0 or 1.
-
template<class vec_t>
inline int inside(double x, double y, size_t n, const vec_t &xa, const vec_t &ya)¶ Determine if point (x,y) is inside a polygon.
This returns 1 if the point (x,y) is inside the polygon defined by
xa
andya
, and 0 otherwise.The parameter
n
should be the number of polygon points specified in vectorsxa
andya
.Note that if the point (x,y) is exactly on the polygon, then the result of this function is not well-defined and it will return either 0 or 1.
Protected Functions