1 package net.sf.openrocket.util;
3 public class Rotation2D {
5 public static final Rotation2D ID = new Rotation2D(0.0, 1.0);
7 public final double sin, cos;
10 public Rotation2D(double angle) {
11 this(Math.sin(angle), Math.cos(angle));
14 public Rotation2D(double sin, double cos) {
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);
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);
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);
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);
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);
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);
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);
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));