1
/***************************************************************
5
* AUTHOR(S): Martin Pavlovsky (Google SoC 2008, Paul Kelly mentor)
6
* Based on "dct" by Geoff Leach, Department of Computer
9
* PURPOSE: Creates a Delaunay triangulation vector map
11
* COPYRIGHT: (C) RMIT 1993
12
* (C) 2008-2009 by the GRASS Development Team
14
* This program is free software under the GNU General
15
* Public License (>=v2). Read the file COPYING that
16
* comes with GRASS for details.
18
* The following notices apply to portions of the code originally
19
* derived from work by Geoff Leach of RMIT:
21
* Author: Geoff Leach, Department of Computer Science, RMIT.
22
* email: gl@cs.rmit.edu.au
28
* Copyright (c) RMIT 1993. All rights reserved.
30
* License to copy and use this software purposes is granted provided
31
* that appropriate credit is given to both RMIT and the author.
33
* License is also granted to make and use derivative works provided
34
* that appropriate credit is given to both RMIT and the author.
36
* RMIT makes no representations concerning either the merchantability
37
* of this software or the suitability of this software for any particular
38
* purpose. It is provided "as is" without express or implied warranty
41
* These notices must be retained in any copies of any part of this software.
43
**************************************************************/
45
#ifndef GEOM_PRIMITIVES_H
46
#define GEOM_PRIMITIVES_H
55
#define CREATE_VECTOR(p1, p2, dx, dy) ((dx) = (p2)->x - (p1)->x, (dy) = (p2)->y - (p1)->y)
57
#define DOT_PRODUCT_2V(a1, a2, b1, b2) ((a1) * (b1) + (a2) * (b2))
59
#define CROSS_PRODUCT_2V(a1, a2, b1, b2) ((a1) * (b2) - (a2) * (b1))
61
cross-product around p2
62
((p2->x - p1->x) * (p3->y - p2->y) - (p2->y - p1->y) * (p3->x - p2->x))
66
#define CROSS_PRODUCT_3P(p1, p2, p3) (((p2)->x - (p1)->x) * ((p3)->y - (p1)->y) - ((p2)->y - (p1)->y) * ((p3)->x - (p1)->x))
68
/* predicate testing if p3 is to the left of the line through p1 and p2 */
69
#define LEFT_OF(p1, p2, p3) (CROSS_PRODUCT_3P(p1, p2, p3) > 0)
71
/* predicate testing if p3 is to the right of the line through p1 and p2 */
72
#define RIGHT_OF(p1, p2, p3) (CROSS_PRODUCT_3P(p1, p2, p3) < 0)