package net.sf.openrocket.util; public class Rotation2D { public static final Rotation2D ID = new Rotation2D(0.0, 1.0); public final double sin, cos; public Rotation2D(double angle) { this(Math.sin(angle), Math.cos(angle)); } public Rotation2D(double sin, double cos) { this.sin = sin; this.cos = cos; } public Coordinate rotateX(Coordinate c) { return new Coordinate(c.x, cos*c.y - sin*c.z, cos*c.z + sin*c.y, c.weight); } public Coordinate rotateY(Coordinate c) { return new Coordinate(cos*c.x + sin*c.z, c.y, cos*c.z - sin*c.x, c.weight); } public Coordinate rotateZ(Coordinate c) { return new Coordinate(cos*c.x - sin*c.y, cos*c.y + sin*c.x, c.z, c.weight); } public Coordinate invRotateX(Coordinate c) { return new Coordinate(c.x, cos*c.y + sin*c.z, cos*c.z - sin*c.y, c.weight); } public Coordinate invRotateY(Coordinate c) { return new Coordinate(cos*c.x - sin*c.z, c.y, cos*c.z + sin*c.x, c.weight); } public Coordinate invRotateZ(Coordinate c) { return new Coordinate(cos*c.x + sin*c.y, cos*c.y - sin*c.x, c.z, c.weight); } }