Index: src/Common/NetTopologySuite/Algorithm/NonRobustLineIntersector.cs
===================================================================
diff -u -r8f6ae890fed8e8eae3a32f9c0498a10f82e0ddf9 -r5fc71a385897af92ccb092f2f969b5709afab85a
--- src/Common/NetTopologySuite/Algorithm/NonRobustLineIntersector.cs (.../NonRobustLineIntersector.cs) (revision 8f6ae890fed8e8eae3a32f9c0498a10f82e0ddf9)
+++ src/Common/NetTopologySuite/Algorithm/NonRobustLineIntersector.cs (.../NonRobustLineIntersector.cs) (revision 5fc71a385897af92ccb092f2f969b5709afab85a)
@@ -11,31 +11,33 @@
///
///
///
+ public NonRobustLineIntersector() {}
+
+ ///
+ ///
+ ///
///
///
///
/// true if both numbers are positive or if both numbers are negative,
/// false if both numbers are zero.
///
- public static bool IsSameSignAndNonZero(double a, double b)
+ public static bool IsSameSignAndNonZero(double a, double b)
{
- if (a == 0 || b == 0)
- return false;
+ if (a == 0 || b == 0)
+ {
+ return false;
+ }
return (a < 0 && b < 0) || (a > 0 && b > 0);
}
-
- ///
- ///
- ///
- public NonRobustLineIntersector() { }
///
///
///
///
///
///
- public override void ComputeIntersection(ICoordinate p, ICoordinate p1, ICoordinate p2)
+ public override void ComputeIntersection(ICoordinate p, ICoordinate p1, ICoordinate p2)
{
double a1;
double b1;
@@ -57,15 +59,15 @@
*/
a1 = p2.Y - p1.Y;
b1 = p1.X - p2.X;
- c1 = p2.X * p1.Y - p1.X * p2.Y;
+ c1 = p2.X*p1.Y - p1.X*p2.Y;
/*
* Compute r3 and r4.
*/
- r = a1 * p.X + b1 * p.Y + c1;
+ r = a1*p.X + b1*p.Y + c1;
// if r != 0 the point does not lie on the line
- if (r != 0)
+ if (r != 0)
{
result = DontIntersect;
return;
@@ -81,9 +83,11 @@
}
isProper = true;
- if (p.Equals(p1) || p.Equals(p2))
+ if (p.Equals(p1) || p.Equals(p2))
+ {
isProper = false;
-
+ }
+
result = DoIntersect;
}
@@ -95,14 +99,14 @@
///
///
///
- public override int ComputeIntersect(ICoordinate p1, ICoordinate p2, ICoordinate p3, ICoordinate p4)
+ public override int ComputeIntersect(ICoordinate p1, ICoordinate p2, ICoordinate p3, ICoordinate p4)
{
double a1;
double b1;
- double c1;
+ double c1;
- double a2;
- double b2;
+ double a2;
+ double b2;
double c2;
/*
* Coefficients of line eqns.
@@ -115,7 +119,7 @@
/*
* 'Sign' values
*/
-
+
isProper = false;
/*
@@ -124,65 +128,75 @@
*/
a1 = p2.Y - p1.Y;
b1 = p1.X - p2.X;
- c1 = p2.X * p1.Y - p1.X * p2.Y;
+ c1 = p2.X*p1.Y - p1.X*p2.Y;
/*
* Compute r3 and r4.
*/
- r3 = a1 * p3.X + b1 * p3.Y + c1;
- r4 = a1 * p4.X + b1 * p4.Y + c1;
+ r3 = a1*p3.X + b1*p3.Y + c1;
+ r4 = a1*p4.X + b1*p4.Y + c1;
/*
* Check signs of r3 and r4. If both point 3 and point 4 lie on
* same side of line 1, the line segments do not intersect.
*/
- if (r3 != 0 && r4 != 0 && IsSameSignAndNonZero(r3, r4))
- return DontIntersect;
+ if (r3 != 0 && r4 != 0 && IsSameSignAndNonZero(r3, r4))
+ {
+ return DontIntersect;
+ }
/*
* Compute a2, b2, c2
*/
a2 = p4.Y - p3.Y;
b2 = p3.X - p4.X;
- c2 = p4.X * p3.Y - p3.X * p4.Y;
+ c2 = p4.X*p3.Y - p3.X*p4.Y;
/*
* Compute r1 and r2
*/
- r1 = a2 * p1.X + b2 * p1.Y + c2;
- r2 = a2 * p2.X + b2 * p2.Y + c2;
+ r1 = a2*p1.X + b2*p1.Y + c2;
+ r2 = a2*p2.X + b2*p2.Y + c2;
/*
* Check signs of r1 and r2. If both point 1 and point 2 lie
* on same side of second line segment, the line segments do
* not intersect.
*/
- if (r1 != 0 && r2 != 0 && IsSameSignAndNonZero(r1, r2))
- return DontIntersect;
+ if (r1 != 0 && r2 != 0 && IsSameSignAndNonZero(r1, r2))
+ {
+ return DontIntersect;
+ }
/*
* Line segments intersect: compute intersection point.
*/
- double denom = a1 * b2 - a2 * b1;
- if (denom == 0)
+ double denom = a1*b2 - a2*b1;
+ if (denom == 0)
+ {
return ComputeCollinearIntersection(p1, p2, p3, p4);
-
- double numX = b1 * c2 - b2 * c1;
- pa.X = numX / denom;
+ }
- double numY = a2 * c1 - a1 * c2;
- pa.Y = numY / denom;
+ double numX = b1*c2 - b2*c1;
+ pa.X = numX/denom;
+ double numY = a2*c1 - a1*c2;
+ pa.Y = numY/denom;
+
// check if this is a proper intersection BEFORE truncating values,
// to avoid spurious equality comparisons with endpoints
isProper = true;
- if (pa.Equals(p1) || pa.Equals(p2) || pa.Equals(p3) || pa.Equals(p4))
- isProper = false;
+ if (pa.Equals(p1) || pa.Equals(p2) || pa.Equals(p3) || pa.Equals(p4))
+ {
+ isProper = false;
+ }
// truncate computed point to precision grid
- if (precisionModel != null)
+ if (precisionModel != null)
+ {
precisionModel.MakePrecise(pa);
-
+ }
+
return DoIntersect;
}
@@ -194,7 +208,7 @@
///
///
///
- private int ComputeCollinearIntersection(ICoordinate p1, ICoordinate p2, ICoordinate p3, ICoordinate p4)
+ private int ComputeCollinearIntersection(ICoordinate p1, ICoordinate p2, ICoordinate p3, ICoordinate p4)
{
double r1;
double r2;
@@ -203,24 +217,24 @@
ICoordinate q3;
ICoordinate q4;
-
+
double t3;
double t4;
-
+
r1 = 0;
r2 = 1;
r3 = RParameter(p1, p2, p3);
r4 = RParameter(p1, p2, p4);
// make sure p3-p4 is in same direction as p1-p2
- if (r3 < r4)
+ if (r3 < r4)
{
q3 = p3;
t3 = r3;
q4 = p4;
t4 = r4;
}
- else
+ else
{
q3 = p4;
t3 = r4;
@@ -229,11 +243,13 @@
}
// check for no intersection
- if (t3 > r2 || t4 < r1)
+ if (t3 > r2 || t4 < r1)
+ {
return DontIntersect;
-
+ }
+
// check for single point intersection
- if (q4 == p1)
+ if (q4 == p1)
{
pa.CoordinateValue = p1;
return DoIntersect;
@@ -246,11 +262,17 @@
// intersection MUST be a segment - compute endpoints
pa.CoordinateValue = p1;
- if (t3 > r1) pa.CoordinateValue = q3;
+ if (t3 > r1)
+ {
+ pa.CoordinateValue = q3;
+ }
pb.CoordinateValue = p2;
- if (t4 < r2) pb.CoordinateValue = q4;
-
+ if (t4 < r2)
+ {
+ pb.CoordinateValue = q4;
+ }
+
return Collinear;
}
@@ -264,15 +286,20 @@
{
// compute maximum delta, for numerical stability
// also handle case of p1-p2 being vertical or horizontal
- double r;
+ double r;
double dx = Math.Abs(p2.X - p1.X);
double dy = Math.Abs(p2.Y - p1.Y);
- if (dx > dy)
- r = (p.X - p1.X) / (p2.X - p1.X);
- else r = (p.Y - p1.Y) / (p2.Y - p1.Y);
+ if (dx > dy)
+ {
+ r = (p.X - p1.X)/(p2.X - p1.X);
+ }
+ else
+ {
+ r = (p.Y - p1.Y)/(p2.Y - p1.Y);
+ }
return r;
}
}
-}
+}
\ No newline at end of file