home *** CD-ROM | disk | FTP | other *** search
/ S283 Planetary Science &… the Search for Life CD 3 / 0_CD-ROM.iso / install / jre1_3 / lib / ext / vecmath.jar / javax / vecmath / Matrix3d.class (.txt) < prev    next >
Encoding:
Java Class File  |  2002-06-19  |  30.9 KB  |  2,192 lines

  1. package javax.vecmath;
  2.  
  3. import java.io.Serializable;
  4.  
  5. public class Matrix3d implements Serializable, Cloneable {
  6.    static final long serialVersionUID = 6837536777072402710L;
  7.    public double m00;
  8.    public double m01;
  9.    public double m02;
  10.    public double m10;
  11.    public double m11;
  12.    public double m12;
  13.    public double m20;
  14.    public double m21;
  15.    public double m22;
  16.    private static final double EPS = 1.110223024E-16;
  17.    private static final double ERR_EPS = 1.0E-8;
  18.    private static double xin;
  19.    private static double yin;
  20.    private static double zin;
  21.    private static double xout;
  22.    private static double yout;
  23.    private static double zout;
  24.  
  25.    public Matrix3d(double var1, double var3, double var5, double var7, double var9, double var11, double var13, double var15, double var17) {
  26.       this.m00 = var1;
  27.       this.m01 = var3;
  28.       this.m02 = var5;
  29.       this.m10 = var7;
  30.       this.m11 = var9;
  31.       this.m12 = var11;
  32.       this.m20 = var13;
  33.       this.m21 = var15;
  34.       this.m22 = var17;
  35.    }
  36.  
  37.    public Matrix3d(double[] var1) {
  38.       this.m00 = var1[0];
  39.       this.m01 = var1[1];
  40.       this.m02 = var1[2];
  41.       this.m10 = var1[3];
  42.       this.m11 = var1[4];
  43.       this.m12 = var1[5];
  44.       this.m20 = var1[6];
  45.       this.m21 = var1[7];
  46.       this.m22 = var1[8];
  47.    }
  48.  
  49.    public Matrix3d(Matrix3d var1) {
  50.       this.m00 = var1.m00;
  51.       this.m01 = var1.m01;
  52.       this.m02 = var1.m02;
  53.       this.m10 = var1.m10;
  54.       this.m11 = var1.m11;
  55.       this.m12 = var1.m12;
  56.       this.m20 = var1.m20;
  57.       this.m21 = var1.m21;
  58.       this.m22 = var1.m22;
  59.    }
  60.  
  61.    public Matrix3d(Matrix3f var1) {
  62.       this.m00 = (double)var1.m00;
  63.       this.m01 = (double)var1.m01;
  64.       this.m02 = (double)var1.m02;
  65.       this.m10 = (double)var1.m10;
  66.       this.m11 = (double)var1.m11;
  67.       this.m12 = (double)var1.m12;
  68.       this.m20 = (double)var1.m20;
  69.       this.m21 = (double)var1.m21;
  70.       this.m22 = (double)var1.m22;
  71.    }
  72.  
  73.    public Matrix3d() {
  74.       this.m00 = (double)0.0F;
  75.       this.m01 = (double)0.0F;
  76.       this.m02 = (double)0.0F;
  77.       this.m10 = (double)0.0F;
  78.       this.m11 = (double)0.0F;
  79.       this.m12 = (double)0.0F;
  80.       this.m20 = (double)0.0F;
  81.       this.m21 = (double)0.0F;
  82.       this.m22 = (double)0.0F;
  83.    }
  84.  
  85.    public String toString() {
  86.       return this.m00 + ", " + this.m01 + ", " + this.m02 + "\n" + this.m10 + ", " + this.m11 + ", " + this.m12 + "\n" + this.m20 + ", " + this.m21 + ", " + this.m22 + "\n";
  87.    }
  88.  
  89.    public final void setIdentity() {
  90.       this.m00 = (double)1.0F;
  91.       this.m01 = (double)0.0F;
  92.       this.m02 = (double)0.0F;
  93.       this.m10 = (double)0.0F;
  94.       this.m11 = (double)1.0F;
  95.       this.m12 = (double)0.0F;
  96.       this.m20 = (double)0.0F;
  97.       this.m21 = (double)0.0F;
  98.       this.m22 = (double)1.0F;
  99.    }
  100.  
  101.    public final void setScale(double var1) {
  102.       double[] var3 = new double[9];
  103.       double[] var4 = new double[3];
  104.       this.getScaleRotate(var4, var3);
  105.       this.m00 = var3[0] * var1;
  106.       this.m01 = var3[1] * var1;
  107.       this.m02 = var3[2] * var1;
  108.       this.m10 = var3[3] * var1;
  109.       this.m11 = var3[4] * var1;
  110.       this.m12 = var3[5] * var1;
  111.       this.m20 = var3[6] * var1;
  112.       this.m21 = var3[7] * var1;
  113.       this.m22 = var3[8] * var1;
  114.    }
  115.  
  116.    public final void setElement(int var1, int var2, double var3) {
  117.       switch (var1) {
  118.          case 0:
  119.             switch (var2) {
  120.                case 0:
  121.                   this.m00 = var3;
  122.                   return;
  123.                case 1:
  124.                   this.m01 = var3;
  125.                   return;
  126.                case 2:
  127.                   this.m02 = var3;
  128.                   return;
  129.                default:
  130.                   throw new ArrayIndexOutOfBoundsException(VecMathI18N.getString("Matrix3d0"));
  131.             }
  132.          case 1:
  133.             switch (var2) {
  134.                case 0:
  135.                   this.m10 = var3;
  136.                   return;
  137.                case 1:
  138.                   this.m11 = var3;
  139.                   return;
  140.                case 2:
  141.                   this.m12 = var3;
  142.                   return;
  143.                default:
  144.                   throw new ArrayIndexOutOfBoundsException(VecMathI18N.getString("Matrix3d0"));
  145.             }
  146.          case 2:
  147.             switch (var2) {
  148.                case 0:
  149.                   this.m20 = var3;
  150.                   return;
  151.                case 1:
  152.                   this.m21 = var3;
  153.                   return;
  154.                case 2:
  155.                   this.m22 = var3;
  156.                   return;
  157.                default:
  158.                   throw new ArrayIndexOutOfBoundsException(VecMathI18N.getString("Matrix3d0"));
  159.             }
  160.          default:
  161.             throw new ArrayIndexOutOfBoundsException(VecMathI18N.getString("Matrix3d0"));
  162.       }
  163.    }
  164.  
  165.    public final double getElement(int var1, int var2) {
  166.       switch (var1) {
  167.          case 0:
  168.             switch (var2) {
  169.                case 0:
  170.                   return this.m00;
  171.                case 1:
  172.                   return this.m01;
  173.                case 2:
  174.                   return this.m02;
  175.                default:
  176.                   throw new ArrayIndexOutOfBoundsException(VecMathI18N.getString("Matrix3d1"));
  177.             }
  178.          case 1:
  179.             switch (var2) {
  180.                case 0:
  181.                   return this.m10;
  182.                case 1:
  183.                   return this.m11;
  184.                case 2:
  185.                   return this.m12;
  186.                default:
  187.                   throw new ArrayIndexOutOfBoundsException(VecMathI18N.getString("Matrix3d1"));
  188.             }
  189.          case 2:
  190.             switch (var2) {
  191.                case 0:
  192.                   return this.m20;
  193.                case 1:
  194.                   return this.m21;
  195.                case 2:
  196.                   return this.m22;
  197.             }
  198.       }
  199.  
  200.       throw new ArrayIndexOutOfBoundsException(VecMathI18N.getString("Matrix3d1"));
  201.    }
  202.  
  203.    public final void getRow(int var1, Vector3d var2) {
  204.       if (var1 == 0) {
  205.          var2.x = this.m00;
  206.          var2.y = this.m01;
  207.          var2.z = this.m02;
  208.       } else if (var1 == 1) {
  209.          var2.x = this.m10;
  210.          var2.y = this.m11;
  211.          var2.z = this.m12;
  212.       } else {
  213.          if (var1 != 2) {
  214.             throw new ArrayIndexOutOfBoundsException(VecMathI18N.getString("Matrix3d2"));
  215.          }
  216.  
  217.          var2.x = this.m20;
  218.          var2.y = this.m21;
  219.          var2.z = this.m22;
  220.       }
  221.  
  222.    }
  223.  
  224.    public final void getRow(int var1, double[] var2) {
  225.       if (var1 == 0) {
  226.          var2[0] = this.m00;
  227.          var2[1] = this.m01;
  228.          var2[2] = this.m02;
  229.       } else if (var1 == 1) {
  230.          var2[0] = this.m10;
  231.          var2[1] = this.m11;
  232.          var2[2] = this.m12;
  233.       } else {
  234.          if (var1 != 2) {
  235.             throw new ArrayIndexOutOfBoundsException(VecMathI18N.getString("Matrix3d2"));
  236.          }
  237.  
  238.          var2[0] = this.m20;
  239.          var2[1] = this.m21;
  240.          var2[2] = this.m22;
  241.       }
  242.  
  243.    }
  244.  
  245.    public final void getColumn(int var1, Vector3d var2) {
  246.       if (var1 == 0) {
  247.          var2.x = this.m00;
  248.          var2.y = this.m10;
  249.          var2.z = this.m20;
  250.       } else if (var1 == 1) {
  251.          var2.x = this.m01;
  252.          var2.y = this.m11;
  253.          var2.z = this.m21;
  254.       } else {
  255.          if (var1 != 2) {
  256.             throw new ArrayIndexOutOfBoundsException(VecMathI18N.getString("Matrix3d4"));
  257.          }
  258.  
  259.          var2.x = this.m02;
  260.          var2.y = this.m12;
  261.          var2.z = this.m22;
  262.       }
  263.  
  264.    }
  265.  
  266.    public final void getColumn(int var1, double[] var2) {
  267.       if (var1 == 0) {
  268.          var2[0] = this.m00;
  269.          var2[1] = this.m10;
  270.          var2[2] = this.m20;
  271.       } else if (var1 == 1) {
  272.          var2[0] = this.m01;
  273.          var2[1] = this.m11;
  274.          var2[2] = this.m21;
  275.       } else {
  276.          if (var1 != 2) {
  277.             throw new ArrayIndexOutOfBoundsException(VecMathI18N.getString("Matrix3d4"));
  278.          }
  279.  
  280.          var2[0] = this.m02;
  281.          var2[1] = this.m12;
  282.          var2[2] = this.m22;
  283.       }
  284.  
  285.    }
  286.  
  287.    public final void setRow(int var1, double var2, double var4, double var6) {
  288.       switch (var1) {
  289.          case 0:
  290.             this.m00 = var2;
  291.             this.m01 = var4;
  292.             this.m02 = var6;
  293.             break;
  294.          case 1:
  295.             this.m10 = var2;
  296.             this.m11 = var4;
  297.             this.m12 = var6;
  298.             break;
  299.          case 2:
  300.             this.m20 = var2;
  301.             this.m21 = var4;
  302.             this.m22 = var6;
  303.             break;
  304.          default:
  305.             throw new ArrayIndexOutOfBoundsException(VecMathI18N.getString("Matrix3d6"));
  306.       }
  307.  
  308.    }
  309.  
  310.    public final void setRow(int var1, Vector3d var2) {
  311.       switch (var1) {
  312.          case 0:
  313.             this.m00 = var2.x;
  314.             this.m01 = var2.y;
  315.             this.m02 = var2.z;
  316.             break;
  317.          case 1:
  318.             this.m10 = var2.x;
  319.             this.m11 = var2.y;
  320.             this.m12 = var2.z;
  321.             break;
  322.          case 2:
  323.             this.m20 = var2.x;
  324.             this.m21 = var2.y;
  325.             this.m22 = var2.z;
  326.             break;
  327.          default:
  328.             throw new ArrayIndexOutOfBoundsException(VecMathI18N.getString("Matrix3d6"));
  329.       }
  330.  
  331.    }
  332.  
  333.    public final void setRow(int var1, double[] var2) {
  334.       switch (var1) {
  335.          case 0:
  336.             this.m00 = var2[0];
  337.             this.m01 = var2[1];
  338.             this.m02 = var2[2];
  339.             break;
  340.          case 1:
  341.             this.m10 = var2[0];
  342.             this.m11 = var2[1];
  343.             this.m12 = var2[2];
  344.             break;
  345.          case 2:
  346.             this.m20 = var2[0];
  347.             this.m21 = var2[1];
  348.             this.m22 = var2[2];
  349.             break;
  350.          default:
  351.             throw new ArrayIndexOutOfBoundsException(VecMathI18N.getString("Matrix3d6"));
  352.       }
  353.  
  354.    }
  355.  
  356.    public final void setColumn(int var1, double var2, double var4, double var6) {
  357.       switch (var1) {
  358.          case 0:
  359.             this.m00 = var2;
  360.             this.m10 = var4;
  361.             this.m20 = var6;
  362.             break;
  363.          case 1:
  364.             this.m01 = var2;
  365.             this.m11 = var4;
  366.             this.m21 = var6;
  367.             break;
  368.          case 2:
  369.             this.m02 = var2;
  370.             this.m12 = var4;
  371.             this.m22 = var6;
  372.             break;
  373.          default:
  374.             throw new ArrayIndexOutOfBoundsException(VecMathI18N.getString("Matrix3d9"));
  375.       }
  376.  
  377.    }
  378.  
  379.    public final void setColumn(int var1, Vector3d var2) {
  380.       switch (var1) {
  381.          case 0:
  382.             this.m00 = var2.x;
  383.             this.m10 = var2.y;
  384.             this.m20 = var2.z;
  385.             break;
  386.          case 1:
  387.             this.m01 = var2.x;
  388.             this.m11 = var2.y;
  389.             this.m21 = var2.z;
  390.             break;
  391.          case 2:
  392.             this.m02 = var2.x;
  393.             this.m12 = var2.y;
  394.             this.m22 = var2.z;
  395.             break;
  396.          default:
  397.             throw new ArrayIndexOutOfBoundsException(VecMathI18N.getString("Matrix3d9"));
  398.       }
  399.  
  400.    }
  401.  
  402.    public final void setColumn(int var1, double[] var2) {
  403.       switch (var1) {
  404.          case 0:
  405.             this.m00 = var2[0];
  406.             this.m10 = var2[1];
  407.             this.m20 = var2[2];
  408.             break;
  409.          case 1:
  410.             this.m01 = var2[0];
  411.             this.m11 = var2[1];
  412.             this.m21 = var2[2];
  413.             break;
  414.          case 2:
  415.             this.m02 = var2[0];
  416.             this.m12 = var2[1];
  417.             this.m22 = var2[2];
  418.             break;
  419.          default:
  420.             throw new ArrayIndexOutOfBoundsException(VecMathI18N.getString("Matrix3d9"));
  421.       }
  422.  
  423.    }
  424.  
  425.    public final double getScale() {
  426.       double[] var1 = new double[3];
  427.       double[] var2 = new double[9];
  428.       this.getScaleRotate(var1, var2);
  429.       return max3(var1);
  430.    }
  431.  
  432.    public final void add(double var1) {
  433.       this.m00 += var1;
  434.       this.m01 += var1;
  435.       this.m02 += var1;
  436.       this.m10 += var1;
  437.       this.m11 += var1;
  438.       this.m12 += var1;
  439.       this.m20 += var1;
  440.       this.m21 += var1;
  441.       this.m22 += var1;
  442.    }
  443.  
  444.    public final void add(double var1, Matrix3d var3) {
  445.       this.m00 = var3.m00 + var1;
  446.       this.m01 = var3.m01 + var1;
  447.       this.m02 = var3.m02 + var1;
  448.       this.m10 = var3.m10 + var1;
  449.       this.m11 = var3.m11 + var1;
  450.       this.m12 = var3.m12 + var1;
  451.       this.m20 = var3.m20 + var1;
  452.       this.m21 = var3.m21 + var1;
  453.       this.m22 = var3.m22 + var1;
  454.    }
  455.  
  456.    public final void add(Matrix3d var1, Matrix3d var2) {
  457.       this.m00 = var1.m00 + var2.m00;
  458.       this.m01 = var1.m01 + var2.m01;
  459.       this.m02 = var1.m02 + var2.m02;
  460.       this.m10 = var1.m10 + var2.m10;
  461.       this.m11 = var1.m11 + var2.m11;
  462.       this.m12 = var1.m12 + var2.m12;
  463.       this.m20 = var1.m20 + var2.m20;
  464.       this.m21 = var1.m21 + var2.m21;
  465.       this.m22 = var1.m22 + var2.m22;
  466.    }
  467.  
  468.    public final void add(Matrix3d var1) {
  469.       this.m00 += var1.m00;
  470.       this.m01 += var1.m01;
  471.       this.m02 += var1.m02;
  472.       this.m10 += var1.m10;
  473.       this.m11 += var1.m11;
  474.       this.m12 += var1.m12;
  475.       this.m20 += var1.m20;
  476.       this.m21 += var1.m21;
  477.       this.m22 += var1.m22;
  478.    }
  479.  
  480.    public final void sub(Matrix3d var1, Matrix3d var2) {
  481.       this.m00 = var1.m00 - var2.m00;
  482.       this.m01 = var1.m01 - var2.m01;
  483.       this.m02 = var1.m02 - var2.m02;
  484.       this.m10 = var1.m10 - var2.m10;
  485.       this.m11 = var1.m11 - var2.m11;
  486.       this.m12 = var1.m12 - var2.m12;
  487.       this.m20 = var1.m20 - var2.m20;
  488.       this.m21 = var1.m21 - var2.m21;
  489.       this.m22 = var1.m22 - var2.m22;
  490.    }
  491.  
  492.    public final void sub(Matrix3d var1) {
  493.       this.m00 -= var1.m00;
  494.       this.m01 -= var1.m01;
  495.       this.m02 -= var1.m02;
  496.       this.m10 -= var1.m10;
  497.       this.m11 -= var1.m11;
  498.       this.m12 -= var1.m12;
  499.       this.m20 -= var1.m20;
  500.       this.m21 -= var1.m21;
  501.       this.m22 -= var1.m22;
  502.    }
  503.  
  504.    public final void transpose() {
  505.       double var1 = this.m10;
  506.       this.m10 = this.m01;
  507.       this.m01 = var1;
  508.       var1 = this.m20;
  509.       this.m20 = this.m02;
  510.       this.m02 = var1;
  511.       var1 = this.m21;
  512.       this.m21 = this.m12;
  513.       this.m12 = var1;
  514.    }
  515.  
  516.    public final void transpose(Matrix3d var1) {
  517.       if (this != var1) {
  518.          this.m00 = var1.m00;
  519.          this.m01 = var1.m10;
  520.          this.m02 = var1.m20;
  521.          this.m10 = var1.m01;
  522.          this.m11 = var1.m11;
  523.          this.m12 = var1.m21;
  524.          this.m20 = var1.m02;
  525.          this.m21 = var1.m12;
  526.          this.m22 = var1.m22;
  527.       } else {
  528.          this.transpose();
  529.       }
  530.  
  531.    }
  532.  
  533.    public final void set(Quat4d var1) {
  534.       this.m00 = (double)1.0F - (double)2.0F * var1.y * var1.y - (double)2.0F * var1.z * var1.z;
  535.       this.m10 = (double)2.0F * (var1.x * var1.y + var1.w * var1.z);
  536.       this.m20 = (double)2.0F * (var1.x * var1.z - var1.w * var1.y);
  537.       this.m01 = (double)2.0F * (var1.x * var1.y - var1.w * var1.z);
  538.       this.m11 = (double)1.0F - (double)2.0F * var1.x * var1.x - (double)2.0F * var1.z * var1.z;
  539.       this.m21 = (double)2.0F * (var1.y * var1.z + var1.w * var1.x);
  540.       this.m02 = (double)2.0F * (var1.x * var1.z + var1.w * var1.y);
  541.       this.m12 = (double)2.0F * (var1.y * var1.z - var1.w * var1.x);
  542.       this.m22 = (double)1.0F - (double)2.0F * var1.x * var1.x - (double)2.0F * var1.y * var1.y;
  543.    }
  544.  
  545.    public final void set(AxisAngle4d var1) {
  546.       double var2 = Math.sqrt(var1.x * var1.x + var1.y * var1.y + var1.z * var1.z);
  547.       if (var2 < 1.110223024E-16) {
  548.          this.m00 = (double)1.0F;
  549.          this.m01 = (double)0.0F;
  550.          this.m02 = (double)0.0F;
  551.          this.m10 = (double)0.0F;
  552.          this.m11 = (double)1.0F;
  553.          this.m12 = (double)0.0F;
  554.          this.m20 = (double)0.0F;
  555.          this.m21 = (double)0.0F;
  556.          this.m22 = (double)1.0F;
  557.       } else {
  558.          var2 = (double)1.0F / var2;
  559.          double var4 = var1.x * var2;
  560.          double var6 = var1.y * var2;
  561.          double var8 = var1.z * var2;
  562.          double var10 = Math.sin(var1.angle);
  563.          double var12 = Math.cos(var1.angle);
  564.          double var14 = (double)1.0F - var12;
  565.          double var16 = var1.x * var1.z;
  566.          double var18 = var1.x * var1.y;
  567.          double var20 = var1.y * var1.z;
  568.          this.m00 = var14 * var4 * var4 + var12;
  569.          this.m01 = var14 * var18 - var10 * var8;
  570.          this.m02 = var14 * var16 + var10 * var6;
  571.          this.m10 = var14 * var18 + var10 * var8;
  572.          this.m11 = var14 * var6 * var6 + var12;
  573.          this.m12 = var14 * var20 - var10 * var4;
  574.          this.m20 = var14 * var16 - var10 * var6;
  575.          this.m21 = var14 * var20 + var10 * var4;
  576.          this.m22 = var14 * var8 * var8 + var12;
  577.       }
  578.  
  579.    }
  580.  
  581.    public final void set(Quat4f var1) {
  582.       this.m00 = (double)1.0F - (double)2.0F * (double)var1.y * (double)var1.y - (double)2.0F * (double)var1.z * (double)var1.z;
  583.       this.m10 = (double)2.0F * (double)(var1.x * var1.y + var1.w * var1.z);
  584.       this.m20 = (double)2.0F * (double)(var1.x * var1.z - var1.w * var1.y);
  585.       this.m01 = (double)2.0F * (double)(var1.x * var1.y - var1.w * var1.z);
  586.       this.m11 = (double)1.0F - (double)2.0F * (double)var1.x * (double)var1.x - (double)2.0F * (double)var1.z * (double)var1.z;
  587.       this.m21 = (double)2.0F * (double)(var1.y * var1.z + var1.w * var1.x);
  588.       this.m02 = (double)2.0F * (double)(var1.x * var1.z + var1.w * var1.y);
  589.       this.m12 = (double)2.0F * (double)(var1.y * var1.z - var1.w * var1.x);
  590.       this.m22 = (double)1.0F - (double)2.0F * (double)var1.x * (double)var1.x - (double)2.0F * (double)var1.y * (double)var1.y;
  591.    }
  592.  
  593.    public final void set(AxisAngle4f var1) {
  594.       double var2 = Math.sqrt((double)(var1.x * var1.x + var1.y * var1.y + var1.z * var1.z));
  595.       if (var2 < 1.110223024E-16) {
  596.          this.m00 = (double)1.0F;
  597.          this.m01 = (double)0.0F;
  598.          this.m02 = (double)0.0F;
  599.          this.m10 = (double)0.0F;
  600.          this.m11 = (double)1.0F;
  601.          this.m12 = (double)0.0F;
  602.          this.m20 = (double)0.0F;
  603.          this.m21 = (double)0.0F;
  604.          this.m22 = (double)1.0F;
  605.       } else {
  606.          var2 = (double)1.0F / var2;
  607.          double var4 = (double)var1.x * var2;
  608.          double var6 = (double)var1.y * var2;
  609.          double var8 = (double)var1.z * var2;
  610.          double var10 = Math.sin((double)var1.angle);
  611.          double var12 = Math.cos((double)var1.angle);
  612.          double var14 = (double)1.0F - var12;
  613.          double var16 = var4 * var8;
  614.          double var18 = var4 * var6;
  615.          double var20 = var6 * var8;
  616.          this.m00 = var14 * var4 * var4 + var12;
  617.          this.m01 = var14 * var18 - var10 * var8;
  618.          this.m02 = var14 * var16 + var10 * var6;
  619.          this.m10 = var14 * var18 + var10 * var8;
  620.          this.m11 = var14 * var6 * var6 + var12;
  621.          this.m12 = var14 * var20 - var10 * var4;
  622.          this.m20 = var14 * var16 - var10 * var6;
  623.          this.m21 = var14 * var20 + var10 * var4;
  624.          this.m22 = var14 * var8 * var8 + var12;
  625.       }
  626.  
  627.    }
  628.  
  629.    public final void set(Matrix3f var1) {
  630.       this.m00 = (double)var1.m00;
  631.       this.m01 = (double)var1.m01;
  632.       this.m02 = (double)var1.m02;
  633.       this.m10 = (double)var1.m10;
  634.       this.m11 = (double)var1.m11;
  635.       this.m12 = (double)var1.m12;
  636.       this.m20 = (double)var1.m20;
  637.       this.m21 = (double)var1.m21;
  638.       this.m22 = (double)var1.m22;
  639.    }
  640.  
  641.    public final void set(Matrix3d var1) {
  642.       this.m00 = var1.m00;
  643.       this.m01 = var1.m01;
  644.       this.m02 = var1.m02;
  645.       this.m10 = var1.m10;
  646.       this.m11 = var1.m11;
  647.       this.m12 = var1.m12;
  648.       this.m20 = var1.m20;
  649.       this.m21 = var1.m21;
  650.       this.m22 = var1.m22;
  651.    }
  652.  
  653.    public final void set(double[] var1) {
  654.       this.m00 = var1[0];
  655.       this.m01 = var1[1];
  656.       this.m02 = var1[2];
  657.       this.m10 = var1[3];
  658.       this.m11 = var1[4];
  659.       this.m12 = var1[5];
  660.       this.m20 = var1[6];
  661.       this.m21 = var1[7];
  662.       this.m22 = var1[8];
  663.    }
  664.  
  665.    public final void invert(Matrix3d var1) {
  666.       this.invertGeneral(var1);
  667.    }
  668.  
  669.    public final void invert() {
  670.       this.invertGeneral(this);
  671.    }
  672.  
  673.    private final void invertGeneral(Matrix3d var1) {
  674.       double[] var2 = new double[9];
  675.       int[] var3 = new int[3];
  676.       double[] var7 = new double[]{var1.m00, var1.m01, var1.m02, var1.m10, var1.m11, var1.m12, var1.m20, var1.m21, var1.m22};
  677.       if (!luDecomposition(var7, var3)) {
  678.          throw new SingularMatrixException(VecMathI18N.getString("Matrix3d12"));
  679.       } else {
  680.          for(int var4 = 0; var4 < 9; ++var4) {
  681.             var2[var4] = (double)0.0F;
  682.          }
  683.  
  684.          var2[0] = (double)1.0F;
  685.          var2[4] = (double)1.0F;
  686.          var2[8] = (double)1.0F;
  687.          luBacksubstitution(var7, var3, var2);
  688.          this.m00 = var2[0];
  689.          this.m01 = var2[1];
  690.          this.m02 = var2[2];
  691.          this.m10 = var2[3];
  692.          this.m11 = var2[4];
  693.          this.m12 = var2[5];
  694.          this.m20 = var2[6];
  695.          this.m21 = var2[7];
  696.          this.m22 = var2[8];
  697.       }
  698.    }
  699.  
  700.    static boolean luDecomposition(double[] var0, int[] var1) {
  701.       double[] var2 = new double[3];
  702.       int var5 = 0;
  703.       int var6 = 0;
  704.  
  705.       double var7;
  706.       for(int var3 = 3; var3-- != 0; var2[var6++] = (double)1.0F / var7) {
  707.          var7 = (double)0.0F;
  708.          int var4 = 3;
  709.  
  710.          while(var4-- != 0) {
  711.             double var9 = var0[var5++];
  712.             var9 = Math.abs(var9);
  713.             if (var9 > var7) {
  714.                var7 = var9;
  715.             }
  716.          }
  717.  
  718.          if (var7 == (double)0.0F) {
  719.             return false;
  720.          }
  721.       }
  722.  
  723.       byte var18 = 0;
  724.  
  725.       for(int var17 = 0; var17 < 3; ++var17) {
  726.          for(int var19 = 0; var19 < var17; ++var19) {
  727.             int var8 = var18 + 3 * var19 + var17;
  728.             double var11 = var0[var8];
  729.             int var23 = var19;
  730.             int var29 = var18 + 3 * var19;
  731.  
  732.             for(int var10 = var18 + var17; var23-- != 0; var10 += 3) {
  733.                var11 -= var0[var29] * var0[var10];
  734.                ++var29;
  735.             }
  736.  
  737.             var0[var8] = var11;
  738.          }
  739.  
  740.          double var13 = (double)0.0F;
  741.          var6 = -1;
  742.  
  743.          for(int var20 = var17; var20 < 3; ++var20) {
  744.             int var26 = var18 + 3 * var20 + var17;
  745.             double var34 = var0[var26];
  746.             int var24 = var17;
  747.             int var30 = var18 + 3 * var20;
  748.  
  749.             for(int var32 = var18 + var17; var24-- != 0; var32 += 3) {
  750.                var34 -= var0[var30] * var0[var32];
  751.                ++var30;
  752.             }
  753.  
  754.             var0[var26] = var34;
  755.             double var15;
  756.             if ((var15 = var2[var20] * Math.abs(var34)) >= var13) {
  757.                var13 = var15;
  758.                var6 = var20;
  759.             }
  760.          }
  761.  
  762.          if (var6 < 0) {
  763.             throw new RuntimeException(VecMathI18N.getString("Matrix3d13"));
  764.          }
  765.  
  766.          if (var17 != var6) {
  767.             int var25 = 3;
  768.             int var31 = var18 + 3 * var6;
  769.  
  770.             double var35;
  771.             for(int var33 = var18 + 3 * var17; var25-- != 0; var0[var33++] = var35) {
  772.                var35 = var0[var31];
  773.                var0[var31++] = var0[var33];
  774.             }
  775.  
  776.             var2[var6] = var2[var17];
  777.          }
  778.  
  779.          var1[var17] = var6;
  780.          if (var0[var18 + 3 * var17 + var17] == (double)0.0F) {
  781.             return false;
  782.          }
  783.  
  784.          if (var17 != 2) {
  785.             double var36 = (double)1.0F / var0[var18 + 3 * var17 + var17];
  786.             int var27 = var18 + 3 * (var17 + 1) + var17;
  787.  
  788.             for(int var21 = 2 - var17; var21-- != 0; var27 += 3) {
  789.                var0[var27] *= var36;
  790.             }
  791.          }
  792.       }
  793.  
  794.       return true;
  795.    }
  796.  
  797.    static void luBacksubstitution(double[] var0, int[] var1, double[] var2) {
  798.       byte var8 = 0;
  799.  
  800.       for(int var7 = 0; var7 < 3; ++var7) {
  801.          int var9 = var7;
  802.          int var4 = -1;
  803.  
  804.          for(int var3 = 0; var3 < 3; ++var3) {
  805.             int var5 = var1[var8 + var3];
  806.             double var11 = var2[var9 + 3 * var5];
  807.             var2[var9 + 3 * var5] = var2[var9 + 3 * var3];
  808.             if (var4 >= 0) {
  809.                int var10 = var3 * 3;
  810.  
  811.                for(int var6 = var4; var6 <= var3 - 1; ++var6) {
  812.                   var11 -= var0[var10 + var6] * var2[var9 + 3 * var6];
  813.                }
  814.             } else if (var11 != (double)0.0F) {
  815.                var4 = var3;
  816.             }
  817.  
  818.             var2[var9 + 3 * var3] = var11;
  819.          }
  820.  
  821.          int var13 = 6;
  822.          var2[var9 + 6] /= var0[var13 + 2];
  823.          var13 -= 3;
  824.          var2[var9 + 3] = (var2[var9 + 3] - var0[var13 + 2] * var2[var9 + 6]) / var0[var13 + 1];
  825.          var13 -= 3;
  826.          var2[var9 + 0] = (var2[var9 + 0] - var0[var13 + 1] * var2[var9 + 3] - var0[var13 + 2] * var2[var9 + 6]) / var0[var13 + 0];
  827.       }
  828.  
  829.    }
  830.  
  831.    public final double determinant() {
  832.       double var1 = this.m00 * (this.m11 * this.m22 - this.m12 * this.m21) + this.m01 * (this.m12 * this.m20 - this.m10 * this.m22) + this.m02 * (this.m10 * this.m21 - this.m11 * this.m20);
  833.       return var1;
  834.    }
  835.  
  836.    public final void set(double var1) {
  837.       this.m00 = var1;
  838.       this.m01 = (double)0.0F;
  839.       this.m02 = (double)0.0F;
  840.       this.m10 = (double)0.0F;
  841.       this.m11 = var1;
  842.       this.m12 = (double)0.0F;
  843.       this.m20 = (double)0.0F;
  844.       this.m21 = (double)0.0F;
  845.       this.m22 = var1;
  846.    }
  847.  
  848.    public final void rotX(double var1) {
  849.       double var3 = Math.sin(var1);
  850.       double var5 = Math.cos(var1);
  851.       this.m00 = (double)1.0F;
  852.       this.m01 = (double)0.0F;
  853.       this.m02 = (double)0.0F;
  854.       this.m10 = (double)0.0F;
  855.       this.m11 = var5;
  856.       this.m12 = -var3;
  857.       this.m20 = (double)0.0F;
  858.       this.m21 = var3;
  859.       this.m22 = var5;
  860.    }
  861.  
  862.    public final void rotY(double var1) {
  863.       double var3 = Math.sin(var1);
  864.       double var5 = Math.cos(var1);
  865.       this.m00 = var5;
  866.       this.m01 = (double)0.0F;
  867.       this.m02 = var3;
  868.       this.m10 = (double)0.0F;
  869.       this.m11 = (double)1.0F;
  870.       this.m12 = (double)0.0F;
  871.       this.m20 = -var3;
  872.       this.m21 = (double)0.0F;
  873.       this.m22 = var5;
  874.    }
  875.  
  876.    public final void rotZ(double var1) {
  877.       double var3 = Math.sin(var1);
  878.       double var5 = Math.cos(var1);
  879.       this.m00 = var5;
  880.       this.m01 = -var3;
  881.       this.m02 = (double)0.0F;
  882.       this.m10 = var3;
  883.       this.m11 = var5;
  884.       this.m12 = (double)0.0F;
  885.       this.m20 = (double)0.0F;
  886.       this.m21 = (double)0.0F;
  887.       this.m22 = (double)1.0F;
  888.    }
  889.  
  890.    public final void mul(double var1) {
  891.       this.m00 *= var1;
  892.       this.m01 *= var1;
  893.       this.m02 *= var1;
  894.       this.m10 *= var1;
  895.       this.m11 *= var1;
  896.       this.m12 *= var1;
  897.       this.m20 *= var1;
  898.       this.m21 *= var1;
  899.       this.m22 *= var1;
  900.    }
  901.  
  902.    public final void mul(double var1, Matrix3d var3) {
  903.       this.m00 = var1 * var3.m00;
  904.       this.m01 = var1 * var3.m01;
  905.       this.m02 = var1 * var3.m02;
  906.       this.m10 = var1 * var3.m10;
  907.       this.m11 = var1 * var3.m11;
  908.       this.m12 = var1 * var3.m12;
  909.       this.m20 = var1 * var3.m20;
  910.       this.m21 = var1 * var3.m21;
  911.       this.m22 = var1 * var3.m22;
  912.    }
  913.  
  914.    public final void mul(Matrix3d var1) {
  915.       double var2 = this.m00 * var1.m00 + this.m01 * var1.m10 + this.m02 * var1.m20;
  916.       double var4 = this.m00 * var1.m01 + this.m01 * var1.m11 + this.m02 * var1.m21;
  917.       double var6 = this.m00 * var1.m02 + this.m01 * var1.m12 + this.m02 * var1.m22;
  918.       double var8 = this.m10 * var1.m00 + this.m11 * var1.m10 + this.m12 * var1.m20;
  919.       double var10 = this.m10 * var1.m01 + this.m11 * var1.m11 + this.m12 * var1.m21;
  920.       double var12 = this.m10 * var1.m02 + this.m11 * var1.m12 + this.m12 * var1.m22;
  921.       double var14 = this.m20 * var1.m00 + this.m21 * var1.m10 + this.m22 * var1.m20;
  922.       double var16 = this.m20 * var1.m01 + this.m21 * var1.m11 + this.m22 * var1.m21;
  923.       double var18 = this.m20 * var1.m02 + this.m21 * var1.m12 + this.m22 * var1.m22;
  924.       this.m00 = var2;
  925.       this.m01 = var4;
  926.       this.m02 = var6;
  927.       this.m10 = var8;
  928.       this.m11 = var10;
  929.       this.m12 = var12;
  930.       this.m20 = var14;
  931.       this.m21 = var16;
  932.       this.m22 = var18;
  933.    }
  934.  
  935.    public final void mul(Matrix3d var1, Matrix3d var2) {
  936.       if (this != var1 && this != var2) {
  937.          this.m00 = var1.m00 * var2.m00 + var1.m01 * var2.m10 + var1.m02 * var2.m20;
  938.          this.m01 = var1.m00 * var2.m01 + var1.m01 * var2.m11 + var1.m02 * var2.m21;
  939.          this.m02 = var1.m00 * var2.m02 + var1.m01 * var2.m12 + var1.m02 * var2.m22;
  940.          this.m10 = var1.m10 * var2.m00 + var1.m11 * var2.m10 + var1.m12 * var2.m20;
  941.          this.m11 = var1.m10 * var2.m01 + var1.m11 * var2.m11 + var1.m12 * var2.m21;
  942.          this.m12 = var1.m10 * var2.m02 + var1.m11 * var2.m12 + var1.m12 * var2.m22;
  943.          this.m20 = var1.m20 * var2.m00 + var1.m21 * var2.m10 + var1.m22 * var2.m20;
  944.          this.m21 = var1.m20 * var2.m01 + var1.m21 * var2.m11 + var1.m22 * var2.m21;
  945.          this.m22 = var1.m20 * var2.m02 + var1.m21 * var2.m12 + var1.m22 * var2.m22;
  946.       } else {
  947.          double var3 = var1.m00 * var2.m00 + var1.m01 * var2.m10 + var1.m02 * var2.m20;
  948.          double var5 = var1.m00 * var2.m01 + var1.m01 * var2.m11 + var1.m02 * var2.m21;
  949.          double var7 = var1.m00 * var2.m02 + var1.m01 * var2.m12 + var1.m02 * var2.m22;
  950.          double var9 = var1.m10 * var2.m00 + var1.m11 * var2.m10 + var1.m12 * var2.m20;
  951.          double var11 = var1.m10 * var2.m01 + var1.m11 * var2.m11 + var1.m12 * var2.m21;
  952.          double var13 = var1.m10 * var2.m02 + var1.m11 * var2.m12 + var1.m12 * var2.m22;
  953.          double var15 = var1.m20 * var2.m00 + var1.m21 * var2.m10 + var1.m22 * var2.m20;
  954.          double var17 = var1.m20 * var2.m01 + var1.m21 * var2.m11 + var1.m22 * var2.m21;
  955.          double var19 = var1.m20 * var2.m02 + var1.m21 * var2.m12 + var1.m22 * var2.m22;
  956.          this.m00 = var3;
  957.          this.m01 = var5;
  958.          this.m02 = var7;
  959.          this.m10 = var9;
  960.          this.m11 = var11;
  961.          this.m12 = var13;
  962.          this.m20 = var15;
  963.          this.m21 = var17;
  964.          this.m22 = var19;
  965.       }
  966.  
  967.    }
  968.  
  969.    public final void mulNormalize(Matrix3d var1) {
  970.       double[] var2 = new double[9];
  971.       double[] var3 = new double[9];
  972.       double[] var4 = new double[3];
  973.       var2[0] = this.m00 * var1.m00 + this.m01 * var1.m10 + this.m02 * var1.m20;
  974.       var2[1] = this.m00 * var1.m01 + this.m01 * var1.m11 + this.m02 * var1.m21;
  975.       var2[2] = this.m00 * var1.m02 + this.m01 * var1.m12 + this.m02 * var1.m22;
  976.       var2[3] = this.m10 * var1.m00 + this.m11 * var1.m10 + this.m12 * var1.m20;
  977.       var2[4] = this.m10 * var1.m01 + this.m11 * var1.m11 + this.m12 * var1.m21;
  978.       var2[5] = this.m10 * var1.m02 + this.m11 * var1.m12 + this.m12 * var1.m22;
  979.       var2[6] = this.m20 * var1.m00 + this.m21 * var1.m10 + this.m22 * var1.m20;
  980.       var2[7] = this.m20 * var1.m01 + this.m21 * var1.m11 + this.m22 * var1.m21;
  981.       var2[8] = this.m20 * var1.m02 + this.m21 * var1.m12 + this.m22 * var1.m22;
  982.       compute_svd(var2, var4, var3);
  983.       this.m00 = var3[0];
  984.       this.m01 = var3[1];
  985.       this.m02 = var3[2];
  986.       this.m10 = var3[3];
  987.       this.m11 = var3[4];
  988.       this.m12 = var3[5];
  989.       this.m20 = var3[6];
  990.       this.m21 = var3[7];
  991.       this.m22 = var3[8];
  992.    }
  993.  
  994.    public final void mulNormalize(Matrix3d var1, Matrix3d var2) {
  995.       double[] var3 = new double[9];
  996.       double[] var4 = new double[9];
  997.       double[] var5 = new double[3];
  998.       var3[0] = var1.m00 * var2.m00 + var1.m01 * var2.m10 + var1.m02 * var2.m20;
  999.       var3[1] = var1.m00 * var2.m01 + var1.m01 * var2.m11 + var1.m02 * var2.m21;
  1000.       var3[2] = var1.m00 * var2.m02 + var1.m01 * var2.m12 + var1.m02 * var2.m22;
  1001.       var3[3] = var1.m10 * var2.m00 + var1.m11 * var2.m10 + var1.m12 * var2.m20;
  1002.       var3[4] = var1.m10 * var2.m01 + var1.m11 * var2.m11 + var1.m12 * var2.m21;
  1003.       var3[5] = var1.m10 * var2.m02 + var1.m11 * var2.m12 + var1.m12 * var2.m22;
  1004.       var3[6] = var1.m20 * var2.m00 + var1.m21 * var2.m10 + var1.m22 * var2.m20;
  1005.       var3[7] = var1.m20 * var2.m01 + var1.m21 * var2.m11 + var1.m22 * var2.m21;
  1006.       var3[8] = var1.m20 * var2.m02 + var1.m21 * var2.m12 + var1.m22 * var2.m22;
  1007.       compute_svd(var3, var5, var4);
  1008.       this.m00 = var4[0];
  1009.       this.m01 = var4[1];
  1010.       this.m02 = var4[2];
  1011.       this.m10 = var4[3];
  1012.       this.m11 = var4[4];
  1013.       this.m12 = var4[5];
  1014.       this.m20 = var4[6];
  1015.       this.m21 = var4[7];
  1016.       this.m22 = var4[8];
  1017.    }
  1018.  
  1019.    public final void mulTransposeBoth(Matrix3d var1, Matrix3d var2) {
  1020.       if (this != var1 && this != var2) {
  1021.          this.m00 = var1.m00 * var2.m00 + var1.m10 * var2.m01 + var1.m20 * var2.m02;
  1022.          this.m01 = var1.m00 * var2.m10 + var1.m10 * var2.m11 + var1.m20 * var2.m12;
  1023.          this.m02 = var1.m00 * var2.m20 + var1.m10 * var2.m21 + var1.m20 * var2.m22;
  1024.          this.m10 = var1.m01 * var2.m00 + var1.m11 * var2.m01 + var1.m21 * var2.m02;
  1025.          this.m11 = var1.m01 * var2.m10 + var1.m11 * var2.m11 + var1.m21 * var2.m12;
  1026.          this.m12 = var1.m01 * var2.m20 + var1.m11 * var2.m21 + var1.m21 * var2.m22;
  1027.          this.m20 = var1.m02 * var2.m00 + var1.m12 * var2.m01 + var1.m22 * var2.m02;
  1028.          this.m21 = var1.m02 * var2.m10 + var1.m12 * var2.m11 + var1.m22 * var2.m12;
  1029.          this.m22 = var1.m02 * var2.m20 + var1.m12 * var2.m21 + var1.m22 * var2.m22;
  1030.       } else {
  1031.          double var3 = var1.m00 * var2.m00 + var1.m10 * var2.m01 + var1.m20 * var2.m02;
  1032.          double var5 = var1.m00 * var2.m10 + var1.m10 * var2.m11 + var1.m20 * var2.m12;
  1033.          double var7 = var1.m00 * var2.m20 + var1.m10 * var2.m21 + var1.m20 * var2.m22;
  1034.          double var9 = var1.m01 * var2.m00 + var1.m11 * var2.m01 + var1.m21 * var2.m02;
  1035.          double var11 = var1.m01 * var2.m10 + var1.m11 * var2.m11 + var1.m21 * var2.m12;
  1036.          double var13 = var1.m01 * var2.m20 + var1.m11 * var2.m21 + var1.m21 * var2.m22;
  1037.          double var15 = var1.m02 * var2.m00 + var1.m12 * var2.m01 + var1.m22 * var2.m02;
  1038.          double var17 = var1.m02 * var2.m10 + var1.m12 * var2.m11 + var1.m22 * var2.m12;
  1039.          double var19 = var1.m02 * var2.m20 + var1.m12 * var2.m21 + var1.m22 * var2.m22;
  1040.          this.m00 = var3;
  1041.          this.m01 = var5;
  1042.          this.m02 = var7;
  1043.          this.m10 = var9;
  1044.          this.m11 = var11;
  1045.          this.m12 = var13;
  1046.          this.m20 = var15;
  1047.          this.m21 = var17;
  1048.          this.m22 = var19;
  1049.       }
  1050.  
  1051.    }
  1052.  
  1053.    public final void mulTransposeRight(Matrix3d var1, Matrix3d var2) {
  1054.       if (this != var1 && this != var2) {
  1055.          this.m00 = var1.m00 * var2.m00 + var1.m01 * var2.m01 + var1.m02 * var2.m02;
  1056.          this.m01 = var1.m00 * var2.m10 + var1.m01 * var2.m11 + var1.m02 * var2.m12;
  1057.          this.m02 = var1.m00 * var2.m20 + var1.m01 * var2.m21 + var1.m02 * var2.m22;
  1058.          this.m10 = var1.m10 * var2.m00 + var1.m11 * var2.m01 + var1.m12 * var2.m02;
  1059.          this.m11 = var1.m10 * var2.m10 + var1.m11 * var2.m11 + var1.m12 * var2.m12;
  1060.          this.m12 = var1.m10 * var2.m20 + var1.m11 * var2.m21 + var1.m12 * var2.m22;
  1061.          this.m20 = var1.m20 * var2.m00 + var1.m21 * var2.m01 + var1.m22 * var2.m02;
  1062.          this.m21 = var1.m20 * var2.m10 + var1.m21 * var2.m11 + var1.m22 * var2.m12;
  1063.          this.m22 = var1.m20 * var2.m20 + var1.m21 * var2.m21 + var1.m22 * var2.m22;
  1064.       } else {
  1065.          double var3 = var1.m00 * var2.m00 + var1.m01 * var2.m01 + var1.m02 * var2.m02;
  1066.          double var5 = var1.m00 * var2.m10 + var1.m01 * var2.m11 + var1.m02 * var2.m12;
  1067.          double var7 = var1.m00 * var2.m20 + var1.m01 * var2.m21 + var1.m02 * var2.m22;
  1068.          double var9 = var1.m10 * var2.m00 + var1.m11 * var2.m01 + var1.m12 * var2.m02;
  1069.          double var11 = var1.m10 * var2.m10 + var1.m11 * var2.m11 + var1.m12 * var2.m12;
  1070.          double var13 = var1.m10 * var2.m20 + var1.m11 * var2.m21 + var1.m12 * var2.m22;
  1071.          double var15 = var1.m20 * var2.m00 + var1.m21 * var2.m01 + var1.m22 * var2.m02;
  1072.          double var17 = var1.m20 * var2.m10 + var1.m21 * var2.m11 + var1.m22 * var2.m12;
  1073.          double var19 = var1.m20 * var2.m20 + var1.m21 * var2.m21 + var1.m22 * var2.m22;
  1074.          this.m00 = var3;
  1075.          this.m01 = var5;
  1076.          this.m02 = var7;
  1077.          this.m10 = var9;
  1078.          this.m11 = var11;
  1079.          this.m12 = var13;
  1080.          this.m20 = var15;
  1081.          this.m21 = var17;
  1082.          this.m22 = var19;
  1083.       }
  1084.  
  1085.    }
  1086.  
  1087.    public final void mulTransposeLeft(Matrix3d var1, Matrix3d var2) {
  1088.       if (this != var1 && this != var2) {
  1089.          this.m00 = var1.m00 * var2.m00 + var1.m10 * var2.m10 + var1.m20 * var2.m20;
  1090.          this.m01 = var1.m00 * var2.m01 + var1.m10 * var2.m11 + var1.m20 * var2.m21;
  1091.          this.m02 = var1.m00 * var2.m02 + var1.m10 * var2.m12 + var1.m20 * var2.m22;
  1092.          this.m10 = var1.m01 * var2.m00 + var1.m11 * var2.m10 + var1.m21 * var2.m20;
  1093.          this.m11 = var1.m01 * var2.m01 + var1.m11 * var2.m11 + var1.m21 * var2.m21;
  1094.          this.m12 = var1.m01 * var2.m02 + var1.m11 * var2.m12 + var1.m21 * var2.m22;
  1095.          this.m20 = var1.m02 * var2.m00 + var1.m12 * var2.m10 + var1.m22 * var2.m20;
  1096.          this.m21 = var1.m02 * var2.m01 + var1.m12 * var2.m11 + var1.m22 * var2.m21;
  1097.          this.m22 = var1.m02 * var2.m02 + var1.m12 * var2.m12 + var1.m22 * var2.m22;
  1098.       } else {
  1099.          double var3 = var1.m00 * var2.m00 + var1.m10 * var2.m10 + var1.m20 * var2.m20;
  1100.          double var5 = var1.m00 * var2.m01 + var1.m10 * var2.m11 + var1.m20 * var2.m21;
  1101.          double var7 = var1.m00 * var2.m02 + var1.m10 * var2.m12 + var1.m20 * var2.m22;
  1102.          double var9 = var1.m01 * var2.m00 + var1.m11 * var2.m10 + var1.m21 * var2.m20;
  1103.          double var11 = var1.m01 * var2.m01 + var1.m11 * var2.m11 + var1.m21 * var2.m21;
  1104.          double var13 = var1.m01 * var2.m02 + var1.m11 * var2.m12 + var1.m21 * var2.m22;
  1105.          double var15 = var1.m02 * var2.m00 + var1.m12 * var2.m10 + var1.m22 * var2.m20;
  1106.          double var17 = var1.m02 * var2.m01 + var1.m12 * var2.m11 + var1.m22 * var2.m21;
  1107.          double var19 = var1.m02 * var2.m02 + var1.m12 * var2.m12 + var1.m22 * var2.m22;
  1108.          this.m00 = var3;
  1109.          this.m01 = var5;
  1110.          this.m02 = var7;
  1111.          this.m10 = var9;
  1112.          this.m11 = var11;
  1113.          this.m12 = var13;
  1114.          this.m20 = var15;
  1115.          this.m21 = var17;
  1116.          this.m22 = var19;
  1117.       }
  1118.  
  1119.    }
  1120.  
  1121.    public final void normalize() {
  1122.       double[] var1 = new double[9];
  1123.       double[] var2 = new double[3];
  1124.       this.getScaleRotate(var2, var1);
  1125.       this.m00 = var1[0];
  1126.       this.m01 = var1[1];
  1127.       this.m02 = var1[2];
  1128.       this.m10 = var1[3];
  1129.       this.m11 = var1[4];
  1130.       this.m12 = var1[5];
  1131.       this.m20 = var1[6];
  1132.       this.m21 = var1[7];
  1133.       this.m22 = var1[8];
  1134.    }
  1135.  
  1136.    public final void normalize(Matrix3d var1) {
  1137.       double[] var2 = new double[9];
  1138.       double[] var3 = new double[9];
  1139.       double[] var4 = new double[3];
  1140.       var2[0] = var1.m00;
  1141.       var2[1] = var1.m01;
  1142.       var2[2] = var1.m02;
  1143.       var2[3] = var1.m10;
  1144.       var2[4] = var1.m11;
  1145.       var2[5] = var1.m12;
  1146.       var2[6] = var1.m20;
  1147.       var2[7] = var1.m21;
  1148.       var2[8] = var1.m22;
  1149.       compute_svd(var2, var4, var3);
  1150.       this.m00 = var3[0];
  1151.       this.m01 = var3[1];
  1152.       this.m02 = var3[2];
  1153.       this.m10 = var3[3];
  1154.       this.m11 = var3[4];
  1155.       this.m12 = var3[5];
  1156.       this.m20 = var3[6];
  1157.       this.m21 = var3[7];
  1158.       this.m22 = var3[8];
  1159.    }
  1160.  
  1161.    public final void normalizeCP() {
  1162.       double var1 = (double)1.0F / Math.sqrt(this.m00 * this.m00 + this.m10 * this.m10 + this.m20 * this.m20);
  1163.       this.m00 *= var1;
  1164.       this.m10 *= var1;
  1165.       this.m20 *= var1;
  1166.       var1 = (double)1.0F / Math.sqrt(this.m01 * this.m01 + this.m11 * this.m11 + this.m21 * this.m21);
  1167.       this.m01 *= var1;
  1168.       this.m11 *= var1;
  1169.       this.m21 *= var1;
  1170.       this.m02 = this.m10 * this.m21 - this.m11 * this.m20;
  1171.       this.m12 = this.m01 * this.m20 - this.m00 * this.m21;
  1172.       this.m22 = this.m00 * this.m11 - this.m01 * this.m10;
  1173.    }
  1174.  
  1175.    public final void normalizeCP(Matrix3d var1) {
  1176.       double var2 = (double)1.0F / Math.sqrt(var1.m00 * var1.m00 + var1.m10 * var1.m10 + var1.m20 * var1.m20);
  1177.       this.m00 = var1.m00 * var2;
  1178.       this.m10 = var1.m10 * var2;
  1179.       this.m20 = var1.m20 * var2;
  1180.       var2 = (double)1.0F / Math.sqrt(var1.m01 * var1.m01 + var1.m11 * var1.m11 + var1.m21 * var1.m21);
  1181.       this.m01 = var1.m01 * var2;
  1182.       this.m11 = var1.m11 * var2;
  1183.       this.m21 = var1.m21 * var2;
  1184.       this.m02 = this.m10 * this.m21 - this.m11 * this.m20;
  1185.       this.m12 = this.m01 * this.m20 - this.m00 * this.m21;
  1186.       this.m22 = this.m00 * this.m11 - this.m01 * this.m10;
  1187.    }
  1188.  
  1189.    public boolean equals(Matrix3d var1) {
  1190.       try {
  1191.          return this.m00 == var1.m00 && this.m01 == var1.m01 && this.m02 == var1.m02 && this.m10 == var1.m10 && this.m11 == var1.m11 && this.m12 == var1.m12 && this.m20 == var1.m20 && this.m21 == var1.m21 && this.m22 == var1.m22;
  1192.       } catch (NullPointerException var3) {
  1193.          return false;
  1194.       }
  1195.    }
  1196.  
  1197.    public boolean equals(Object var1) {
  1198.       try {
  1199.          Matrix3d var2 = (Matrix3d)var1;
  1200.          return this.m00 == var2.m00 && this.m01 == var2.m01 && this.m02 == var2.m02 && this.m10 == var2.m10 && this.m11 == var2.m11 && this.m12 == var2.m12 && this.m20 == var2.m20 && this.m21 == var2.m21 && this.m22 == var2.m22;
  1201.       } catch (ClassCastException var4) {
  1202.          return false;
  1203.       } catch (NullPointerException var5) {
  1204.          return false;
  1205.       }
  1206.    }
  1207.  
  1208.    public boolean epsilonEquals(Matrix3d var1, double var2) {
  1209.       double var4 = this.m00 - var1.m00;
  1210.       if ((var4 < (double)0.0F ? -var4 : var4) > var2) {
  1211.          return false;
  1212.       } else {
  1213.          var4 = this.m01 - var1.m01;
  1214.          if ((var4 < (double)0.0F ? -var4 : var4) > var2) {
  1215.             return false;
  1216.          } else {
  1217.             var4 = this.m02 - var1.m02;
  1218.             if ((var4 < (double)0.0F ? -var4 : var4) > var2) {
  1219.                return false;
  1220.             } else {
  1221.                var4 = this.m10 - var1.m10;
  1222.                if ((var4 < (double)0.0F ? -var4 : var4) > var2) {
  1223.                   return false;
  1224.                } else {
  1225.                   var4 = this.m11 - var1.m11;
  1226.                   if ((var4 < (double)0.0F ? -var4 : var4) > var2) {
  1227.                      return false;
  1228.                   } else {
  1229.                      var4 = this.m12 - var1.m12;
  1230.                      if ((var4 < (double)0.0F ? -var4 : var4) > var2) {
  1231.                         return false;
  1232.                      } else {
  1233.                         var4 = this.m20 - var1.m20;
  1234.                         if ((var4 < (double)0.0F ? -var4 : var4) > var2) {
  1235.                            return false;
  1236.                         } else {
  1237.                            var4 = this.m21 - var1.m21;
  1238.                            if ((var4 < (double)0.0F ? -var4 : var4) > var2) {
  1239.                               return false;
  1240.                            } else {
  1241.                               var4 = this.m22 - var1.m22;
  1242.                               return !((var4 < (double)0.0F ? -var4 : var4) > var2);
  1243.                            }
  1244.                         }
  1245.                      }
  1246.                   }
  1247.                }
  1248.             }
  1249.          }
  1250.       }
  1251.    }
  1252.  
  1253.    public int hashCode() {
  1254.       long var1 = 1L;
  1255.       var1 = 31L * var1 + Double.doubleToLongBits(this.m00);
  1256.       var1 = 31L * var1 + Double.doubleToLongBits(this.m01);
  1257.       var1 = 31L * var1 + Double.doubleToLongBits(this.m02);
  1258.       var1 = 31L * var1 + Double.doubleToLongBits(this.m10);
  1259.       var1 = 31L * var1 + Double.doubleToLongBits(this.m11);
  1260.       var1 = 31L * var1 + Double.doubleToLongBits(this.m12);
  1261.       var1 = 31L * var1 + Double.doubleToLongBits(this.m20);
  1262.       var1 = 31L * var1 + Double.doubleToLongBits(this.m21);
  1263.       var1 = 31L * var1 + Double.doubleToLongBits(this.m22);
  1264.       return (int)(var1 ^ var1 >> 32);
  1265.    }
  1266.  
  1267.    public final void setZero() {
  1268.       this.m00 = (double)0.0F;
  1269.       this.m01 = (double)0.0F;
  1270.       this.m02 = (double)0.0F;
  1271.       this.m10 = (double)0.0F;
  1272.       this.m11 = (double)0.0F;
  1273.       this.m12 = (double)0.0F;
  1274.       this.m20 = (double)0.0F;
  1275.       this.m21 = (double)0.0F;
  1276.       this.m22 = (double)0.0F;
  1277.    }
  1278.  
  1279.    public final void negate() {
  1280.       this.m00 = -this.m00;
  1281.       this.m01 = -this.m01;
  1282.       this.m02 = -this.m02;
  1283.       this.m10 = -this.m10;
  1284.       this.m11 = -this.m11;
  1285.       this.m12 = -this.m12;
  1286.       this.m20 = -this.m20;
  1287.       this.m21 = -this.m21;
  1288.       this.m22 = -this.m22;
  1289.    }
  1290.  
  1291.    public final void negate(Matrix3d var1) {
  1292.       this.m00 = -var1.m00;
  1293.       this.m01 = -var1.m01;
  1294.       this.m02 = -var1.m02;
  1295.       this.m10 = -var1.m10;
  1296.       this.m11 = -var1.m11;
  1297.       this.m12 = -var1.m12;
  1298.       this.m20 = -var1.m20;
  1299.       this.m21 = -var1.m21;
  1300.       this.m22 = -var1.m22;
  1301.    }
  1302.  
  1303.    public final void transform(Tuple3d var1) {
  1304.       double var2 = this.m00 * var1.x + this.m01 * var1.y + this.m02 * var1.z;
  1305.       double var4 = this.m10 * var1.x + this.m11 * var1.y + this.m12 * var1.z;
  1306.       double var6 = this.m20 * var1.x + this.m21 * var1.y + this.m22 * var1.z;
  1307.       var1.set(var2, var4, var6);
  1308.    }
  1309.  
  1310.    public final void transform(Tuple3d var1, Tuple3d var2) {
  1311.       double var3 = this.m00 * var1.x + this.m01 * var1.y + this.m02 * var1.z;
  1312.       double var5 = this.m10 * var1.x + this.m11 * var1.y + this.m12 * var1.z;
  1313.       var2.z = this.m20 * var1.x + this.m21 * var1.y + this.m22 * var1.z;
  1314.       var2.x = var3;
  1315.       var2.y = var5;
  1316.    }
  1317.  
  1318.    final void getScaleRotate(double[] var1, double[] var2) {
  1319.       double[] var3 = new double[]{this.m00, this.m01, this.m02, this.m10, this.m11, this.m12, this.m20, this.m21, this.m22};
  1320.       compute_svd(var3, var1, var2);
  1321.    }
  1322.  
  1323.    static void compute_svd(double[] var0, double[] var1, double[] var2) {
  1324.       double[] var9 = new double[9];
  1325.       double[] var10 = new double[9];
  1326.       double[] var11 = new double[9];
  1327.       double[] var12 = new double[9];
  1328.       double[] var15 = new double[9];
  1329.       double[] var16 = new double[3];
  1330.       double[] var17 = new double[3];
  1331.       int var19 = 0;
  1332.  
  1333.       for(int var3 = 0; var3 < 9; ++var3) {
  1334.          var15[var3] = var0[var3];
  1335.       }
  1336.  
  1337.       if (var0[3] * var0[3] < 1.110223024E-16) {
  1338.          var9[0] = (double)1.0F;
  1339.          var9[1] = (double)0.0F;
  1340.          var9[2] = (double)0.0F;
  1341.          var9[3] = (double)0.0F;
  1342.          var9[4] = (double)1.0F;
  1343.          var9[5] = (double)0.0F;
  1344.          var9[6] = (double)0.0F;
  1345.          var9[7] = (double)0.0F;
  1346.          var9[8] = (double)1.0F;
  1347.       } else if (var0[0] * var0[0] < 1.110223024E-16) {
  1348.          var11[0] = var0[0];
  1349.          var11[1] = var0[1];
  1350.          var11[2] = var0[2];
  1351.          var0[0] = var0[3];
  1352.          var0[1] = var0[4];
  1353.          var0[2] = var0[5];
  1354.          var0[3] = -var11[0];
  1355.          var0[4] = -var11[1];
  1356.          var0[5] = -var11[2];
  1357.          var9[0] = (double)0.0F;
  1358.          var9[1] = (double)1.0F;
  1359.          var9[2] = (double)0.0F;
  1360.          var9[3] = (double)-1.0F;
  1361.          var9[4] = (double)0.0F;
  1362.          var9[5] = (double)0.0F;
  1363.          var9[6] = (double)0.0F;
  1364.          var9[7] = (double)0.0F;
  1365.          var9[8] = (double)1.0F;
  1366.       } else {
  1367.          double var5 = (double)1.0F / Math.sqrt(var0[0] * var0[0] + var0[3] * var0[3]);
  1368.          double var24 = var0[0] * var5;
  1369.          double var32 = var0[3] * var5;
  1370.          var11[0] = var24 * var0[0] + var32 * var0[3];
  1371.          var11[1] = var24 * var0[1] + var32 * var0[4];
  1372.          var11[2] = var24 * var0[2] + var32 * var0[5];
  1373.          var0[3] = -var32 * var0[0] + var24 * var0[3];
  1374.          var0[4] = -var32 * var0[1] + var24 * var0[4];
  1375.          var0[5] = -var32 * var0[2] + var24 * var0[5];
  1376.          var0[0] = var11[0];
  1377.          var0[1] = var11[1];
  1378.          var0[2] = var11[2];
  1379.          var9[0] = var24;
  1380.          var9[1] = var32;
  1381.          var9[2] = (double)0.0F;
  1382.          var9[3] = -var32;
  1383.          var9[4] = var24;
  1384.          var9[5] = (double)0.0F;
  1385.          var9[6] = (double)0.0F;
  1386.          var9[7] = (double)0.0F;
  1387.          var9[8] = (double)1.0F;
  1388.       }
  1389.  
  1390.       if (!(var0[6] * var0[6] < 1.110223024E-16)) {
  1391.          if (var0[0] * var0[0] < 1.110223024E-16) {
  1392.             var11[0] = var0[0];
  1393.             var11[1] = var0[1];
  1394.             var11[2] = var0[2];
  1395.             var0[0] = var0[6];
  1396.             var0[1] = var0[7];
  1397.             var0[2] = var0[8];
  1398.             var0[6] = -var11[0];
  1399.             var0[7] = -var11[1];
  1400.             var0[8] = -var11[2];
  1401.             var11[0] = var9[0];
  1402.             var11[1] = var9[1];
  1403.             var11[2] = var9[2];
  1404.             var9[0] = var9[6];
  1405.             var9[1] = var9[7];
  1406.             var9[2] = var9[8];
  1407.             var9[6] = -var11[0];
  1408.             var9[7] = -var11[1];
  1409.             var9[8] = -var11[2];
  1410.          } else {
  1411.             double var48 = (double)1.0F / Math.sqrt(var0[0] * var0[0] + var0[6] * var0[6]);
  1412.             double var26 = var0[0] * var48;
  1413.             double var34 = var0[6] * var48;
  1414.             var11[0] = var26 * var0[0] + var34 * var0[6];
  1415.             var11[1] = var26 * var0[1] + var34 * var0[7];
  1416.             var11[2] = var26 * var0[2] + var34 * var0[8];
  1417.             var0[6] = -var34 * var0[0] + var26 * var0[6];
  1418.             var0[7] = -var34 * var0[1] + var26 * var0[7];
  1419.             var0[8] = -var34 * var0[2] + var26 * var0[8];
  1420.             var0[0] = var11[0];
  1421.             var0[1] = var11[1];
  1422.             var0[2] = var11[2];
  1423.             var11[0] = var26 * var9[0];
  1424.             var11[1] = var26 * var9[1];
  1425.             var9[2] = var34;
  1426.             var11[6] = -var9[0] * var34;
  1427.             var11[7] = -var9[1] * var34;
  1428.             var9[8] = var26;
  1429.             var9[0] = var11[0];
  1430.             var9[1] = var11[1];
  1431.             var9[6] = var11[6];
  1432.             var9[7] = var11[7];
  1433.          }
  1434.       }
  1435.  
  1436.       if (var0[2] * var0[2] < 1.110223024E-16) {
  1437.          var10[0] = (double)1.0F;
  1438.          var10[1] = (double)0.0F;
  1439.          var10[2] = (double)0.0F;
  1440.          var10[3] = (double)0.0F;
  1441.          var10[4] = (double)1.0F;
  1442.          var10[5] = (double)0.0F;
  1443.          var10[6] = (double)0.0F;
  1444.          var10[7] = (double)0.0F;
  1445.          var10[8] = (double)1.0F;
  1446.       } else if (var0[1] * var0[1] < 1.110223024E-16) {
  1447.          var11[2] = var0[2];
  1448.          var11[5] = var0[5];
  1449.          var11[8] = var0[8];
  1450.          var0[2] = -var0[1];
  1451.          var0[5] = -var0[4];
  1452.          var0[8] = -var0[7];
  1453.          var0[1] = var11[2];
  1454.          var0[4] = var11[5];
  1455.          var0[7] = var11[8];
  1456.          var10[0] = (double)1.0F;
  1457.          var10[1] = (double)0.0F;
  1458.          var10[2] = (double)0.0F;
  1459.          var10[3] = (double)0.0F;
  1460.          var10[4] = (double)0.0F;
  1461.          var10[5] = (double)-1.0F;
  1462.          var10[6] = (double)0.0F;
  1463.          var10[7] = (double)1.0F;
  1464.          var10[8] = (double)0.0F;
  1465.       } else {
  1466.          double var49 = (double)1.0F / Math.sqrt(var0[1] * var0[1] + var0[2] * var0[2]);
  1467.          double var28 = var0[1] * var49;
  1468.          double var36 = var0[2] * var49;
  1469.          var11[1] = var28 * var0[1] + var36 * var0[2];
  1470.          var0[2] = -var36 * var0[1] + var28 * var0[2];
  1471.          var0[1] = var11[1];
  1472.          var11[4] = var28 * var0[4] + var36 * var0[5];
  1473.          var0[5] = -var36 * var0[4] + var28 * var0[5];
  1474.          var0[4] = var11[4];
  1475.          var11[7] = var28 * var0[7] + var36 * var0[8];
  1476.          var0[8] = -var36 * var0[7] + var28 * var0[8];
  1477.          var0[7] = var11[7];
  1478.          var10[0] = (double)1.0F;
  1479.          var10[1] = (double)0.0F;
  1480.          var10[2] = (double)0.0F;
  1481.          var10[3] = (double)0.0F;
  1482.          var10[4] = var28;
  1483.          var10[5] = -var36;
  1484.          var10[6] = (double)0.0F;
  1485.          var10[7] = var36;
  1486.          var10[8] = var28;
  1487.       }
  1488.  
  1489.       if (!(var0[7] * var0[7] < 1.110223024E-16)) {
  1490.          if (var0[4] * var0[4] < 1.110223024E-16) {
  1491.             var11[3] = var0[3];
  1492.             var11[4] = var0[4];
  1493.             var11[5] = var0[5];
  1494.             var0[3] = var0[6];
  1495.             var0[4] = var0[7];
  1496.             var0[5] = var0[8];
  1497.             var0[6] = -var11[3];
  1498.             var0[7] = -var11[4];
  1499.             var0[8] = -var11[5];
  1500.             var11[3] = var9[3];
  1501.             var11[4] = var9[4];
  1502.             var11[5] = var9[5];
  1503.             var9[3] = var9[6];
  1504.             var9[4] = var9[7];
  1505.             var9[5] = var9[8];
  1506.             var9[6] = -var11[3];
  1507.             var9[7] = -var11[4];
  1508.             var9[8] = -var11[5];
  1509.          } else {
  1510.             double var50 = (double)1.0F / Math.sqrt(var0[4] * var0[4] + var0[7] * var0[7]);
  1511.             double var30 = var0[4] * var50;
  1512.             double var38 = var0[7] * var50;
  1513.             var11[3] = var30 * var0[3] + var38 * var0[6];
  1514.             var0[6] = -var38 * var0[3] + var30 * var0[6];
  1515.             var0[3] = var11[3];
  1516.             var11[4] = var30 * var0[4] + var38 * var0[7];
  1517.             var0[7] = -var38 * var0[4] + var30 * var0[7];
  1518.             var0[4] = var11[4];
  1519.             var11[5] = var30 * var0[5] + var38 * var0[8];
  1520.             var0[8] = -var38 * var0[5] + var30 * var0[8];
  1521.             var0[5] = var11[5];
  1522.             var11[3] = var30 * var9[3] + var38 * var9[6];
  1523.             var9[6] = -var38 * var9[3] + var30 * var9[6];
  1524.             var9[3] = var11[3];
  1525.             var11[4] = var30 * var9[4] + var38 * var9[7];
  1526.             var9[7] = -var38 * var9[4] + var30 * var9[7];
  1527.             var9[4] = var11[4];
  1528.             var11[5] = var30 * var9[5] + var38 * var9[8];
  1529.             var9[8] = -var38 * var9[5] + var30 * var9[8];
  1530.             var9[5] = var11[5];
  1531.          }
  1532.       }
  1533.  
  1534.       var12[0] = var0[0];
  1535.       var12[1] = var0[4];
  1536.       var12[2] = var0[8];
  1537.       var16[0] = var0[1];
  1538.       var16[1] = var0[5];
  1539.       if (!(var16[0] * var16[0] < 1.110223024E-16) || !(var16[1] * var16[1] < 1.110223024E-16)) {
  1540.          compute_qr(var12, var16, var9, var10);
  1541.       }
  1542.  
  1543.       var17[0] = var12[0];
  1544.       var17[1] = var12[1];
  1545.       var17[2] = var12[2];
  1546.       if (almostEqual(Math.abs(var17[0]), (double)1.0F) && almostEqual(Math.abs(var17[1]), (double)1.0F) && almostEqual(Math.abs(var17[2]), (double)1.0F)) {
  1547.          for(int var46 = 0; var46 < 3; ++var46) {
  1548.             if (var17[var46] < (double)0.0F) {
  1549.                ++var19;
  1550.             }
  1551.          }
  1552.  
  1553.          if (var19 == 0 || var19 == 2) {
  1554.             var1[0] = var1[1] = var1[2] = (double)1.0F;
  1555.  
  1556.             for(int var47 = 0; var47 < 9; ++var47) {
  1557.                var2[var47] = var15[var47];
  1558.             }
  1559.  
  1560.             return;
  1561.          }
  1562.       }
  1563.  
  1564.       transpose_mat(var9, var11);
  1565.       transpose_mat(var10, var12);
  1566.       svdReorder(var0, var11, var12, var17, var2, var1);
  1567.    }
  1568.  
  1569.    static void svdReorder(double[] var0, double[] var1, double[] var2, double[] var3, double[] var4, double[] var5) {
  1570.       int[] var6 = new int[3];
  1571.       int[] var7 = new int[3];
  1572.       double[] var13 = new double[3];
  1573.       double[] var14 = new double[9];
  1574.       if (var3[0] < (double)0.0F) {
  1575.          var3[0] = -var3[0];
  1576.          var2[0] = -var2[0];
  1577.          var2[1] = -var2[1];
  1578.          var2[2] = -var2[2];
  1579.       }
  1580.  
  1581.       if (var3[1] < (double)0.0F) {
  1582.          var3[1] = -var3[1];
  1583.          var2[3] = -var2[3];
  1584.          var2[4] = -var2[4];
  1585.          var2[5] = -var2[5];
  1586.       }
  1587.  
  1588.       if (var3[2] < (double)0.0F) {
  1589.          var3[2] = -var3[2];
  1590.          var2[6] = -var2[6];
  1591.          var2[7] = -var2[7];
  1592.          var2[8] = -var2[8];
  1593.       }
  1594.  
  1595.       mat_mul(var1, var2, var14);
  1596.       if (almostEqual(Math.abs(var3[0]), Math.abs(var3[1])) && almostEqual(Math.abs(var3[1]), Math.abs(var3[2]))) {
  1597.          for(int var12 = 0; var12 < 9; ++var12) {
  1598.             var4[var12] = var14[var12];
  1599.          }
  1600.  
  1601.          for(int var26 = 0; var26 < 3; ++var26) {
  1602.             var5[var26] = var3[var26];
  1603.          }
  1604.       } else {
  1605.          if (var3[0] > var3[1]) {
  1606.             if (var3[0] > var3[2]) {
  1607.                if (var3[2] > var3[1]) {
  1608.                   var6[0] = 0;
  1609.                   var6[1] = 2;
  1610.                   var6[2] = 1;
  1611.                } else {
  1612.                   var6[0] = 0;
  1613.                   var6[1] = 1;
  1614.                   var6[2] = 2;
  1615.                }
  1616.             } else {
  1617.                var6[0] = 2;
  1618.                var6[1] = 0;
  1619.                var6[2] = 1;
  1620.             }
  1621.          } else if (var3[1] > var3[2]) {
  1622.             if (var3[2] > var3[0]) {
  1623.                var6[0] = 1;
  1624.                var6[1] = 2;
  1625.                var6[2] = 0;
  1626.             } else {
  1627.                var6[0] = 1;
  1628.                var6[1] = 0;
  1629.                var6[2] = 2;
  1630.             }
  1631.          } else {
  1632.             var6[0] = 2;
  1633.             var6[1] = 1;
  1634.             var6[2] = 0;
  1635.          }
  1636.  
  1637.          var13[0] = var0[0] * var0[0] + var0[1] * var0[1] + var0[2] * var0[2];
  1638.          var13[1] = var0[3] * var0[3] + var0[4] * var0[4] + var0[5] * var0[5];
  1639.          var13[2] = var0[6] * var0[6] + var0[7] * var0[7] + var0[8] * var0[8];
  1640.          byte var8;
  1641.          byte var9;
  1642.          byte var10;
  1643.          if (var13[0] > var13[1]) {
  1644.             if (var13[0] > var13[2]) {
  1645.                if (var13[2] > var13[1]) {
  1646.                   var8 = 0;
  1647.                   var10 = 1;
  1648.                   var9 = 2;
  1649.                } else {
  1650.                   var8 = 0;
  1651.                   var9 = 1;
  1652.                   var10 = 2;
  1653.                }
  1654.             } else {
  1655.                var10 = 0;
  1656.                var8 = 1;
  1657.                var9 = 2;
  1658.             }
  1659.          } else if (var13[1] > var13[2]) {
  1660.             if (var13[2] > var13[0]) {
  1661.                var9 = 0;
  1662.                var10 = 1;
  1663.                var8 = 2;
  1664.             } else {
  1665.                var9 = 0;
  1666.                var8 = 1;
  1667.                var10 = 2;
  1668.             }
  1669.          } else {
  1670.             var10 = 0;
  1671.             var9 = 1;
  1672.             var8 = 2;
  1673.          }
  1674.  
  1675.          int var11 = var6[var8];
  1676.          var5[0] = var3[var11];
  1677.          var11 = var6[var9];
  1678.          var5[1] = var3[var11];
  1679.          var11 = var6[var10];
  1680.          var5[2] = var3[var11];
  1681.          var11 = var6[var8];
  1682.          var4[0] = var14[var11];
  1683.          var11 = var6[var8] + 3;
  1684.          var4[3] = var14[var11];
  1685.          var11 = var6[var8] + 6;
  1686.          var4[6] = var14[var11];
  1687.          var11 = var6[var9];
  1688.          var4[1] = var14[var11];
  1689.          var11 = var6[var9] + 3;
  1690.          var4[4] = var14[var11];
  1691.          var11 = var6[var9] + 6;
  1692.          var4[7] = var14[var11];
  1693.          var11 = var6[var10];
  1694.          var4[2] = var14[var11];
  1695.          var11 = var6[var10] + 3;
  1696.          var4[5] = var14[var11];
  1697.          var11 = var6[var10] + 6;
  1698.          var4[8] = var14[var11];
  1699.       }
  1700.  
  1701.    }
  1702.  
  1703.    static int compute_qr(double[] var0, double[] var1, double[] var2, double[] var3) {
  1704.       double[] var16 = new double[2];
  1705.       double[] var17 = new double[2];
  1706.       double[] var18 = new double[2];
  1707.       double[] var19 = new double[2];
  1708.       double[] var20 = new double[9];
  1709.       double var32 = (double)1.0F;
  1710.       double var34 = (double)-1.0F;
  1711.       boolean var7 = false;
  1712.       byte var36 = 1;
  1713.       if (Math.abs(var1[1]) < 4.89E-15 || Math.abs(var1[0]) < 4.89E-15) {
  1714.          var7 = true;
  1715.       }
  1716.  
  1717.       for(int var6 = 0; var6 < 10 && !var7; ++var6) {
  1718.          double var8 = compute_shift(var0[1], var1[1], var0[2]);
  1719.          double var25 = (Math.abs(var0[0]) - var8) * (d_sign(var32, var0[0]) + var8 / var0[0]);
  1720.          double var27 = var1[0];
  1721.          compute_rot(var25, var27, var19, var17, 0, var36);
  1722.          var25 = var17[0] * var0[0] + var19[0] * var1[0];
  1723.          var1[0] = var17[0] * var1[0] - var19[0] * var0[0];
  1724.          var27 = var19[0] * var0[1];
  1725.          var0[1] = var17[0] * var0[1];
  1726.          double var14 = compute_rot(var25, var27, var18, var16, 0, var36);
  1727.          var36 = 0;
  1728.          var0[0] = var14;
  1729.          var25 = var16[0] * var1[0] + var18[0] * var0[1];
  1730.          var0[1] = var16[0] * var0[1] - var18[0] * var1[0];
  1731.          var27 = var18[0] * var1[1];
  1732.          var1[1] = var16[0] * var1[1];
  1733.          var14 = compute_rot(var25, var27, var19, var17, 1, var36);
  1734.          var1[0] = var14;
  1735.          var25 = var17[1] * var0[1] + var19[1] * var1[1];
  1736.          var1[1] = var17[1] * var1[1] - var19[1] * var0[1];
  1737.          var27 = var19[1] * var0[2];
  1738.          var0[2] = var17[1] * var0[2];
  1739.          var14 = compute_rot(var25, var27, var18, var16, 1, var36);
  1740.          var0[1] = var14;
  1741.          var25 = var16[1] * var1[1] + var18[1] * var0[2];
  1742.          var0[2] = var16[1] * var0[2] - var18[1] * var1[1];
  1743.          var1[1] = var25;
  1744.          double var21 = var2[0];
  1745.          var2[0] = var16[0] * var21 + var18[0] * var2[3];
  1746.          var2[3] = -var18[0] * var21 + var16[0] * var2[3];
  1747.          var21 = var2[1];
  1748.          var2[1] = var16[0] * var21 + var18[0] * var2[4];
  1749.          var2[4] = -var18[0] * var21 + var16[0] * var2[4];
  1750.          var21 = var2[2];
  1751.          var2[2] = var16[0] * var21 + var18[0] * var2[5];
  1752.          var2[5] = -var18[0] * var21 + var16[0] * var2[5];
  1753.          var21 = var2[3];
  1754.          var2[3] = var16[1] * var21 + var18[1] * var2[6];
  1755.          var2[6] = -var18[1] * var21 + var16[1] * var2[6];
  1756.          var21 = var2[4];
  1757.          var2[4] = var16[1] * var21 + var18[1] * var2[7];
  1758.          var2[7] = -var18[1] * var21 + var16[1] * var2[7];
  1759.          var21 = var2[5];
  1760.          var2[5] = var16[1] * var21 + var18[1] * var2[8];
  1761.          var2[8] = -var18[1] * var21 + var16[1] * var2[8];
  1762.          double var23 = var3[0];
  1763.          var3[0] = var17[0] * var23 + var19[0] * var3[1];
  1764.          var3[1] = -var19[0] * var23 + var17[0] * var3[1];
  1765.          var23 = var3[3];
  1766.          var3[3] = var17[0] * var23 + var19[0] * var3[4];
  1767.          var3[4] = -var19[0] * var23 + var17[0] * var3[4];
  1768.          var23 = var3[6];
  1769.          var3[6] = var17[0] * var23 + var19[0] * var3[7];
  1770.          var3[7] = -var19[0] * var23 + var17[0] * var3[7];
  1771.          var23 = var3[1];
  1772.          var3[1] = var17[1] * var23 + var19[1] * var3[2];
  1773.          var3[2] = -var19[1] * var23 + var17[1] * var3[2];
  1774.          var23 = var3[4];
  1775.          var3[4] = var17[1] * var23 + var19[1] * var3[5];
  1776.          var3[5] = -var19[1] * var23 + var17[1] * var3[5];
  1777.          var23 = var3[7];
  1778.          var3[7] = var17[1] * var23 + var19[1] * var3[8];
  1779.          var3[8] = -var19[1] * var23 + var17[1] * var3[8];
  1780.          var20[0] = var0[0];
  1781.          var20[1] = var1[0];
  1782.          var20[2] = (double)0.0F;
  1783.          var20[3] = (double)0.0F;
  1784.          var20[4] = var0[1];
  1785.          var20[5] = var1[1];
  1786.          var20[6] = (double)0.0F;
  1787.          var20[7] = (double)0.0F;
  1788.          var20[8] = var0[2];
  1789.          if (Math.abs(var1[1]) < 4.89E-15 || Math.abs(var1[0]) < 4.89E-15) {
  1790.             var7 = true;
  1791.          }
  1792.       }
  1793.  
  1794.       if (Math.abs(var1[1]) < 4.89E-15) {
  1795.          compute_2X2(var0[0], var1[0], var0[1], var0, var18, var16, var19, var17, 0);
  1796.          double var44 = var2[0];
  1797.          var2[0] = var16[0] * var44 + var18[0] * var2[3];
  1798.          var2[3] = -var18[0] * var44 + var16[0] * var2[3];
  1799.          var44 = var2[1];
  1800.          var2[1] = var16[0] * var44 + var18[0] * var2[4];
  1801.          var2[4] = -var18[0] * var44 + var16[0] * var2[4];
  1802.          var44 = var2[2];
  1803.          var2[2] = var16[0] * var44 + var18[0] * var2[5];
  1804.          var2[5] = -var18[0] * var44 + var16[0] * var2[5];
  1805.          double var55 = var3[0];
  1806.          var3[0] = var17[0] * var55 + var19[0] * var3[1];
  1807.          var3[1] = -var19[0] * var55 + var17[0] * var3[1];
  1808.          var55 = var3[3];
  1809.          var3[3] = var17[0] * var55 + var19[0] * var3[4];
  1810.          var3[4] = -var19[0] * var55 + var17[0] * var3[4];
  1811.          var55 = var3[6];
  1812.          var3[6] = var17[0] * var55 + var19[0] * var3[7];
  1813.          var3[7] = -var19[0] * var55 + var17[0] * var3[7];
  1814.       } else {
  1815.          compute_2X2(var0[1], var1[1], var0[2], var0, var18, var16, var19, var17, 1);
  1816.          double var47 = var2[3];
  1817.          var2[3] = var16[0] * var47 + var18[0] * var2[6];
  1818.          var2[6] = -var18[0] * var47 + var16[0] * var2[6];
  1819.          var47 = var2[4];
  1820.          var2[4] = var16[0] * var47 + var18[0] * var2[7];
  1821.          var2[7] = -var18[0] * var47 + var16[0] * var2[7];
  1822.          var47 = var2[5];
  1823.          var2[5] = var16[0] * var47 + var18[0] * var2[8];
  1824.          var2[8] = -var18[0] * var47 + var16[0] * var2[8];
  1825.          double var58 = var3[1];
  1826.          var3[1] = var17[0] * var58 + var19[0] * var3[2];
  1827.          var3[2] = -var19[0] * var58 + var17[0] * var3[2];
  1828.          var58 = var3[4];
  1829.          var3[4] = var17[0] * var58 + var19[0] * var3[5];
  1830.          var3[5] = -var19[0] * var58 + var17[0] * var3[5];
  1831.          var58 = var3[7];
  1832.          var3[7] = var17[0] * var58 + var19[0] * var3[8];
  1833.          var3[8] = -var19[0] * var58 + var17[0] * var3[8];
  1834.       }
  1835.  
  1836.       return 0;
  1837.    }
  1838.  
  1839.    static double max(double var0, double var2) {
  1840.       return var0 > var2 ? var0 : var2;
  1841.    }
  1842.  
  1843.    static double min(double var0, double var2) {
  1844.       return var0 < var2 ? var0 : var2;
  1845.    }
  1846.  
  1847.    static double d_sign(double var0, double var2) {
  1848.       double var4 = var0 >= (double)0.0F ? var0 : -var0;
  1849.       return var2 >= (double)0.0F ? var4 : -var4;
  1850.    }
  1851.  
  1852.    static double compute_shift(double var0, double var2, double var4) {
  1853.       double var16 = Math.abs(var0);
  1854.       double var18 = Math.abs(var2);
  1855.       double var20 = Math.abs(var4);
  1856.       double var10 = min(var16, var20);
  1857.       double var12 = max(var16, var20);
  1858.       double var28;
  1859.       if (var10 == (double)0.0F) {
  1860.          var28 = (double)0.0F;
  1861.          if (var12 != (double)0.0F) {
  1862.             double var6 = min(var12, var18) / max(var12, var18);
  1863.          }
  1864.       } else if (var18 < var12) {
  1865.          double var22 = var10 / var12 + (double)1.0F;
  1866.          double var24 = (var12 - var10) / var12;
  1867.          double var30 = var18 / var12;
  1868.          double var26 = var30 * var30;
  1869.          double var14 = (double)2.0F / (Math.sqrt(var22 * var22 + var26) + Math.sqrt(var24 * var24 + var26));
  1870.          var28 = var10 * var14;
  1871.       } else {
  1872.          double var35 = var12 / var18;
  1873.          if (var35 == (double)0.0F) {
  1874.             var28 = var10 * var12 / var18;
  1875.          } else {
  1876.             double var33 = var10 / var12 + (double)1.0F;
  1877.             double var34 = (var12 - var10) / var12;
  1878.             double var31 = var33 * var35;
  1879.             double var8 = var34 * var35;
  1880.             double var32 = (double)1.0F / (Math.sqrt(var31 * var31 + (double)1.0F) + Math.sqrt(var8 * var8 + (double)1.0F));
  1881.             var28 = var10 * var32 * var35;
  1882.             var28 += var28;
  1883.          }
  1884.       }
  1885.  
  1886.       return var28;
  1887.    }
  1888.  
  1889.    static int compute_2X2(double var0, double var2, double var4, double[] var6, double[] var7, double[] var8, double[] var9, double[] var10, int var11) {
  1890.       double var12 = (double)2.0F;
  1891.       double var14 = (double)1.0F;
  1892.       double var65 = var6[0];
  1893.       double var63 = var6[1];
  1894.       double var55 = (double)0.0F;
  1895.       double var57 = (double)0.0F;
  1896.       double var59 = (double)0.0F;
  1897.       double var61 = (double)0.0F;
  1898.       double var36 = (double)0.0F;
  1899.       double var44 = var0;
  1900.       double var38 = Math.abs(var0);
  1901.       double var48 = var4;
  1902.       double var42 = Math.abs(var4);
  1903.       byte var18 = 1;
  1904.       boolean var21;
  1905.       if (var42 > var38) {
  1906.          var21 = true;
  1907.       } else {
  1908.          var21 = false;
  1909.       }
  1910.  
  1911.       if (var21) {
  1912.          var18 = 3;
  1913.          var44 = var4;
  1914.          var48 = var0;
  1915.          double var19 = var38;
  1916.          var38 = var42;
  1917.          var42 = var19;
  1918.       }
  1919.  
  1920.       double var40 = Math.abs(var2);
  1921.       if (var40 == (double)0.0F) {
  1922.          var6[1] = var42;
  1923.          var6[0] = var38;
  1924.          var55 = (double)1.0F;
  1925.          var57 = (double)1.0F;
  1926.          var59 = (double)0.0F;
  1927.          var61 = (double)0.0F;
  1928.       } else {
  1929.          boolean var52 = true;
  1930.          if (var40 > var38) {
  1931.             var18 = 2;
  1932.             if (var38 / var40 < 1.110223024E-16) {
  1933.                var52 = false;
  1934.                var65 = var40;
  1935.                if (var42 > (double)1.0F) {
  1936.                   var63 = var38 / (var40 / var42);
  1937.                } else {
  1938.                   var63 = var38 / var40 * var42;
  1939.                }
  1940.  
  1941.                var55 = (double)1.0F;
  1942.                var59 = var48 / var2;
  1943.                var61 = (double)1.0F;
  1944.                var57 = var44 / var2;
  1945.             }
  1946.          }
  1947.  
  1948.          if (var52) {
  1949.             double var24 = var38 - var42;
  1950.             double var26;
  1951.             if (var24 == var38) {
  1952.                var26 = (double)1.0F;
  1953.             } else {
  1954.                var26 = var24 / var38;
  1955.             }
  1956.  
  1957.             double var28 = var2 / var44;
  1958.             double var34 = (double)2.0F - var26;
  1959.             double var50 = var28 * var28;
  1960.             double var53 = var34 * var34;
  1961.             double var32 = Math.sqrt(var53 + var50);
  1962.             double var30;
  1963.             if (var26 == (double)0.0F) {
  1964.                var30 = Math.abs(var28);
  1965.             } else {
  1966.                var30 = Math.sqrt(var26 * var26 + var50);
  1967.             }
  1968.  
  1969.             double var22 = (var32 + var30) * (double)0.5F;
  1970.             if (var40 > var38) {
  1971.                var18 = 2;
  1972.                if (var38 / var40 < 1.110223024E-16) {
  1973.                   var52 = false;
  1974.                   var65 = var40;
  1975.                   if (var42 > (double)1.0F) {
  1976.                      var63 = var38 / (var40 / var42);
  1977.                   } else {
  1978.                      var63 = var38 / var40 * var42;
  1979.                   }
  1980.  
  1981.                   var55 = (double)1.0F;
  1982.                   var59 = var48 / var2;
  1983.                   var61 = (double)1.0F;
  1984.                   var57 = var44 / var2;
  1985.                }
  1986.             }
  1987.  
  1988.             if (var52) {
  1989.                var24 = var38 - var42;
  1990.                if (var24 == var38) {
  1991.                   var26 = (double)1.0F;
  1992.                } else {
  1993.                   var26 = var24 / var38;
  1994.                }
  1995.  
  1996.                var28 = var2 / var44;
  1997.                var34 = (double)2.0F - var26;
  1998.                var50 = var28 * var28;
  1999.                var53 = var34 * var34;
  2000.                var32 = Math.sqrt(var53 + var50);
  2001.                if (var26 == (double)0.0F) {
  2002.                   var30 = Math.abs(var28);
  2003.                } else {
  2004.                   var30 = Math.sqrt(var26 * var26 + var50);
  2005.                }
  2006.  
  2007.                var22 = (var32 + var30) * (double)0.5F;
  2008.                var63 = var42 / var22;
  2009.                var65 = var38 * var22;
  2010.                if (var50 == (double)0.0F) {
  2011.                   if (var26 == (double)0.0F) {
  2012.                      var34 = d_sign(var12, var44) * d_sign(var14, var2);
  2013.                   } else {
  2014.                      var34 = var2 / d_sign(var24, var44) + var28 / var34;
  2015.                   }
  2016.                } else {
  2017.                   var34 = (var28 / (var32 + var34) + var28 / (var30 + var26)) * (var22 + (double)1.0F);
  2018.                }
  2019.  
  2020.                var26 = Math.sqrt(var34 * var34 + (double)4.0F);
  2021.                var57 = (double)2.0F / var26;
  2022.                var61 = var34 / var26;
  2023.                var55 = (var57 + var61 * var28) / var22;
  2024.                var59 = var48 / var44 * var61 / var22;
  2025.             }
  2026.          }
  2027.  
  2028.          if (var21) {
  2029.             var8[0] = var61;
  2030.             var7[0] = var57;
  2031.             var10[0] = var59;
  2032.             var9[0] = var55;
  2033.          } else {
  2034.             var8[0] = var55;
  2035.             var7[0] = var59;
  2036.             var10[0] = var57;
  2037.             var9[0] = var61;
  2038.          }
  2039.  
  2040.          if (var18 == 1) {
  2041.             var36 = d_sign(var14, var10[0]) * d_sign(var14, var8[0]) * d_sign(var14, var0);
  2042.          }
  2043.  
  2044.          if (var18 == 2) {
  2045.             var36 = d_sign(var14, var9[0]) * d_sign(var14, var8[0]) * d_sign(var14, var2);
  2046.          }
  2047.  
  2048.          if (var18 == 3) {
  2049.             var36 = d_sign(var14, var9[0]) * d_sign(var14, var7[0]) * d_sign(var14, var4);
  2050.          }
  2051.  
  2052.          var6[var11] = d_sign(var65, var36);
  2053.          double var16 = var36 * d_sign(var14, var0) * d_sign(var14, var4);
  2054.          var6[var11 + 1] = d_sign(var63, var16);
  2055.       }
  2056.  
  2057.       return 0;
  2058.    }
  2059.  
  2060.    static double compute_rot(double var0, double var2, double[] var4, double[] var5, int var6, int var7) {
  2061.       double var13;
  2062.       double var15;
  2063.       double var25;
  2064.       if (var2 == (double)0.0F) {
  2065.          var13 = (double)1.0F;
  2066.          var15 = (double)0.0F;
  2067.          var25 = var0;
  2068.       } else if (var0 == (double)0.0F) {
  2069.          var13 = (double)0.0F;
  2070.          var15 = (double)1.0F;
  2071.          var25 = var2;
  2072.       } else {
  2073.          double var21 = var0;
  2074.          double var23 = var2;
  2075.          double var18 = max(Math.abs(var0), Math.abs(var2));
  2076.          if (var18 >= 4.994797680505588E145) {
  2077.             int var32;
  2078.             for(var32 = 0; var18 >= 4.994797680505588E145; var18 = max(Math.abs(var21), Math.abs(var23))) {
  2079.                ++var32;
  2080.                var21 *= 2.002083095183101E-146;
  2081.                var23 *= 2.002083095183101E-146;
  2082.             }
  2083.  
  2084.             var25 = Math.sqrt(var21 * var21 + var23 * var23);
  2085.             var13 = var21 / var25;
  2086.             var15 = var23 / var25;
  2087.  
  2088.             for(int var31 = 1; var31 <= var32; ++var31) {
  2089.                var25 *= 4.994797680505588E145;
  2090.             }
  2091.          } else if (!(var18 <= 2.002083095183101E-146)) {
  2092.             var25 = Math.sqrt(var0 * var0 + var2 * var2);
  2093.             var13 = var0 / var25;
  2094.             var15 = var2 / var25;
  2095.          } else {
  2096.             int var20;
  2097.             for(var20 = 0; var18 <= 2.002083095183101E-146; var18 = max(Math.abs(var21), Math.abs(var23))) {
  2098.                ++var20;
  2099.                var21 *= 4.994797680505588E145;
  2100.                var23 *= 4.994797680505588E145;
  2101.             }
  2102.  
  2103.             var25 = Math.sqrt(var21 * var21 + var23 * var23);
  2104.             var13 = var21 / var25;
  2105.             var15 = var23 / var25;
  2106.  
  2107.             for(int var17 = 1; var17 <= var20; ++var17) {
  2108.                var25 *= 2.002083095183101E-146;
  2109.             }
  2110.          }
  2111.  
  2112.          if (Math.abs(var0) > Math.abs(var2) && var13 < (double)0.0F) {
  2113.             var13 = -var13;
  2114.             var15 = -var15;
  2115.             var25 = -var25;
  2116.          }
  2117.       }
  2118.  
  2119.       var4[var6] = var15;
  2120.       var5[var6] = var13;
  2121.       return var25;
  2122.    }
  2123.  
  2124.    static void print_mat(double[] var0) {
  2125.       for(int var1 = 0; var1 < 3; ++var1) {
  2126.          System.out.println(var0[var1 * 3 + 0] + " " + var0[var1 * 3 + 1] + " " + var0[var1 * 3 + 2] + "\n");
  2127.       }
  2128.  
  2129.    }
  2130.  
  2131.    static void print_det(double[] var0) {
  2132.       double var1 = var0[0] * var0[4] * var0[8] + var0[1] * var0[5] * var0[6] + var0[2] * var0[3] * var0[7] - var0[2] * var0[4] * var0[6] - var0[0] * var0[5] * var0[7] - var0[1] * var0[3] * var0[8];
  2133.       System.out.println("det= " + var1);
  2134.    }
  2135.  
  2136.    static void mat_mul(double[] var0, double[] var1, double[] var2) {
  2137.       double[] var4 = new double[]{var0[0] * var1[0] + var0[1] * var1[3] + var0[2] * var1[6], var0[0] * var1[1] + var0[1] * var1[4] + var0[2] * var1[7], var0[0] * var1[2] + var0[1] * var1[5] + var0[2] * var1[8], var0[3] * var1[0] + var0[4] * var1[3] + var0[5] * var1[6], var0[3] * var1[1] + var0[4] * var1[4] + var0[5] * var1[7], var0[3] * var1[2] + var0[4] * var1[5] + var0[5] * var1[8], var0[6] * var1[0] + var0[7] * var1[3] + var0[8] * var1[6], var0[6] * var1[1] + var0[7] * var1[4] + var0[8] * var1[7], var0[6] * var1[2] + var0[7] * var1[5] + var0[8] * var1[8]};
  2138.  
  2139.       for(int var3 = 0; var3 < 9; ++var3) {
  2140.          var2[var3] = var4[var3];
  2141.       }
  2142.  
  2143.    }
  2144.  
  2145.    static void transpose_mat(double[] var0, double[] var1) {
  2146.       var1[0] = var0[0];
  2147.       var1[1] = var0[3];
  2148.       var1[2] = var0[6];
  2149.       var1[3] = var0[1];
  2150.       var1[4] = var0[4];
  2151.       var1[5] = var0[7];
  2152.       var1[6] = var0[2];
  2153.       var1[7] = var0[5];
  2154.       var1[8] = var0[8];
  2155.    }
  2156.  
  2157.    static double max3(double[] var0) {
  2158.       if (var0[0] > var0[1]) {
  2159.          return var0[0] > var0[2] ? var0[0] : var0[2];
  2160.       } else {
  2161.          return var0[1] > var0[2] ? var0[1] : var0[2];
  2162.       }
  2163.    }
  2164.  
  2165.    private static final boolean almostEqual(double var0, double var2) {
  2166.       if (var0 == var2) {
  2167.          return true;
  2168.       } else {
  2169.          double var8 = Math.abs(var0 - var2);
  2170.          double var10 = Math.abs(var0);
  2171.          double var12 = Math.abs(var2);
  2172.          double var14 = var10 >= var12 ? var10 : var12;
  2173.          if (var8 < 1.0E-6) {
  2174.             return true;
  2175.          } else {
  2176.             return var8 / var14 < 1.0E-4;
  2177.          }
  2178.       }
  2179.    }
  2180.  
  2181.    public Object clone() {
  2182.       Object var1 = null;
  2183.  
  2184.       try {
  2185.          Matrix3d var4 = (Matrix3d)super.clone();
  2186.          return var4;
  2187.       } catch (CloneNotSupportedException var3) {
  2188.          throw new InternalError();
  2189.       }
  2190.    }
  2191. }
  2192.