Advertisement
TheGhastModding

Utils4D

Nov 14th, 2019
145
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.80 KB | None | 0 0
  1. package theGhastModding.nbody4.main;
  2.  
  3. public class Utils4D {
  4.    
  5.     public static final int[][] ROTATE_ZW = new int[][] {
  6.         {3, -2, 0, 0},
  7.         {2, 3, 0, 0},
  8.         {0, 0, 1, 0},
  9.         {0, 0, 0, 1},
  10.     };
  11.    
  12.     public static final int[][] ROTATE_YW = new int[][] {
  13.         {3, 0, -2, 0},
  14.         {0, 1, 0, 0},
  15.         {2, 0, 3, 0},
  16.         {0, 0, 0, 1},
  17.     };
  18.    
  19.     public static final int[][] ROTATE_YZ = new int[][] {
  20.         {3, 0, 0, -2},
  21.         {0, 1, 0, 0},
  22.         {0, 0, 1, 0},
  23.         {2, 0, 0, 3},
  24.     };
  25.    
  26.     public static final int[][] ROTATE_XW = new int[][] {
  27.         {1, 0, 0, 0},
  28.         {0, 3, -2, 0},
  29.         {0, 2, 3, 0},
  30.         {0, 0, 0, 1},
  31.     };
  32.    
  33.     public static final int[][] ROTATE_XZ = new int[][] {
  34.         {1, 0, 0, 0},
  35.         {0, 3, 0, -2},
  36.         {0, 0, 1, 0},
  37.         {0, 2, 0, 3},
  38.     };
  39.    
  40.     public static final int[][] ROTATE_XY = new int[][] {
  41.         {1, 0, 0, 0},
  42.         {0, 1, 0, 0},
  43.         {0, 0, 3, -2},
  44.         {0, 0, 2, 3},
  45.     };
  46.    
  47.     public static void rotate4D(double[] vec, double zw, double yw, double yz, double xw, double xz, double xy) {
  48.         rotate(vec, ROTATE_ZW, zw);
  49.         rotate(vec, ROTATE_YW, yw);
  50.         rotate(vec, ROTATE_YZ, yz);
  51.         rotate(vec, ROTATE_XW, xw);
  52.         rotate(vec, ROTATE_XZ, xz);
  53.         rotate(vec, ROTATE_XY, xy);
  54.     }
  55.    
  56.     private static void rotate(double[] vec, int[][] rotationMatrix, double angle) {
  57.         for(int i = 0; i < 4; i++) {
  58.             double currRes = 0;
  59.             for(int j = 0; j < 4; j++) {
  60.                 double mul = 0;
  61.                 switch(rotationMatrix[i][j]) {
  62.                 default:
  63.                     mul = 0;
  64.                     break;
  65.                 case 1:
  66.                     mul = 1;
  67.                     break;
  68.                 case 2:
  69.                     mul = Math.sin(Math.toRadians(angle));
  70.                     break;
  71.                 case 3:
  72.                     mul = Math.cos(Math.toRadians(angle));
  73.                     break;
  74.                 case -2:
  75.                     mul = -Math.sin(Math.toRadians(angle));
  76.                     break;
  77.                 case -3:
  78.                     mul = -Math.cos(Math.toRadians(angle));
  79.                     break;
  80.                 }
  81.                 currRes += vec[j] * mul;
  82.             }
  83.             vec[i] = currRes;
  84.         }
  85.     }
  86.    
  87. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement