Formatting update
[sixth-3d.git] / src / main / java / eu / svjatoslav / sixth / e3d / math / Orientation.java
1 /*
2  * Sixth 3D engine. Author: Svjatoslav Agejenko. 
3  * This project is released under Creative Commons Zero (CC0) license.
4  */
5 package eu.svjatoslav.sixth.e3d.math;
6
7 import eu.svjatoslav.sixth.e3d.geometry.Point3D;
8
9 public class Orientation implements Cloneable {
10
11     private double s1, c1, s2, c2;
12
13     private double angleXZ = 0;
14     private double angleYZ = 0;
15
16     public Orientation() {
17         computeMultipliers();
18     }
19
20     public Orientation(final double angleXZ, final double angleYZ) {
21         this.angleXZ = angleXZ;
22         this.angleYZ = angleYZ;
23         computeMultipliers();
24     }
25
26     @Override
27     public Orientation clone() {
28         return new Orientation(angleXZ, angleYZ);
29     }
30
31     private void computeMultipliers() {
32         s1 = Math.sin(angleXZ);
33         c1 = Math.cos(angleXZ);
34
35         s2 = Math.sin(angleYZ);
36         c2 = Math.cos(angleYZ);
37     }
38
39     public void rotate(final Point3D point3d) {
40         final double z1 = (point3d.z * c1) - (point3d.x * s1);
41         point3d.x = (point3d.z * s1) + (point3d.x * c1);
42
43         point3d.z = (z1 * c2) - (point3d.y * s2);
44         point3d.y = (z1 * s2) + (point3d.y * c2);
45     }
46
47     public void rotate(final double angleXZ, final double angleYZ) {
48         this.angleXZ += angleXZ;
49         this.angleYZ += angleYZ;
50         computeMultipliers();
51     }
52
53 }