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 / Quat4d.class (.txt) < prev    next >
Encoding:
Java Class File  |  2002-06-19  |  8.7 KB  |  419 lines

  1. package javax.vecmath;
  2.  
  3. import java.io.Serializable;
  4.  
  5. public class Quat4d extends Tuple4d implements Serializable {
  6.    static final long serialVersionUID = 7577479888820201099L;
  7.    static final double EPS = 1.0E-6;
  8.    static final double EPS2 = 1.0E-30;
  9.    static final double PIO2 = 1.57079632679;
  10.  
  11.    public Quat4d(double var1, double var3, double var5, double var7) {
  12.       double var9 = (double)1.0F / Math.sqrt(var1 * var1 + var3 * var3 + var5 * var5 + var7 * var7);
  13.       this.x = var1 * var9;
  14.       this.y = var3 * var9;
  15.       this.z = var5 * var9;
  16.       this.w = var7 * var9;
  17.    }
  18.  
  19.    public Quat4d(double[] var1) {
  20.       double var2 = (double)1.0F / Math.sqrt(var1[0] * var1[0] + var1[1] * var1[1] + var1[2] * var1[2] + var1[3] * var1[3]);
  21.       this.x = var1[0] * var2;
  22.       this.y = var1[1] * var2;
  23.       this.z = var1[2] * var2;
  24.       this.w = var1[3] * var2;
  25.    }
  26.  
  27.    public Quat4d(Quat4d var1) {
  28.       super(var1);
  29.    }
  30.  
  31.    public Quat4d(Quat4f var1) {
  32.       super(var1);
  33.    }
  34.  
  35.    public Quat4d(Tuple4f var1) {
  36.       double var2 = (double)1.0F / Math.sqrt((double)(var1.x * var1.x + var1.y * var1.y + var1.z * var1.z + var1.w * var1.w));
  37.       this.x = (double)var1.x * var2;
  38.       this.y = (double)var1.y * var2;
  39.       this.z = (double)var1.z * var2;
  40.       this.w = (double)var1.w * var2;
  41.    }
  42.  
  43.    public Quat4d(Tuple4d var1) {
  44.       double var2 = (double)1.0F / Math.sqrt(var1.x * var1.x + var1.y * var1.y + var1.z * var1.z + var1.w * var1.w);
  45.       this.x = var1.x * var2;
  46.       this.y = var1.y * var2;
  47.       this.z = var1.z * var2;
  48.       this.w = var1.w * var2;
  49.    }
  50.  
  51.    public Quat4d() {
  52.    }
  53.  
  54.    public final void conjugate(Quat4d var1) {
  55.       this.x = -var1.x;
  56.       this.y = -var1.y;
  57.       this.z = -var1.z;
  58.       this.w = var1.w;
  59.    }
  60.  
  61.    public final void conjugate() {
  62.       this.x = -this.x;
  63.       this.y = -this.y;
  64.       this.z = -this.z;
  65.    }
  66.  
  67.    public final void mul(Quat4d var1, Quat4d var2) {
  68.       if (this != var1 && this != var2) {
  69.          this.w = var1.w * var2.w - var1.x * var2.x - var1.y * var2.y - var1.z * var2.z;
  70.          this.x = var1.w * var2.x + var2.w * var1.x + var1.y * var2.z - var1.z * var2.y;
  71.          this.y = var1.w * var2.y + var2.w * var1.y - var1.x * var2.z + var1.z * var2.x;
  72.          this.z = var1.w * var2.z + var2.w * var1.z + var1.x * var2.y - var1.y * var2.x;
  73.       } else {
  74.          double var7 = var1.w * var2.w - var1.x * var2.x - var1.y * var2.y - var1.z * var2.z;
  75.          double var3 = var1.w * var2.x + var2.w * var1.x + var1.y * var2.z - var1.z * var2.y;
  76.          double var5 = var1.w * var2.y + var2.w * var1.y - var1.x * var2.z + var1.z * var2.x;
  77.          this.z = var1.w * var2.z + var2.w * var1.z + var1.x * var2.y - var1.y * var2.x;
  78.          this.w = var7;
  79.          this.x = var3;
  80.          this.y = var5;
  81.       }
  82.  
  83.    }
  84.  
  85.    public final void mul(Quat4d var1) {
  86.       double var6 = this.w * var1.w - this.x * var1.x - this.y * var1.y - this.z * var1.z;
  87.       double var2 = this.w * var1.x + var1.w * this.x + this.y * var1.z - this.z * var1.y;
  88.       double var4 = this.w * var1.y + var1.w * this.y - this.x * var1.z + this.z * var1.x;
  89.       this.z = this.w * var1.z + var1.w * this.z + this.x * var1.y - this.y * var1.x;
  90.       this.w = var6;
  91.       this.x = var2;
  92.       this.y = var4;
  93.    }
  94.  
  95.    public final void mulInverse(Quat4d var1, Quat4d var2) {
  96.       Quat4d var3 = new Quat4d(var2);
  97.       var3.inverse();
  98.       this.mul(var1, var3);
  99.    }
  100.  
  101.    public final void mulInverse(Quat4d var1) {
  102.       Quat4d var2 = new Quat4d(var1);
  103.       var2.inverse();
  104.       this.mul(var2);
  105.    }
  106.  
  107.    public final void inverse(Quat4d var1) {
  108.       double var2 = (double)1.0F / (var1.w * var1.w + var1.x * var1.x + var1.y * var1.y + var1.z * var1.z);
  109.       this.w = var2 * var1.w;
  110.       this.x = -var2 * var1.x;
  111.       this.y = -var2 * var1.y;
  112.       this.z = -var2 * var1.z;
  113.    }
  114.  
  115.    public final void inverse() {
  116.       double var1 = (double)1.0F / (this.w * this.w + this.x * this.x + this.y * this.y + this.z * this.z);
  117.       this.w *= var1;
  118.       this.x *= -var1;
  119.       this.y *= -var1;
  120.       this.z *= -var1;
  121.    }
  122.  
  123.    public final void normalize(Quat4d var1) {
  124.       double var2 = var1.x * var1.x + var1.y * var1.y + var1.z * var1.z + var1.w * var1.w;
  125.       if (var2 > (double)0.0F) {
  126.          var2 = (double)1.0F / Math.sqrt(var2);
  127.          this.x = var2 * var1.x;
  128.          this.y = var2 * var1.y;
  129.          this.z = var2 * var1.z;
  130.          this.w = var2 * var1.w;
  131.       } else {
  132.          this.x = (double)0.0F;
  133.          this.y = (double)0.0F;
  134.          this.z = (double)0.0F;
  135.          this.w = (double)0.0F;
  136.       }
  137.  
  138.    }
  139.  
  140.    public final void normalize() {
  141.       double var1 = this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w;
  142.       if (var1 > (double)0.0F) {
  143.          var1 = (double)1.0F / Math.sqrt(var1);
  144.          this.x *= var1;
  145.          this.y *= var1;
  146.          this.z *= var1;
  147.          this.w *= var1;
  148.       } else {
  149.          this.x = (double)0.0F;
  150.          this.y = (double)0.0F;
  151.          this.z = (double)0.0F;
  152.          this.w = (double)0.0F;
  153.       }
  154.  
  155.    }
  156.  
  157.    public final void set(Matrix4f var1) {
  158.       double var2 = (double)0.25F * (double)(var1.m00 + var1.m11 + var1.m22 + var1.m33);
  159.       if (var2 >= (double)0.0F) {
  160.          if (var2 >= 1.0E-30) {
  161.             this.w = Math.sqrt(var2);
  162.             var2 = (double)0.25F / this.w;
  163.             this.x = (double)(var1.m21 - var1.m12) * var2;
  164.             this.y = (double)(var1.m02 - var1.m20) * var2;
  165.             this.z = (double)(var1.m10 - var1.m01) * var2;
  166.          } else {
  167.             this.w = (double)0.0F;
  168.             var2 = (double)-0.5F * (double)(var1.m11 + var1.m22);
  169.             if (var2 >= (double)0.0F) {
  170.                if (var2 >= 1.0E-30) {
  171.                   this.x = Math.sqrt(var2);
  172.                   var2 = (double)1.0F / ((double)2.0F * this.x);
  173.                   this.y = (double)var1.m10 * var2;
  174.                   this.z = (double)var1.m20 * var2;
  175.                } else {
  176.                   this.x = (double)0.0F;
  177.                   var2 = (double)0.5F * ((double)1.0F - (double)var1.m22);
  178.                   if (var2 >= 1.0E-30) {
  179.                      this.y = Math.sqrt(var2);
  180.                      this.z = (double)var1.m21 / ((double)2.0F * this.y);
  181.                   } else {
  182.                      this.y = (double)0.0F;
  183.                      this.z = (double)1.0F;
  184.                   }
  185.                }
  186.             } else {
  187.                this.x = (double)0.0F;
  188.                this.y = (double)0.0F;
  189.                this.z = (double)1.0F;
  190.             }
  191.          }
  192.       } else {
  193.          this.w = (double)0.0F;
  194.          this.x = (double)0.0F;
  195.          this.y = (double)0.0F;
  196.          this.z = (double)1.0F;
  197.       }
  198.    }
  199.  
  200.    public final void set(Matrix4d var1) {
  201.       double var2 = (double)0.25F * (var1.m00 + var1.m11 + var1.m22 + var1.m33);
  202.       if (var2 >= (double)0.0F) {
  203.          if (var2 >= 1.0E-30) {
  204.             this.w = Math.sqrt(var2);
  205.             var2 = (double)0.25F / this.w;
  206.             this.x = (var1.m21 - var1.m12) * var2;
  207.             this.y = (var1.m02 - var1.m20) * var2;
  208.             this.z = (var1.m10 - var1.m01) * var2;
  209.          } else {
  210.             this.w = (double)0.0F;
  211.             var2 = (double)-0.5F * (var1.m11 + var1.m22);
  212.             if (var2 >= (double)0.0F) {
  213.                if (var2 >= 1.0E-30) {
  214.                   this.x = Math.sqrt(var2);
  215.                   var2 = (double)0.5F / this.x;
  216.                   this.y = var1.m10 * var2;
  217.                   this.z = var1.m20 * var2;
  218.                } else {
  219.                   this.x = (double)0.0F;
  220.                   var2 = (double)0.5F * ((double)1.0F - var1.m22);
  221.                   if (var2 >= 1.0E-30) {
  222.                      this.y = Math.sqrt(var2);
  223.                      this.z = var1.m21 / ((double)2.0F * this.y);
  224.                   } else {
  225.                      this.y = (double)0.0F;
  226.                      this.z = (double)1.0F;
  227.                   }
  228.                }
  229.             } else {
  230.                this.x = (double)0.0F;
  231.                this.y = (double)0.0F;
  232.                this.z = (double)1.0F;
  233.             }
  234.          }
  235.       } else {
  236.          this.w = (double)0.0F;
  237.          this.x = (double)0.0F;
  238.          this.y = (double)0.0F;
  239.          this.z = (double)1.0F;
  240.       }
  241.    }
  242.  
  243.    public final void set(Matrix3f var1) {
  244.       double var2 = (double)0.25F * ((double)(var1.m00 + var1.m11 + var1.m22) + (double)1.0F);
  245.       if (var2 >= (double)0.0F) {
  246.          if (var2 >= 1.0E-30) {
  247.             this.w = Math.sqrt(var2);
  248.             var2 = (double)0.25F / this.w;
  249.             this.x = (double)(var1.m21 - var1.m12) * var2;
  250.             this.y = (double)(var1.m02 - var1.m20) * var2;
  251.             this.z = (double)(var1.m10 - var1.m01) * var2;
  252.          } else {
  253.             this.w = (double)0.0F;
  254.             var2 = (double)-0.5F * (double)(var1.m11 + var1.m22);
  255.             if (var2 >= (double)0.0F) {
  256.                if (var2 >= 1.0E-30) {
  257.                   this.x = Math.sqrt(var2);
  258.                   var2 = (double)0.5F / this.x;
  259.                   this.y = (double)var1.m10 * var2;
  260.                   this.z = (double)var1.m20 * var2;
  261.                } else {
  262.                   this.x = (double)0.0F;
  263.                   var2 = (double)0.5F * ((double)1.0F - (double)var1.m22);
  264.                   if (var2 >= 1.0E-30) {
  265.                      this.y = Math.sqrt(var2);
  266.                      this.z = (double)var1.m21 / ((double)2.0F * this.y);
  267.                   }
  268.  
  269.                   this.y = (double)0.0F;
  270.                   this.z = (double)1.0F;
  271.                }
  272.             } else {
  273.                this.x = (double)0.0F;
  274.                this.y = (double)0.0F;
  275.                this.z = (double)1.0F;
  276.             }
  277.          }
  278.       } else {
  279.          this.w = (double)0.0F;
  280.          this.x = (double)0.0F;
  281.          this.y = (double)0.0F;
  282.          this.z = (double)1.0F;
  283.       }
  284.    }
  285.  
  286.    public final void set(Matrix3d var1) {
  287.       double var2 = (double)0.25F * (var1.m00 + var1.m11 + var1.m22 + (double)1.0F);
  288.       if (var2 >= (double)0.0F) {
  289.          if (var2 >= 1.0E-30) {
  290.             this.w = Math.sqrt(var2);
  291.             var2 = (double)0.25F / this.w;
  292.             this.x = (var1.m21 - var1.m12) * var2;
  293.             this.y = (var1.m02 - var1.m20) * var2;
  294.             this.z = (var1.m10 - var1.m01) * var2;
  295.          } else {
  296.             this.w = (double)0.0F;
  297.             var2 = (double)-0.5F * (var1.m11 + var1.m22);
  298.             if (var2 >= (double)0.0F) {
  299.                if (var2 >= 1.0E-30) {
  300.                   this.x = Math.sqrt(var2);
  301.                   var2 = (double)0.5F / this.x;
  302.                   this.y = var1.m10 * var2;
  303.                   this.z = var1.m20 * var2;
  304.                } else {
  305.                   this.x = (double)0.0F;
  306.                   var2 = (double)0.5F * ((double)1.0F - var1.m22);
  307.                   if (var2 >= 1.0E-30) {
  308.                      this.y = Math.sqrt(var2);
  309.                      this.z = var1.m21 / ((double)2.0F * this.y);
  310.                   } else {
  311.                      this.y = (double)0.0F;
  312.                      this.z = (double)1.0F;
  313.                   }
  314.                }
  315.             } else {
  316.                this.x = (double)0.0F;
  317.                this.y = (double)0.0F;
  318.                this.z = (double)1.0F;
  319.             }
  320.          }
  321.       } else {
  322.          this.w = (double)0.0F;
  323.          this.x = (double)0.0F;
  324.          this.y = (double)0.0F;
  325.          this.z = (double)1.0F;
  326.       }
  327.    }
  328.  
  329.    public final void set(AxisAngle4f var1) {
  330.       double var4 = Math.sqrt((double)(var1.x * var1.x + var1.y * var1.y + var1.z * var1.z));
  331.       if (var4 < 1.0E-6) {
  332.          this.w = (double)0.0F;
  333.          this.x = (double)0.0F;
  334.          this.y = (double)0.0F;
  335.          this.z = (double)0.0F;
  336.       } else {
  337.          double var2 = Math.sin((double)var1.angle / (double)2.0F);
  338.          var4 = (double)1.0F / var4;
  339.          this.w = Math.cos((double)var1.angle / (double)2.0F);
  340.          this.x = (double)var1.x * var4 * var2;
  341.          this.y = (double)var1.y * var4 * var2;
  342.          this.z = (double)var1.z * var4 * var2;
  343.       }
  344.  
  345.    }
  346.  
  347.    public final void set(AxisAngle4d var1) {
  348.       double var4 = Math.sqrt(var1.x * var1.x + var1.y * var1.y + var1.z * var1.z);
  349.       if (var4 < 1.0E-6) {
  350.          this.w = (double)0.0F;
  351.          this.x = (double)0.0F;
  352.          this.y = (double)0.0F;
  353.          this.z = (double)0.0F;
  354.       } else {
  355.          var4 = (double)1.0F / var4;
  356.          double var2 = Math.sin(var1.angle / (double)2.0F);
  357.          this.w = Math.cos(var1.angle / (double)2.0F);
  358.          this.x = var1.x * var4 * var2;
  359.          this.y = var1.y * var4 * var2;
  360.          this.z = var1.z * var4 * var2;
  361.       }
  362.  
  363.    }
  364.  
  365.    public final void interpolate(Quat4d var1, double var2) {
  366.       double var4 = this.x * var1.x + this.y * var1.y + this.z * var1.z + this.w * var1.w;
  367.       if (var4 < (double)0.0F) {
  368.          var1.x = -var1.x;
  369.          var1.y = -var1.y;
  370.          var1.z = -var1.z;
  371.          var1.w = -var1.w;
  372.       }
  373.  
  374.       double var6;
  375.       double var8;
  376.       if ((double)1.0F - Math.abs(var4) > 1.0E-6) {
  377.          double var10 = Math.acos(var4);
  378.          double var12 = Math.sin(var10);
  379.          var6 = Math.sin(((double)1.0F - var2) * var10) / var12;
  380.          var8 = Math.sin(var2 * var10) / var12;
  381.       } else {
  382.          var6 = (double)1.0F - var2;
  383.          var8 = var2;
  384.       }
  385.  
  386.       this.w = var6 * this.w + var8 * var1.w;
  387.       this.x = var6 * this.x + var8 * var1.x;
  388.       this.y = var6 * this.y + var8 * var1.y;
  389.       this.z = var6 * this.z + var8 * var1.z;
  390.    }
  391.  
  392.    public final void interpolate(Quat4d var1, Quat4d var2, double var3) {
  393.       double var5 = var2.x * var1.x + var2.y * var1.y + var2.z * var1.z + var2.w * var1.w;
  394.       if (var5 < (double)0.0F) {
  395.          var1.x = -var1.x;
  396.          var1.y = -var1.y;
  397.          var1.z = -var1.z;
  398.          var1.w = -var1.w;
  399.       }
  400.  
  401.       double var7;
  402.       double var9;
  403.       if ((double)1.0F - Math.abs(var5) > 1.0E-6) {
  404.          double var11 = Math.acos(var5);
  405.          double var13 = Math.sin(var11);
  406.          var7 = Math.sin(((double)1.0F - var3) * var11) / var13;
  407.          var9 = Math.sin(var3 * var11) / var13;
  408.       } else {
  409.          var7 = (double)1.0F - var3;
  410.          var9 = var3;
  411.       }
  412.  
  413.       this.w = var7 * var1.w + var9 * var2.w;
  414.       this.x = var7 * var1.x + var9 * var2.x;
  415.       this.y = var7 * var1.y + var9 * var2.y;
  416.       this.z = var7 * var1.z + var9 * var2.z;
  417.    }
  418. }
  419.