trajectory: follow a line
[aversive.git] / modules / base / math / geometry / lines.h
1 /*
2  *  Copyright Droids Corporation (2009)
3  *
4  *  This program is free software; you can redistribute it and/or modify
5  *  it under the terms of the GNU General Public License as published by
6  *  the Free Software Foundation; either version 2 of the License, or
7  *  (at your option) any later version.
8  *
9  *  This program is distributed in the hope that it will be useful,
10  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
11  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  *  GNU General Public License for more details.
13  *
14  *  You should have received a copy of the GNU General Public License
15  *  along with this program; if not, write to the Free Software
16  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
17  *
18  *  Revision : $Id: f16.h,v 1.6.4.3 2008-05-10 15:06:26 zer0 Exp $
19  *
20  */
21
22 #ifndef _LINES_H_
23 #define _LINES_H_
24
25 typedef struct _line {
26         double a;
27         double b;
28         double c;
29 } line_t;
30
31
32 void
33 pts2line(const point_t *p1, const point_t *p2, line_t *l);
34
35 void
36 proj_pt_line(const point_t *p, const line_t *l, point_t *p_out);
37
38 /*
39  * return values:
40  *  0 dont cross
41  *  1 cross
42  *  2 "parallel crossing"
43  *
44  *  p argument is the crossing point coordinates (dummy for 0 or 2
45  *  result)
46  */
47 uint8_t
48 intersect_line(const line_t *l1, const line_t *l2, point_t *p);
49
50 uint8_t
51 intersect_segment(const point_t *s1, const point_t *s2,
52                   const point_t *t1, const point_t *t2,
53                   point_t *p);
54
55 #endif /* _LINES_H_ */