1*3ac0a46fSAndroid Build Coastguard Worker
2*3ac0a46fSAndroid Build Coastguard Worker //----------------------------------------------------------------------------
3*3ac0a46fSAndroid Build Coastguard Worker // Anti-Grain Geometry - Version 2.3
4*3ac0a46fSAndroid Build Coastguard Worker // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
5*3ac0a46fSAndroid Build Coastguard Worker //
6*3ac0a46fSAndroid Build Coastguard Worker // Permission to copy, use, modify, sell and distribute this software
7*3ac0a46fSAndroid Build Coastguard Worker // is granted provided this copyright notice appears in all copies.
8*3ac0a46fSAndroid Build Coastguard Worker // This software is provided "as is" without express or implied
9*3ac0a46fSAndroid Build Coastguard Worker // warranty, and with no claim as to its suitability for any purpose.
10*3ac0a46fSAndroid Build Coastguard Worker //
11*3ac0a46fSAndroid Build Coastguard Worker //----------------------------------------------------------------------------
12*3ac0a46fSAndroid Build Coastguard Worker // Contact: [email protected]
13*3ac0a46fSAndroid Build Coastguard Worker // [email protected]
14*3ac0a46fSAndroid Build Coastguard Worker // http://www.antigrain.com
15*3ac0a46fSAndroid Build Coastguard Worker //----------------------------------------------------------------------------
16*3ac0a46fSAndroid Build Coastguard Worker // Bessel function (besj) was adapted for use in AGG library by Andy Wilk
17*3ac0a46fSAndroid Build Coastguard Worker // Contact: [email protected]
18*3ac0a46fSAndroid Build Coastguard Worker //----------------------------------------------------------------------------
19*3ac0a46fSAndroid Build Coastguard Worker #ifndef AGG_MATH_INCLUDED
20*3ac0a46fSAndroid Build Coastguard Worker #define AGG_MATH_INCLUDED
21*3ac0a46fSAndroid Build Coastguard Worker #include "agg_basics.h"
22*3ac0a46fSAndroid Build Coastguard Worker namespace pdfium
23*3ac0a46fSAndroid Build Coastguard Worker {
24*3ac0a46fSAndroid Build Coastguard Worker namespace agg
25*3ac0a46fSAndroid Build Coastguard Worker {
26*3ac0a46fSAndroid Build Coastguard Worker const float intersection_epsilon = 1.0e-30f;
calc_point_location(float x1,float y1,float x2,float y2,float x,float y)27*3ac0a46fSAndroid Build Coastguard Worker AGG_INLINE float calc_point_location(float x1, float y1,
28*3ac0a46fSAndroid Build Coastguard Worker float x2, float y2,
29*3ac0a46fSAndroid Build Coastguard Worker float x, float y)
30*3ac0a46fSAndroid Build Coastguard Worker {
31*3ac0a46fSAndroid Build Coastguard Worker return ((x - x2) * (y2 - y1)) - ((y - y2) * (x2 - x1));
32*3ac0a46fSAndroid Build Coastguard Worker }
calc_distance(float x1,float y1,float x2,float y2)33*3ac0a46fSAndroid Build Coastguard Worker AGG_INLINE float calc_distance(float x1, float y1, float x2, float y2)
34*3ac0a46fSAndroid Build Coastguard Worker {
35*3ac0a46fSAndroid Build Coastguard Worker float dx = x2 - x1;
36*3ac0a46fSAndroid Build Coastguard Worker float dy = y2 - y1;
37*3ac0a46fSAndroid Build Coastguard Worker return FXSYS_sqrt2(dx, dy);
38*3ac0a46fSAndroid Build Coastguard Worker }
calc_line_point_distance(float x1,float y1,float x2,float y2,float x,float y)39*3ac0a46fSAndroid Build Coastguard Worker AGG_INLINE float calc_line_point_distance(float x1, float y1,
40*3ac0a46fSAndroid Build Coastguard Worker float x2, float y2,
41*3ac0a46fSAndroid Build Coastguard Worker float x, float y)
42*3ac0a46fSAndroid Build Coastguard Worker {
43*3ac0a46fSAndroid Build Coastguard Worker float dx = x2 - x1;
44*3ac0a46fSAndroid Build Coastguard Worker float dy = y2 - y1;
45*3ac0a46fSAndroid Build Coastguard Worker float d = FXSYS_sqrt2(dx, dy);
46*3ac0a46fSAndroid Build Coastguard Worker if(d < intersection_epsilon) {
47*3ac0a46fSAndroid Build Coastguard Worker return calc_distance(x1, y1, x, y);
48*3ac0a46fSAndroid Build Coastguard Worker }
49*3ac0a46fSAndroid Build Coastguard Worker return ((x - x2) * dy / d) - ((y - y2) * dx / d);
50*3ac0a46fSAndroid Build Coastguard Worker }
calc_intersection(float ax,float ay,float bx,float by,float cx,float cy,float dx,float dy,float * x,float * y)51*3ac0a46fSAndroid Build Coastguard Worker AGG_INLINE bool calc_intersection(float ax, float ay, float bx, float by,
52*3ac0a46fSAndroid Build Coastguard Worker float cx, float cy, float dx, float dy,
53*3ac0a46fSAndroid Build Coastguard Worker float* x, float* y)
54*3ac0a46fSAndroid Build Coastguard Worker {
55*3ac0a46fSAndroid Build Coastguard Worker float num = ((ay - cy) * (dx - cx)) - ((ax - cx) * (dy - cy));
56*3ac0a46fSAndroid Build Coastguard Worker float den = ((bx - ax) * (dy - cy)) - ((by - ay) * (dx - cx));
57*3ac0a46fSAndroid Build Coastguard Worker if (fabs(den) < intersection_epsilon) {
58*3ac0a46fSAndroid Build Coastguard Worker return false;
59*3ac0a46fSAndroid Build Coastguard Worker }
60*3ac0a46fSAndroid Build Coastguard Worker *x = ax + ((bx - ax) * num / den);
61*3ac0a46fSAndroid Build Coastguard Worker *y = ay + ((by - ay) * num / den);
62*3ac0a46fSAndroid Build Coastguard Worker return true;
63*3ac0a46fSAndroid Build Coastguard Worker }
64*3ac0a46fSAndroid Build Coastguard Worker }
65*3ac0a46fSAndroid Build Coastguard Worker } // namespace pdfium
66*3ac0a46fSAndroid Build Coastguard Worker #endif
67