create changelog entry
[debian/openrocket] / core / src / net / sf / openrocket / simulation / AccelerationData.java
1 package net.sf.openrocket.simulation;
2
3 import net.sf.openrocket.util.Coordinate;
4 import net.sf.openrocket.util.Quaternion;
5
6 public final class AccelerationData {
7
8         private Coordinate linearAccelerationRC;
9         private Coordinate rotationalAccelerationRC;
10         private Coordinate linearAccelerationWC;
11         private Coordinate rotationalAccelerationWC;
12         // Rotates from rocket coordinates to world coordinates
13         private final Quaternion rotation;
14         
15         
16         public AccelerationData(Coordinate linearAccelerationRC, Coordinate rotationalAccelerationRC,
17                         Coordinate linearAccelerationWC, Coordinate rotationalAccelerationWC,
18                         Quaternion rotation) {
19                 
20                 if ((linearAccelerationRC == null && linearAccelerationWC == null) ||
21                                 (rotationalAccelerationRC == null && rotationalAccelerationWC == null) ||
22                                 rotation == null) {
23                         throw new IllegalArgumentException("Parameter is null: " +
24                                         " linearAccelerationRC=" + linearAccelerationRC +
25                                         " linearAccelerationWC=" + linearAccelerationWC +
26                                         " rotationalAccelerationRC=" + rotationalAccelerationRC +
27                                         " rotationalAccelerationWC=" + rotationalAccelerationWC +
28                                         " rotation=" + rotation);
29                 }
30                 this.linearAccelerationRC = linearAccelerationRC;
31                 this.rotationalAccelerationRC = rotationalAccelerationRC;
32                 this.linearAccelerationWC = linearAccelerationWC;
33                 this.rotationalAccelerationWC = rotationalAccelerationWC;
34                 this.rotation = rotation;
35         }
36
37         
38         
39         
40         public Coordinate getLinearAccelerationRC() {
41                 if (linearAccelerationRC == null) {
42                         linearAccelerationRC = rotation.invRotate(linearAccelerationWC);
43                 }
44                 return linearAccelerationRC;
45         }
46
47         public Coordinate getRotationalAccelerationRC() {
48                 if (rotationalAccelerationRC == null) {
49                         rotationalAccelerationRC = rotation.invRotate(rotationalAccelerationWC);
50                 }
51                 return rotationalAccelerationRC;
52         }
53
54         public Coordinate getLinearAccelerationWC() {
55                 if (linearAccelerationWC == null) {
56                         linearAccelerationWC = rotation.rotate(linearAccelerationRC);
57                 }
58                 return linearAccelerationWC;
59         }
60
61         public Coordinate getRotationalAccelerationWC() {
62                 if (rotationalAccelerationWC == null) {
63                         rotationalAccelerationWC = rotation.rotate(rotationalAccelerationRC);
64                 }
65                 return rotationalAccelerationWC;
66         }
67
68         public Quaternion getRotation() {
69                 return rotation;
70         }
71
72
73
74
75         @Override
76         public boolean equals(Object obj) {
77                 if (this == obj)
78                         return true;
79                 if (!(obj instanceof AccelerationData))
80                         return false;
81                 AccelerationData other = (AccelerationData) obj;
82                 return (this.getLinearAccelerationRC().equals(other.getLinearAccelerationRC()) && 
83                                 this.getRotationalAccelerationRC().equals(other.getRotationalAccelerationRC()));
84         }
85         
86         @Override
87         public int hashCode() {
88                 return getLinearAccelerationRC().hashCode() ^ getRotationalAccelerationRC().hashCode();
89         }
90
91 }