QGIS API Documentation  2.12.0-Lyon
geomfunction.h
Go to the documentation of this file.
1 /*
2  * libpal - Automated Placement of Labels Library
3  *
4  * Copyright (C) 2008 Maxence Laurent, MIS-TIC, HEIG-VD
5  * University of Applied Sciences, Western Switzerland
6  * http://www.hes-so.ch
7  *
8  * Contact:
9  * maxence.laurent <at> heig-vd <dot> ch
10  * or
11  * eric.taillard <at> heig-vd <dot> ch
12  *
13  * This file is part of libpal.
14  *
15  * libpal is free software: you can redistribute it and/or modify
16  * it under the terms of the GNU General Public License as published by
17  * the Free Software Foundation, either version 3 of the License, or
18  * (at your option) any later version.
19  *
20  * libpal is distributed in the hope that it will be useful,
21  * but WITHOUT ANY WARRANTY; without even the implied warranty of
22  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
23  * GNU General Public License for more details.
24  *
25  * You should have received a copy of the GNU General Public License
26  * along with libpal. If not, see <http://www.gnu.org/licenses/>.
27  *
28  */
29 
30 #ifndef _GEOM_FUNCTION_
31 #define _GEOM_FUNCTION_
32 
33 #include "util.h"
34 
35 namespace pal
36 {
37 
38  /*
39  * o(x2,y2)
40  * /
41  * cp > 0 /
42  * / cp < 0
43  * /
44  * /
45  * o (x1, y1)
46  */
47  inline double cross_product( double x1, double y1, double x2, double y2, double x3, double y3 )
48  {
49  return ( x2 - x1 ) *( y3 - y1 ) - ( x3 - x1 ) *( y2 - y1 );
50  }
51 
52  inline double dist_euc2d( double x1, double y1, double x2, double y2 )
53  {
54  return sqrt(( x2 - x1 ) *( x2 - x1 ) + ( y2 - y1 ) *( y2 - y1 ) );
55  }
56 
57  inline double dist_euc2d_sq( double x1, double y1, double x2, double y2 )
58  {
59  return ( x2 - x1 ) *( x2 - x1 ) + ( y2 - y1 ) *( y2 - y1 );
60  }
61 
62  void findLineCircleIntersection( double cx, double cy, double radius,
63  double x1, double y1, double x2, double y2,
64  double& xRes, double& yRes );
65 
66 
67  int convexHullId( int *id, const double* const x, const double* const y, int n, int *&cHull );
68 
69  bool isSegIntersects( double x1, double y1, double x2, double y2, // 1st segment
70  double x3, double y3, double x4, double y4 ); // 2nd segment
71 
72  /*
73  * \brief compute the point wherre two lines intersects
74  * \return true if the ok false if line are parallel
75  */
76  bool computeLineIntersection( double x1, double y1, double x2, double y2, // 1st line (segment)
77  double x3, double y3, double x4, double y4, // 2nd line segment
78  double *x, double *y );
79 
80  int reorderPolygon( int nbPoints, double *x, double *y );
81 
82 } // end namespace
83 
84 #endif
int reorderPolygon(int nbPoints, double *x, double *y)
bool computeLineIntersection(double x1, double y1, double x2, double y2, double x3, double y3, double x4, double y4, double *x, double *y)
double dist_euc2d_sq(double x1, double y1, double x2, double y2)
Definition: geomfunction.h:57
double dist_euc2d(double x1, double y1, double x2, double y2)
Definition: geomfunction.h:52
double cross_product(double x1, double y1, double x2, double y2, double x3, double y3)
Definition: geomfunction.h:47
int convexHullId(int *id, const double *const x, const double *const y, int n, int *&cHull)
bool isSegIntersects(double x1, double y1, double x2, double y2, double x3, double y3, double x4, double y4)
void findLineCircleIntersection(double cx, double cy, double radius, double x1, double y1, double x2, double y2, double &xRes, double &yRes)