annotate flys-artifacts/src/main/java/de/intevation/flys/artifacts/geom/VectorUtils.java @ 3227:ed07dd55f487

Fixed various bugs (package declarations, moved classes to correct places). flys-artifacts/trunk@4854 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Ingo Weinzierl <ingo.weinzierl@intevation.de>
date Tue, 03 Jul 2012 08:46:14 +0000
parents 5642a83420f2
children
rev   line source
3227
ed07dd55f487 Fixed various bugs (package declarations, moved classes to correct places).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3076
diff changeset
1 package de.intevation.flys.artifacts.geom;
1797
5eec623db50a Polygon2D: moved 2D vector operation to separate class.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
2
5eec623db50a Polygon2D: moved 2D vector operation to separate class.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
3 import java.awt.geom.Point2D;
5eec623db50a Polygon2D: moved 2D vector operation to separate class.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
4
5eec623db50a Polygon2D: moved 2D vector operation to separate class.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
5 public final class VectorUtils
5eec623db50a Polygon2D: moved 2D vector operation to separate class.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
6 {
5eec623db50a Polygon2D: moved 2D vector operation to separate class.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
7 public static final double EPSILON = 1e-4;
5eec623db50a Polygon2D: moved 2D vector operation to separate class.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
8
5eec623db50a Polygon2D: moved 2D vector operation to separate class.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
9 private VectorUtils() {
5eec623db50a Polygon2D: moved 2D vector operation to separate class.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
10 }
5eec623db50a Polygon2D: moved 2D vector operation to separate class.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
11
1799
281b9430c720 Polygon2D: More code to build polygons from curve.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1797
diff changeset
12 public static final double X(Point2D p) {
1797
5eec623db50a Polygon2D: moved 2D vector operation to separate class.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
13 return p.getX();
5eec623db50a Polygon2D: moved 2D vector operation to separate class.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
14 }
5eec623db50a Polygon2D: moved 2D vector operation to separate class.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
15
1799
281b9430c720 Polygon2D: More code to build polygons from curve.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1797
diff changeset
16 public static final double Y(Point2D p) {
1797
5eec623db50a Polygon2D: moved 2D vector operation to separate class.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
17 return p.getY();
5eec623db50a Polygon2D: moved 2D vector operation to separate class.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
18 }
5eec623db50a Polygon2D: moved 2D vector operation to separate class.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
19
5eec623db50a Polygon2D: moved 2D vector operation to separate class.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
20 public static final Point2D sub(Point2D a, Point2D b) {
5eec623db50a Polygon2D: moved 2D vector operation to separate class.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
21 return new Point2D.Double(X(a)-X(b), Y(a)-Y(b));
5eec623db50a Polygon2D: moved 2D vector operation to separate class.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
22 }
5eec623db50a Polygon2D: moved 2D vector operation to separate class.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
23
5eec623db50a Polygon2D: moved 2D vector operation to separate class.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
24 public static final double dot(Point2D a, Point2D b) {
5eec623db50a Polygon2D: moved 2D vector operation to separate class.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
25 return X(a)*X(b) + Y(a)*Y(b);
5eec623db50a Polygon2D: moved 2D vector operation to separate class.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
26 }
5eec623db50a Polygon2D: moved 2D vector operation to separate class.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
27
5eec623db50a Polygon2D: moved 2D vector operation to separate class.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
28 public static final Point2D add(Point2D a, Point2D b) {
5eec623db50a Polygon2D: moved 2D vector operation to separate class.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
29 return new Point2D.Double(X(a)+X(b), Y(a)+Y(b));
5eec623db50a Polygon2D: moved 2D vector operation to separate class.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
30 }
5eec623db50a Polygon2D: moved 2D vector operation to separate class.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
31
5eec623db50a Polygon2D: moved 2D vector operation to separate class.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
32 public static final Point2D negate(Point2D a) {
5eec623db50a Polygon2D: moved 2D vector operation to separate class.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
33 return new Point2D.Double(-X(a), -Y(a));
5eec623db50a Polygon2D: moved 2D vector operation to separate class.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
34 }
5eec623db50a Polygon2D: moved 2D vector operation to separate class.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
35
5eec623db50a Polygon2D: moved 2D vector operation to separate class.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
36 public static final Point2D ortho(Point2D a) {
5eec623db50a Polygon2D: moved 2D vector operation to separate class.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
37 return new Point2D.Double(-Y(a), X(a));
5eec623db50a Polygon2D: moved 2D vector operation to separate class.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
38 }
5eec623db50a Polygon2D: moved 2D vector operation to separate class.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
39
5eec623db50a Polygon2D: moved 2D vector operation to separate class.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
40 public static final Point2D scale(Point2D a, double s) {
5eec623db50a Polygon2D: moved 2D vector operation to separate class.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
41 return new Point2D.Double(s*X(a), s*Y(a));
5eec623db50a Polygon2D: moved 2D vector operation to separate class.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
42 }
5eec623db50a Polygon2D: moved 2D vector operation to separate class.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
43
5eec623db50a Polygon2D: moved 2D vector operation to separate class.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
44 public static final double lengthSq(Point2D a) {
5eec623db50a Polygon2D: moved 2D vector operation to separate class.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
45 double x = X(a);
5eec623db50a Polygon2D: moved 2D vector operation to separate class.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
46 double y = Y(a);
5eec623db50a Polygon2D: moved 2D vector operation to separate class.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
47 return x*x + y*y;
5eec623db50a Polygon2D: moved 2D vector operation to separate class.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
48 }
5eec623db50a Polygon2D: moved 2D vector operation to separate class.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
49
5eec623db50a Polygon2D: moved 2D vector operation to separate class.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
50 public static final double length(Point2D a) {
5eec623db50a Polygon2D: moved 2D vector operation to separate class.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
51 return Math.sqrt(lengthSq(a));
5eec623db50a Polygon2D: moved 2D vector operation to separate class.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
52 }
5eec623db50a Polygon2D: moved 2D vector operation to separate class.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
53
5eec623db50a Polygon2D: moved 2D vector operation to separate class.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
54 public static final Point2D normalize(Point2D a) {
5eec623db50a Polygon2D: moved 2D vector operation to separate class.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
55 double length = length(a);
5eec623db50a Polygon2D: moved 2D vector operation to separate class.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
56 return length != 0d
3076
5642a83420f2 FLYS artifacts: Removed trailing whitespace.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1801
diff changeset
57 ? scale(a, 1d/length)
1797
5eec623db50a Polygon2D: moved 2D vector operation to separate class.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
58 : new Point2D.Double(X(a), Y(a));
5eec623db50a Polygon2D: moved 2D vector operation to separate class.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
59 }
5eec623db50a Polygon2D: moved 2D vector operation to separate class.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
60
5eec623db50a Polygon2D: moved 2D vector operation to separate class.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
61 public static final double L1(Point2D a, Point2D b) {
5eec623db50a Polygon2D: moved 2D vector operation to separate class.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
62 return Math.abs(X(a)-X(b)) + Math.abs(Y(a)-Y(b));
5eec623db50a Polygon2D: moved 2D vector operation to separate class.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
63 }
5eec623db50a Polygon2D: moved 2D vector operation to separate class.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
64
5eec623db50a Polygon2D: moved 2D vector operation to separate class.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
65 public static final boolean collinear(Point2D a, Point2D b, Point2D c) {
5eec623db50a Polygon2D: moved 2D vector operation to separate class.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
66 double x1 = X(a);
5eec623db50a Polygon2D: moved 2D vector operation to separate class.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
67 double y1 = Y(a);
5eec623db50a Polygon2D: moved 2D vector operation to separate class.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
68 double x2 = X(b);
5eec623db50a Polygon2D: moved 2D vector operation to separate class.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
69 double y2 = Y(b);
5eec623db50a Polygon2D: moved 2D vector operation to separate class.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
70 double x3 = X(c);
5eec623db50a Polygon2D: moved 2D vector operation to separate class.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
71 double y3 = Y(c);
5eec623db50a Polygon2D: moved 2D vector operation to separate class.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
72
5eec623db50a Polygon2D: moved 2D vector operation to separate class.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
73 return Math.abs((x2-x1)*(y3-y1)-(y2-y1)*(x3-x1)) < EPSILON;
5eec623db50a Polygon2D: moved 2D vector operation to separate class.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
74 }
5eec623db50a Polygon2D: moved 2D vector operation to separate class.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
75
5eec623db50a Polygon2D: moved 2D vector operation to separate class.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
76 public static boolean epsilonEquals(Point2D a, Point2D b) {
3076
5642a83420f2 FLYS artifacts: Removed trailing whitespace.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1801
diff changeset
77 return Math.abs(X(a)-X(b)) < EPSILON
1797
5eec623db50a Polygon2D: moved 2D vector operation to separate class.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
78 && Math.abs(Y(a)-Y(b)) < EPSILON;
5eec623db50a Polygon2D: moved 2D vector operation to separate class.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
79 }
5eec623db50a Polygon2D: moved 2D vector operation to separate class.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
80
1801
6f83d9d434f2 Polygon2D: Generate polygons for trivial cases.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1799
diff changeset
81 public static final Point2D intersection(
6f83d9d434f2 Polygon2D: Generate polygons for trivial cases.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1799
diff changeset
82 Point2D p1, Point2D p2,
6f83d9d434f2 Polygon2D: Generate polygons for trivial cases.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1799
diff changeset
83 Point2D p3, Point2D p4
6f83d9d434f2 Polygon2D: Generate polygons for trivial cases.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1799
diff changeset
84 ) {
6f83d9d434f2 Polygon2D: Generate polygons for trivial cases.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1799
diff changeset
85 double x1 = X(p1);
6f83d9d434f2 Polygon2D: Generate polygons for trivial cases.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1799
diff changeset
86 double y1 = Y(p1);
6f83d9d434f2 Polygon2D: Generate polygons for trivial cases.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1799
diff changeset
87 double x2 = X(p2);
6f83d9d434f2 Polygon2D: Generate polygons for trivial cases.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1799
diff changeset
88 double y2 = Y(p2);
6f83d9d434f2 Polygon2D: Generate polygons for trivial cases.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1799
diff changeset
89 double x3 = X(p3);
6f83d9d434f2 Polygon2D: Generate polygons for trivial cases.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1799
diff changeset
90 double y3 = Y(p3);
6f83d9d434f2 Polygon2D: Generate polygons for trivial cases.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1799
diff changeset
91 double x4 = X(p4);
6f83d9d434f2 Polygon2D: Generate polygons for trivial cases.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1799
diff changeset
92 double y4 = Y(p4);
6f83d9d434f2 Polygon2D: Generate polygons for trivial cases.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1799
diff changeset
93
6f83d9d434f2 Polygon2D: Generate polygons for trivial cases.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1799
diff changeset
94 // Compute a1, b1, c1, where line joining points 1 and 2
6f83d9d434f2 Polygon2D: Generate polygons for trivial cases.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1799
diff changeset
95 // is "a1 x + b1 y + c1 = 0".
6f83d9d434f2 Polygon2D: Generate polygons for trivial cases.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1799
diff changeset
96 double a1 = y2 - y1;
6f83d9d434f2 Polygon2D: Generate polygons for trivial cases.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1799
diff changeset
97 double b1 = x1 - x2;
6f83d9d434f2 Polygon2D: Generate polygons for trivial cases.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1799
diff changeset
98 double c1 = x2*y1 - x1*y2;
6f83d9d434f2 Polygon2D: Generate polygons for trivial cases.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1799
diff changeset
99
6f83d9d434f2 Polygon2D: Generate polygons for trivial cases.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1799
diff changeset
100 // Compute r3 and r4.
6f83d9d434f2 Polygon2D: Generate polygons for trivial cases.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1799
diff changeset
101 double r3 = a1*x3 + b1*y3 + c1;
6f83d9d434f2 Polygon2D: Generate polygons for trivial cases.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1799
diff changeset
102 double r4 = a1*x4 + b1*y4 + c1;
6f83d9d434f2 Polygon2D: Generate polygons for trivial cases.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1799
diff changeset
103
6f83d9d434f2 Polygon2D: Generate polygons for trivial cases.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1799
diff changeset
104 if (r3 != 0d && r4 != 0d && r3*r4 >= 0) {
6f83d9d434f2 Polygon2D: Generate polygons for trivial cases.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1799
diff changeset
105 return null;
6f83d9d434f2 Polygon2D: Generate polygons for trivial cases.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1799
diff changeset
106 }
6f83d9d434f2 Polygon2D: Generate polygons for trivial cases.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1799
diff changeset
107
6f83d9d434f2 Polygon2D: Generate polygons for trivial cases.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1799
diff changeset
108 // Compute a2, b2, c2
6f83d9d434f2 Polygon2D: Generate polygons for trivial cases.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1799
diff changeset
109 double a2 = y4 - y3;
6f83d9d434f2 Polygon2D: Generate polygons for trivial cases.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1799
diff changeset
110 double b2 = x3 - x4;
6f83d9d434f2 Polygon2D: Generate polygons for trivial cases.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1799
diff changeset
111 double c2 = (x4 * y3) - (x3 * y4);
6f83d9d434f2 Polygon2D: Generate polygons for trivial cases.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1799
diff changeset
112
6f83d9d434f2 Polygon2D: Generate polygons for trivial cases.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1799
diff changeset
113 // Compute r1 and r2
6f83d9d434f2 Polygon2D: Generate polygons for trivial cases.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1799
diff changeset
114 double r1 = a2*x1 + b2*y1 + c2;
6f83d9d434f2 Polygon2D: Generate polygons for trivial cases.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1799
diff changeset
115 double r2 = a2*x2 + b2*y2 + c2;
6f83d9d434f2 Polygon2D: Generate polygons for trivial cases.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1799
diff changeset
116
6f83d9d434f2 Polygon2D: Generate polygons for trivial cases.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1799
diff changeset
117 if (r1 != 0d && r2 != 0d && r1*r2 >= 0) {
6f83d9d434f2 Polygon2D: Generate polygons for trivial cases.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1799
diff changeset
118 return null;
6f83d9d434f2 Polygon2D: Generate polygons for trivial cases.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1799
diff changeset
119 }
6f83d9d434f2 Polygon2D: Generate polygons for trivial cases.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1799
diff changeset
120
6f83d9d434f2 Polygon2D: Generate polygons for trivial cases.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1799
diff changeset
121 // Line segments intersect: compute intersection point.
6f83d9d434f2 Polygon2D: Generate polygons for trivial cases.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1799
diff changeset
122 double denom = a1*b2 - a2*b1;
6f83d9d434f2 Polygon2D: Generate polygons for trivial cases.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1799
diff changeset
123
6f83d9d434f2 Polygon2D: Generate polygons for trivial cases.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1799
diff changeset
124 if (denom == 0d) { // collinear
6f83d9d434f2 Polygon2D: Generate polygons for trivial cases.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1799
diff changeset
125 return null;
6f83d9d434f2 Polygon2D: Generate polygons for trivial cases.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1799
diff changeset
126 }
6f83d9d434f2 Polygon2D: Generate polygons for trivial cases.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1799
diff changeset
127
6f83d9d434f2 Polygon2D: Generate polygons for trivial cases.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1799
diff changeset
128 double offset = Math.abs(denom)/2d;
6f83d9d434f2 Polygon2D: Generate polygons for trivial cases.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1799
diff changeset
129
6f83d9d434f2 Polygon2D: Generate polygons for trivial cases.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1799
diff changeset
130 // The denom/2 is to get rounding instead of truncating. It
6f83d9d434f2 Polygon2D: Generate polygons for trivial cases.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1799
diff changeset
131 // is added or subtracted to the numerator, depending upon the
6f83d9d434f2 Polygon2D: Generate polygons for trivial cases.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1799
diff changeset
132 // sign of the numerator.
6f83d9d434f2 Polygon2D: Generate polygons for trivial cases.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1799
diff changeset
133 double num = b1*c2 - b2*c1;
6f83d9d434f2 Polygon2D: Generate polygons for trivial cases.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1799
diff changeset
134
6f83d9d434f2 Polygon2D: Generate polygons for trivial cases.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1799
diff changeset
135 double x = num < 0d
6f83d9d434f2 Polygon2D: Generate polygons for trivial cases.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1799
diff changeset
136 ? (num - offset)/denom
6f83d9d434f2 Polygon2D: Generate polygons for trivial cases.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1799
diff changeset
137 : (num + offset)/denom;
6f83d9d434f2 Polygon2D: Generate polygons for trivial cases.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1799
diff changeset
138
6f83d9d434f2 Polygon2D: Generate polygons for trivial cases.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1799
diff changeset
139 num = a2*c1 - a1*c2;
6f83d9d434f2 Polygon2D: Generate polygons for trivial cases.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1799
diff changeset
140
6f83d9d434f2 Polygon2D: Generate polygons for trivial cases.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1799
diff changeset
141 double y = num < 0d
6f83d9d434f2 Polygon2D: Generate polygons for trivial cases.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1799
diff changeset
142 ? (num - offset)/denom
6f83d9d434f2 Polygon2D: Generate polygons for trivial cases.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1799
diff changeset
143 : (num + offset)/denom;
6f83d9d434f2 Polygon2D: Generate polygons for trivial cases.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1799
diff changeset
144
6f83d9d434f2 Polygon2D: Generate polygons for trivial cases.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1799
diff changeset
145 return new Point2D.Double(x, y);
6f83d9d434f2 Polygon2D: Generate polygons for trivial cases.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1799
diff changeset
146 }
6f83d9d434f2 Polygon2D: Generate polygons for trivial cases.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1799
diff changeset
147
1797
5eec623db50a Polygon2D: moved 2D vector operation to separate class.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
148 }
3076
5642a83420f2 FLYS artifacts: Removed trailing whitespace.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1801
diff changeset
149 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org