(no commit message)
[utils] / gps / src / org / wamblee / gps / geometry / Coordinates.java
1 /*
2  * Copyright 2006 the original author or authors.
3  * 
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  * 
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  * 
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */ 
16
17 package org.wamblee.gps.geometry;
18
19 /**
20  * Coordinates in some 3-dimensional coordinate system.  
21  */
22 public class Coordinates {
23
24     private double _x1; 
25     private double _x2; 
26     private double _x3; 
27     
28     /**
29      * Constructs the coordinates. 
30      * @param aX1 First coordinate. 
31      * @param aX2 Second coordinate. 
32      * @param aX3 Third coordinate. 
33      */
34     public Coordinates(double aX1, double aX2, double aX3) { 
35         _x1 = aX1; 
36         _x2 = aX2;
37         _x3 = aX3; 
38     }
39     
40     public double getX1() { 
41         return _x1; 
42     }
43     
44     public double getX2() { 
45         return _x2; 
46     }
47     
48     public double getX3() { 
49         return _x3; 
50     }
51     
52     /* (non-Javadoc)
53      * @see java.lang.Object#toString()
54      */
55     @Override
56     public String toString() {
57         return "(" + getX1() + ", " + getX2() + ", " + getX3() + ")";
58     }
59     
60     public Coordinates add(Coordinates aC) { 
61         return new Coordinates(_x1 + aC._x1, _x2 + aC._x2, _x3 + aC._x3);
62     }
63     
64     public Coordinates subtract(Coordinates aC) { 
65         return new Coordinates(_x1 - aC._x1, _x2 - aC._x2, _x3 - aC._x3);
66     }
67   
68     public double innerProduct(Coordinates aC) { 
69         return _x1 * aC._x1 + _x2 * aC._x2 +  _x3 * aC._x3;
70     }
71     
72     public Coordinates outerProduct(Coordinates aC) { 
73         return new Coordinates(
74            _x2*aC._x3 - _x3*aC._x2,
75            -_x1*aC._x3 + _x3*aC._x1,
76            _x1*aC._x2 - _x2*aC._x1
77         );
78     }
79     
80     public double norm() { 
81         return Math.sqrt(innerProduct(this));
82     }
83     
84     public Coordinates scale(double aMultiplier) { 
85         return new Coordinates(_x1*aMultiplier, _x2*aMultiplier, _x3*aMultiplier);
86     }
87     
88     public Coordinates normalize() {
89         return scale(1.0/norm());
90     }
91 }