1 package net.sf.openrocket.simulation;
3 import net.sf.openrocket.util.Coordinate;
4 import net.sf.openrocket.util.Quaternion;
6 public final class AccelerationData {
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;
16 public AccelerationData(Coordinate linearAccelerationRC, Coordinate rotationalAccelerationRC,
17 Coordinate linearAccelerationWC, Coordinate rotationalAccelerationWC,
18 Quaternion rotation) {
20 if ((linearAccelerationRC == null && linearAccelerationWC == null) ||
21 (rotationalAccelerationRC == null && rotationalAccelerationWC == null) ||
23 throw new IllegalArgumentException("Parameter is null: " +
24 " linearAccelerationRC=" + linearAccelerationRC +
25 " linearAccelerationWC=" + linearAccelerationWC +
26 " rotationalAccelerationRC=" + rotationalAccelerationRC +
27 " rotationalAccelerationWC=" + rotationalAccelerationWC +
28 " rotation=" + rotation);
30 this.linearAccelerationRC = linearAccelerationRC;
31 this.rotationalAccelerationRC = rotationalAccelerationRC;
32 this.linearAccelerationWC = linearAccelerationWC;
33 this.rotationalAccelerationWC = rotationalAccelerationWC;
34 this.rotation = rotation;
40 public Coordinate getLinearAccelerationRC() {
41 if (linearAccelerationRC == null) {
42 linearAccelerationRC = rotation.invRotate(linearAccelerationWC);
44 return linearAccelerationRC;
47 public Coordinate getRotationalAccelerationRC() {
48 if (rotationalAccelerationRC == null) {
49 rotationalAccelerationRC = rotation.invRotate(rotationalAccelerationWC);
51 return rotationalAccelerationRC;
54 public Coordinate getLinearAccelerationWC() {
55 if (linearAccelerationWC == null) {
56 linearAccelerationWC = rotation.rotate(linearAccelerationRC);
58 return linearAccelerationWC;
61 public Coordinate getRotationalAccelerationWC() {
62 if (rotationalAccelerationWC == null) {
63 rotationalAccelerationWC = rotation.rotate(rotationalAccelerationRC);
65 return rotationalAccelerationWC;
68 public Quaternion getRotation() {
76 public boolean equals(Object obj) {
79 if (!(obj instanceof AccelerationData))
81 AccelerationData other = (AccelerationData) obj;
82 return (this.getLinearAccelerationRC().equals(other.getLinearAccelerationRC()) &&
83 this.getRotationalAccelerationRC().equals(other.getRotationalAccelerationRC()));
87 public int hashCode() {
88 return getLinearAccelerationRC().hashCode() ^ getRotationalAccelerationRC().hashCode();