OpenCores
URL https://opencores.org/ocsvn/orsoc_graphics_accelerator/orsoc_graphics_accelerator/trunk

Subversion Repositories orsoc_graphics_accelerator

[/] [orsoc_graphics_accelerator/] [trunk/] [sw/] [utils/] [fonter/] [poly2tri/] [common/] [utils.h] - Blame information for rev 5

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 5 maiden
/*
2
 * Poly2Tri Copyright (c) 2009-2010, Poly2Tri Contributors
3
 * http://code.google.com/p/poly2tri/
4
 *
5
 * All rights reserved.
6
 *
7
 * Redistribution and use in source and binary forms, with or without modification,
8
 * are permitted provided that the following conditions are met:
9
 *
10
 * * Redistributions of source code must retain the above copyright notice,
11
 *   this list of conditions and the following disclaimer.
12
 * * Redistributions in binary form must reproduce the above copyright notice,
13
 *   this list of conditions and the following disclaimer in the documentation
14
 *   and/or other materials provided with the distribution.
15
 * * Neither the name of Poly2Tri nor the names of its contributors may be
16
 *   used to endorse or promote products derived from this software without specific
17
 *   prior written permission.
18
 *
19
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
23
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
24
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
25
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
26
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
27
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
28
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
29
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30
 */
31
 
32
#ifndef UTILS_H
33
#define UTILS_H
34
 
35
// Otherwise #defines like M_PI are undeclared under Visual Studio
36
#define _USE_MATH_DEFINES
37
 
38
#include <exception>
39
#include <math.h>
40
 
41
namespace p2t {
42
 
43
const double PI_3div4 = 3 * M_PI / 4;
44
const double PI_div2 = 1.57079632679489661923;
45
const double EPSILON = 1e-12;
46
 
47
enum Orientation { CW, CCW, COLLINEAR };
48
 
49
/**
50
 * Forumla to calculate signed area<br>
51
 * Positive if CCW<br>
52
 * Negative if CW<br>
53
 * 0 if collinear<br>
54
 * <pre>
55
 * A[P1,P2,P3]  =  (x1*y2 - y1*x2) + (x2*y3 - y2*x3) + (x3*y1 - y3*x1)
56
 *              =  (x1-x3)*(y2-y3) - (y1-y3)*(x2-x3)
57
 * </pre>
58
 */
59
Orientation Orient2d(Point& pa, Point& pb, Point& pc)
60
{
61
  double detleft = (pa.x - pc.x) * (pb.y - pc.y);
62
  double detright = (pa.y - pc.y) * (pb.x - pc.x);
63
  double val = detleft - detright;
64
  if (val > -EPSILON && val < EPSILON) {
65
    return COLLINEAR;
66
  } else if (val > 0) {
67
    return CCW;
68
  }
69
  return CW;
70
}
71
 
72
/*
73
bool InScanArea(Point& pa, Point& pb, Point& pc, Point& pd)
74
{
75
  double pdx = pd.x;
76
  double pdy = pd.y;
77
  double adx = pa.x - pdx;
78
  double ady = pa.y - pdy;
79
  double bdx = pb.x - pdx;
80
  double bdy = pb.y - pdy;
81
 
82
  double adxbdy = adx * bdy;
83
  double bdxady = bdx * ady;
84
  double oabd = adxbdy - bdxady;
85
 
86
  if (oabd <= EPSILON) {
87
    return false;
88
  }
89
 
90
  double cdx = pc.x - pdx;
91
  double cdy = pc.y - pdy;
92
 
93
  double cdxady = cdx * ady;
94
  double adxcdy = adx * cdy;
95
  double ocad = cdxady - adxcdy;
96
 
97
  if (ocad <= EPSILON) {
98
    return false;
99
  }
100
 
101
  return true;
102
}
103
 
104
*/
105
 
106
bool InScanArea(Point& pa, Point& pb, Point& pc, Point& pd)
107
{
108
  double oadb = (pa.x - pb.x)*(pd.y - pb.y) - (pd.x - pb.x)*(pa.y - pb.y);
109
  if (oadb >= -EPSILON) {
110
    return false;
111
  }
112
 
113
  double oadc = (pa.x - pc.x)*(pd.y - pc.y) - (pd.x - pc.x)*(pa.y - pc.y);
114
  if (oadc <= EPSILON) {
115
    return false;
116
  }
117
  return true;
118
}
119
 
120
}
121
 
122
#endif
123
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.