1 /* $Id$
2  *
3  * Name:    projections.hpp
4  * Authors: Pietro Belotti, Carnegie Mellon University
5  * Purpose: tools for projecting points on lines/planes
6  *
7  * (C) Carnegie-Mellon University, 2006-10.
8  * This file is licensed under the Eclipse Public License (EPL)
9  */
10 
11 #ifndef CouenneProjections_hpp
12 #define CouenneProjections_hpp
13 
14 #include <stdio.h>
15 
16 #include "CouennePrecisions.hpp"
17 
18 namespace Couenne {
19 
20 /** Compute projection of point (x0, y0) on the segment defined by
21  *  line ax + by + c <>= 0 (sign provided by parameter sign) and
22  *  bounds [lb, ub] on x. Return distance from segment, 0 if satisfied
23  */
24 
25 CouNumber project (CouNumber a,   CouNumber b, CouNumber c,
26 		   CouNumber x0,  CouNumber y0,
27 		   CouNumber lb,  CouNumber ub,
28 		   int sign,
29 		   CouNumber *xp = NULL, CouNumber *yp = NULL);
30 
31 /** Compute projection of point (x0, y0) on the segment defined by two
32  *  points (x1,y1), (x2, y2) -- sign provided by parameter
33  *  sign. Return distance from segment, 0 if on it.
34  */
35 
36 CouNumber projectSeg (CouNumber x0,  CouNumber y0,
37 		      CouNumber x1,  CouNumber y1,
38 		      CouNumber x2,  CouNumber y2,
39 		      int sign,
40 		      CouNumber *xp = NULL, CouNumber *yp = NULL);
41 }
42 
43 #endif
44