f8f063e8d604348a46958c20aa57ba53110d2f3a
[debian/openrocket] / src / net / sf / openrocket / util / Rotation2D.java
1 package net.sf.openrocket.util;
2
3 public class Rotation2D {
4         
5         public static final Rotation2D ID = new Rotation2D(0.0, 1.0);
6
7         public final double sin, cos;
8
9         
10         public Rotation2D(double angle) {
11                 this(Math.sin(angle), Math.cos(angle));
12         }
13         
14         public Rotation2D(double sin, double cos) {
15                 this.sin = sin;
16                 this.cos = cos;
17         }
18         
19         public Coordinate rotateX(Coordinate c) {
20                 return new Coordinate(c.x, cos*c.y - sin*c.z, cos*c.z + sin*c.y, c.weight);
21         }
22         
23         public Coordinate rotateY(Coordinate c) {
24                 return new Coordinate(cos*c.x + sin*c.z, c.y, cos*c.z - sin*c.x, c.weight);
25         }
26         
27         public Coordinate rotateZ(Coordinate c) {
28                 return new Coordinate(cos*c.x - sin*c.y, cos*c.y + sin*c.x, c.z, c.weight);
29         }
30         
31
32         public Coordinate invRotateX(Coordinate c) {
33                 return new Coordinate(c.x, cos*c.y + sin*c.z, cos*c.z - sin*c.y, c.weight);
34         }
35         
36         public Coordinate invRotateY(Coordinate c) {
37                 return new Coordinate(cos*c.x - sin*c.z, c.y, cos*c.z + sin*c.x, c.weight);
38         }
39         
40         public Coordinate invRotateZ(Coordinate c) {
41                 return new Coordinate(cos*c.x + sin*c.y, cos*c.y - sin*c.x, c.z, c.weight);
42         }
43         
44
45         
46         public static void main(String arg[]) {
47                 Coordinate c = new Coordinate(1,1,1,2.5);
48                 Rotation2D rot = new Rotation2D(Math.PI/4);
49                 
50                 System.out.println("X: "+rot.rotateX(c));
51                 System.out.println("Y: "+rot.rotateY(c));
52                 System.out.println("Z: "+rot.rotateZ(c));
53                 System.out.println("invX: "+rot.invRotateX(c));
54                 System.out.println("invY: "+rot.invRotateY(c));
55                 System.out.println("invZ: "+rot.invRotateZ(c));
56         }
57         
58 }