29391115a63d4d8137ade1a32d3915dde4f1c211
[IRC.git] / Robust / src / Benchmarks / oooJava / DelaunayRefinement / Tuple.java
1 public class Tuple {
2
3   public Tuple(double a, double b, double c) {
4     coords = new double[3];
5     coords[0] = a;
6     coords[1] = b;
7     coords[2] = c;
8     int tmphashvalue = 17;
9     long tmp = Double.doubleToLongBits(coords[0]);
10     tmphashvalue = 37 * tmphashvalue + (int) (tmp ^ tmp >>> 32);
11     tmp = Double.doubleToLongBits(coords[1]);
12     tmphashvalue = 37 * tmphashvalue + (int) (tmp ^ tmp >>> 32);
13     tmp = Double.doubleToLongBits(coords[2]);
14     tmphashvalue = 37 * tmphashvalue + (int) (tmp ^ tmp >>> 32);
15     hashvalue = tmphashvalue;
16   }
17
18   public Tuple(Tuple rhs) {
19     coords = new double[3];
20     coords[0] = rhs.coords[0];
21     coords[1] = rhs.coords[1];
22     coords[2] = rhs.coords[2];
23     hashvalue = rhs.hashvalue;
24   }
25
26   public Tuple() {
27     coords = new double[3];
28     hashvalue = 1;
29   }
30
31   public double[] getCoords() {
32     return coords;
33   }
34
35   public boolean equals(Object obj) {
36     if (!(obj instanceof Tuple))
37       return false;
38     Tuple t = (Tuple) obj;
39     double rhs_coords[] = t.getCoords();
40     return coords[0] == rhs_coords[0] && coords[1] == rhs_coords[1] && coords[2] == rhs_coords[2];
41   }
42
43   public int hashCode() {
44     return hashvalue;
45   }
46
47   public boolean notEquals(Tuple rhs) {
48     return !equals(rhs);
49   }
50
51   public boolean lessThan(Tuple rhs) {
52     double rhs_coords[] = rhs.getCoords();
53     if (coords[0] < rhs_coords[0])
54       return true;
55     if (coords[0] > rhs_coords[0])
56       return false;
57     if (coords[1] < rhs_coords[1])
58       return true;
59     if (coords[1] > rhs_coords[1])
60       return false;
61     return coords[2] < rhs_coords[2];
62   }
63
64   public boolean greaterThan(Tuple rhs) {
65     double rhs_coords[] = rhs.getCoords();
66     if (coords[0] > rhs_coords[0])
67       return true;
68     if (coords[0] < rhs_coords[0])
69       return false;
70     if (coords[1] > rhs_coords[1])
71       return true;
72     if (coords[1] < rhs_coords[1])
73       return false;
74     return coords[2] > rhs_coords[2];
75   }
76
77   public Tuple add(Tuple rhs) {
78     double rhs_coords[] = rhs.getCoords();
79     return new Tuple(coords[0] + rhs_coords[0], coords[1] + rhs_coords[1], coords[2]
80         + rhs_coords[2]);
81   }
82
83   public Tuple subtract(Tuple rhs) {
84     double rhs_coords[] = rhs.getCoords();
85     return new Tuple(coords[0] - rhs_coords[0], coords[1] - rhs_coords[1], coords[2]
86         - rhs_coords[2]);
87   }
88
89   public double dotp(Tuple rhs) {
90     double rhs_coords[] = rhs.getCoords();
91     return coords[0] * rhs_coords[0] + coords[1] * rhs_coords[1] + coords[2] * rhs_coords[2];
92   }
93
94   public Tuple scale(double s) {
95     return new Tuple(s * coords[0], s * coords[1], s * coords[2]);
96   }
97
98   public int cmp(Tuple x) {
99     if (equals(x))
100       return 0;
101     return !greaterThan(x) ? -1 : 1;
102   }
103
104   public double distance(Tuple rhs) {
105     return Math.sqrt(distance_squared(rhs));
106   }
107
108   public double distance_squared(Tuple rhs) {
109     double rhs_coords[] = rhs.getCoords();
110     double x = coords[0] - rhs_coords[0];
111     double y = coords[1] - rhs_coords[1];
112     double z = coords[2] - rhs_coords[2];
113     return x * x + y * y + z * z;
114   }
115
116   public double angle(Tuple a, Tuple c) {
117     Tuple va = a.subtract(this);
118     Tuple vc = c.subtract(this);
119     double d = va.dotp(vc) / Math.sqrt(distance_squared(a) * distance_squared(c));
120     return 57.295779513082323D * Math.acos(d);
121   }
122
123   public String toString() {
124     return new String("(" + coords[0] + ", " + coords[1] + ", " + coords[2] + ")");
125   }
126
127   public static int cmp(Tuple a, Tuple b) {
128     return a.cmp(b);
129   }
130
131   public static double distance(Tuple a, Tuple b) {
132     return a.distance(b);
133   }
134
135   public static double angle(Tuple a, Tuple b, Tuple c) {
136     return b.angle(a, c);
137   }
138
139   public double get(int i) {
140     return coords[i];
141   }
142
143   private final double coords[];
144   private final int hashvalue;
145 }