3 public Tuple(double a, double b, double c) {
4 coords = new double[3];
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;
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;
27 coords = new double[3];
31 public double[] getCoords() {
35 public boolean equals(Object obj) {
36 if (!(obj instanceof Tuple))
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];
43 public int hashCode() {
47 public boolean notEquals(Tuple rhs) {
51 public boolean lessThan(Tuple rhs) {
52 double rhs_coords[] = rhs.getCoords();
53 if (coords[0] < rhs_coords[0])
55 if (coords[0] > rhs_coords[0])
57 if (coords[1] < rhs_coords[1])
59 if (coords[1] > rhs_coords[1])
61 return coords[2] < rhs_coords[2];
64 public boolean greaterThan(Tuple rhs) {
65 double rhs_coords[] = rhs.getCoords();
66 if (coords[0] > rhs_coords[0])
68 if (coords[0] < rhs_coords[0])
70 if (coords[1] > rhs_coords[1])
72 if (coords[1] < rhs_coords[1])
74 return coords[2] > rhs_coords[2];
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]
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]
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];
94 public Tuple scale(double s) {
95 return new Tuple(s * coords[0], s * coords[1], s * coords[2]);
98 public int cmp(Tuple x) {
101 return !greaterThan(x) ? -1 : 1;
104 public double distance(Tuple rhs) {
105 return Math.sqrt(distance_squared(rhs));
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;
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);
123 public String toString() {
124 //return new String("(" + coords[0] + ", " + coords[1] + ", " + coords[2] + ")");
126 String x = ""+coords[0];
127 x = x.substring( 0, 4 );
129 String y = ""+coords[1];
130 y = y.substring( 0, 4 );
132 return new String("("+x+", "+y+")");
135 public static int cmp(Tuple a, Tuple b) {
139 public static double distance(Tuple a, Tuple b) {
140 return a.distance(b);
143 public static double angle(Tuple a, Tuple b, Tuple c) {
144 return b.angle(a, c);
147 public double get(int i) {
151 private final double coords[];
152 private final int hashvalue;