Improved code readability
[sixth-3d.git] / src / main / java / eu / svjatoslav / sixth / e3d / math / Orientation.java
index 9cc6dcd..f4b2851 100644 (file)
@@ -6,12 +6,22 @@ package eu.svjatoslav.sixth.e3d.math;
 
 import eu.svjatoslav.sixth.e3d.geometry.Point3D;
 
+import static java.lang.Math.cos;
+import static java.lang.Math.sin;
+
 /**
- * Used to represent transformation in a 3D space.
+ * Used to represent orientation in a 3D space.
+ *
+ * Orientations are represented as two angles of rotation around the XZ and YZ axes.
+ * The angles are stored as sines and cosines to avoid unnecessary trigonometric calculations.
+ *
+ * Orientations are used for rotating object coordinates in a 3D space.
  */
 public class Orientation implements Cloneable {
 
-
+    /**
+     * The sine and cosine of the angles.
+     */
     private double s1, c1, s2, c2;
 
     /**
@@ -28,6 +38,11 @@ public class Orientation implements Cloneable {
         computeMultipliers();
     }
 
+    /**
+     * Creates a new orientation with the specified angles.
+     * @param angleXZ The angle of rotation around the XZ axis.
+     * @param angleYZ The angle of rotation around the YZ axis.
+     */
     public Orientation(final double angleXZ, final double angleYZ) {
         this.angleXZ = angleXZ;
         this.angleYZ = angleYZ;
@@ -43,21 +58,30 @@ public class Orientation implements Cloneable {
      * Computes the sine and cosine of the angles.
      */
     private void computeMultipliers() {
-        s1 = Math.sin(angleXZ);
-        c1 = Math.cos(angleXZ);
+        s1 = sin(angleXZ);
+        c1 = cos(angleXZ);
 
-        s2 = Math.sin(angleYZ);
-        c2 = Math.cos(angleYZ);
+        s2 = sin(angleYZ);
+        c2 = cos(angleYZ);
     }
 
+    /**
+     * Rotates the specified point around the XZ and YZ axes relative to the origin.
+     * @param point3d The point to rotate.
+     */
     public void rotate(final Point3D point3d) {
+        // Rotate around the XZ axis.
         final double z1 = (point3d.z * c1) - (point3d.x * s1);
         point3d.x = (point3d.z * s1) + (point3d.x * c1);
 
+        // Rotate around the YZ axis.
         point3d.z = (z1 * c2) - (point3d.y * s2);
         point3d.y = (z1 * s2) + (point3d.y * c2);
     }
 
+    /**
+     * Rotates current orientation around the XZ and YZ axes.
+     */
     public void rotate(final double angleXZ, final double angleYZ) {
         this.angleXZ += angleXZ;
         this.angleYZ += angleYZ;