Code

* src/sp-conn-end-pair.cpp, src/connector-context.cpp,
[inkscape.git] / src / libavoid / geometry.h
index 07bfd5d331f16151d74945e04b3e4d9e78aba534..1422be0502213343abfe365bcf57249987911ba6 100644 (file)
@@ -9,6 +9,10 @@
  * and/or described in "Computational Geometry in C" (Second Edition),
  * Copyright (C) 1998  Joseph O'Rourke <orourke@cs.smith.edu>
  * --------------------------------------------------------------------
+ * The segmentIntersectPoint function is based on code published and
+ * described in Franklin Antonio, Faster Line Segment Intersection,
+ * Graphics Gems III, p. 199-202, code: p. 500-501.
+ * --------------------------------------------------------------------
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -36,11 +40,16 @@ namespace Avoid {
 
 
 extern double dist(const Point& a, const Point& b);
+extern double totalLength(const Polygn& poly);
+extern double angle(const Point& a, const Point& b, const Point& c);
 extern bool segmentIntersect(const Point& a, const Point& b,
         const Point& c, const Point& d);
 extern bool inPoly(const Polygn& poly, const Point& q);
+extern bool inPolyGen(const Polygn& poly, const Point& q);
 extern bool inValidRegion(bool IgnoreRegions, const Point& a0,
         const Point& a1, const Point& a2, const Point& b);
+extern int cornerSide(const Point &c1, const Point &c2, const Point &c3,
+        const Point& p);
 
 
 // Direction from vector.
@@ -68,6 +77,30 @@ static inline int vecDir(const Point& a, const Point& b, const Point& c)
     return 0;
 }
 
+// Finds the projection point of (a,b) onto (a,c)
+static inline Point projection(const Point& a, const Point& b, const Point& c)
+{
+    double ux = c.x - a.x,
+           uy = c.y - a.y,
+           vx = b.x - a.x,
+           vy = b.y - a.y,
+           scalarProj = ux * vx + uy * vy;
+    scalarProj       /= ux * ux + uy * uy;
+    Point p;
+    p.x = scalarProj * ux + a.x;
+    p.y = scalarProj * uy + a.y;
+    return p;
+}
+
+// Line Segment Intersection
+// Original code by Franklin Antonio 
+// 
+static const int DONT_INTERSECT = 0;
+static const int DO_INTERSECT = 1;
+static const int PARALLEL = 3;
+extern int segmentIntersectPoint(const Point& a1, const Point& a2,
+        const Point& b1, const Point& b2, double *x, double *y);
+
 
 }