home *** CD-ROM | disk | FTP | other *** search
/ S283 Planetary Science &… the Search for Life CD 3 / 0_CD-ROM.iso / install / jre1_3 / lib / rt.jar / sun / awt / geom / Order3.class (.txt) < prev   
Encoding:
Java Class File  |  1979-12-31  |  6.2 KB  |  549 lines

  1. package sun.awt.geom;
  2.  
  3. import java.awt.geom.QuadCurve2D;
  4. import java.awt.geom.Rectangle2D;
  5. import java.util.Vector;
  6.  
  7. final class Order3 extends Curve {
  8.    // $FF: renamed from: x0 double
  9.    private double field_0;
  10.    // $FF: renamed from: y0 double
  11.    private double field_1;
  12.    private double cx0;
  13.    private double cy0;
  14.    private double cx1;
  15.    private double cy1;
  16.    // $FF: renamed from: x1 double
  17.    private double field_2;
  18.    // $FF: renamed from: y1 double
  19.    private double field_3;
  20.    private double xmin;
  21.    private double xmax;
  22.    private double xcoeff0;
  23.    private double xcoeff1;
  24.    private double xcoeff2;
  25.    private double xcoeff3;
  26.    private double ycoeff0;
  27.    private double ycoeff1;
  28.    private double ycoeff2;
  29.    private double ycoeff3;
  30.    private double TforY1;
  31.    private double YforT1;
  32.    private double TforY2;
  33.    private double YforT2;
  34.    private double TforY3;
  35.    private double YforT3;
  36.  
  37.    public static void insert(Vector var0, double[] var1, double var2, double var4, double var6, double var8, double var10, double var12, double var14, double var16, int var18) {
  38.       int var19 = getHorizontalParams(var4, var8, var12, var16, var1);
  39.       if (var19 == 0) {
  40.          var0.add(new Order3(var2, var4, var6, var8, var10, var12, var14, var16, var18));
  41.       } else {
  42.          var1[3] = var2;
  43.          var1[4] = var4;
  44.          var1[5] = var6;
  45.          var1[6] = var8;
  46.          var1[7] = var10;
  47.          var1[8] = var12;
  48.          var1[9] = var14;
  49.          var1[10] = var16;
  50.          double var20 = var1[0];
  51.          if (var19 > 1 && var20 > var1[1]) {
  52.             var1[0] = var1[1];
  53.             var1[1] = var20;
  54.             var20 = var1[0];
  55.          }
  56.  
  57.          split(var1, 3, var20);
  58.          if (var19 > 1) {
  59.             var20 = (var1[1] - var20) / ((double)1.0F - var20);
  60.             split(var1, 9, var20);
  61.          }
  62.  
  63.          int var22 = 3;
  64.          if (var18 == -1) {
  65.             var22 += var19 * 6;
  66.          }
  67.  
  68.          while(var19 >= 0) {
  69.             addInstance(var0, var1[var22 + 0], var1[var22 + 1], var1[var22 + 2], var1[var22 + 3], var1[var22 + 4], var1[var22 + 5], var1[var22 + 6], var1[var22 + 7], var18);
  70.             --var19;
  71.             if (var18 == 1) {
  72.                var22 += 6;
  73.             } else {
  74.                var22 -= 6;
  75.             }
  76.          }
  77.  
  78.       }
  79.    }
  80.  
  81.    public static void addInstance(Vector var0, double var1, double var3, double var5, double var7, double var9, double var11, double var13, double var15, int var17) {
  82.       if (var3 > var15) {
  83.          var0.add(new Order3(var13, var15, var9, var11, var5, var7, var1, var3, -var17));
  84.       } else if (var15 > var3) {
  85.          var0.add(new Order3(var1, var3, var5, var7, var9, var11, var13, var15, var17));
  86.       }
  87.  
  88.    }
  89.  
  90.    public static void getEqn(double[] var0, double var1, double var3, double var5, double var7) {
  91.       var0[0] = var1;
  92.       var0[1] = (var3 - var1) * (double)3.0F;
  93.       var0[2] = (var5 - var3 - var3 + var1) * (double)3.0F;
  94.       var0[3] = var7 - (var5 - var3) * (double)3.0F - var1;
  95.    }
  96.  
  97.    public static int getHorizontalParams(double var0, double var2, double var4, double var6, double[] var8) {
  98.       if (var0 <= var2 && var2 <= var4 && var4 <= var6) {
  99.          return 0;
  100.       } else {
  101.          var6 -= var4;
  102.          var4 -= var2;
  103.          var2 -= var0;
  104.          var8[0] = var2;
  105.          var8[1] = (var4 - var2) * (double)2.0F;
  106.          var8[2] = var6 - var4 - var4 + var2;
  107.          int var9 = QuadCurve2D.solveQuadratic(var8, var8);
  108.          int var10 = 0;
  109.  
  110.          for(int var11 = 0; var11 < var9; ++var11) {
  111.             double var12 = var8[var11];
  112.             if (var12 > (double)0.0F && var12 < (double)1.0F) {
  113.                if (var10 < var11) {
  114.                   var8[var10] = var12;
  115.                }
  116.  
  117.                ++var10;
  118.             }
  119.          }
  120.  
  121.          return var10;
  122.       }
  123.    }
  124.  
  125.    public static void split(double[] var0, int var1, double var2) {
  126.       double var16;
  127.       var0[var1 + 12] = var16 = var0[var1 + 6];
  128.       double var18;
  129.       var0[var1 + 13] = var18 = var0[var1 + 7];
  130.       double var12 = var0[var1 + 4];
  131.       double var14 = var0[var1 + 5];
  132.       var16 = var12 + (var16 - var12) * var2;
  133.       var18 = var14 + (var18 - var14) * var2;
  134.       double var4 = var0[var1 + 0];
  135.       double var6 = var0[var1 + 1];
  136.       double var8 = var0[var1 + 2];
  137.       double var10 = var0[var1 + 3];
  138.       var4 += (var8 - var4) * var2;
  139.       var6 += (var10 - var6) * var2;
  140.       var8 += (var12 - var8) * var2;
  141.       var10 += (var14 - var10) * var2;
  142.       var12 = var8 + (var16 - var8) * var2;
  143.       var14 = var10 + (var18 - var10) * var2;
  144.       var8 = var4 + (var8 - var4) * var2;
  145.       var10 = var6 + (var10 - var6) * var2;
  146.       var0[var1 + 2] = var4;
  147.       var0[var1 + 3] = var6;
  148.       var0[var1 + 4] = var8;
  149.       var0[var1 + 5] = var10;
  150.       var0[var1 + 6] = var8 + (var12 - var8) * var2;
  151.       var0[var1 + 7] = var10 + (var14 - var10) * var2;
  152.       var0[var1 + 8] = var12;
  153.       var0[var1 + 9] = var14;
  154.       var0[var1 + 10] = var16;
  155.       var0[var1 + 11] = var18;
  156.    }
  157.  
  158.    public Order3(double var1, double var3, double var5, double var7, double var9, double var11, double var13, double var15, int var17) {
  159.       super(var17);
  160.       if (var7 < var3) {
  161.          var7 = var3;
  162.       }
  163.  
  164.       if (var11 > var15) {
  165.          var11 = var15;
  166.       }
  167.  
  168.       this.field_0 = var1;
  169.       this.field_1 = var3;
  170.       this.cx0 = var5;
  171.       this.cy0 = var7;
  172.       this.cx1 = var9;
  173.       this.cy1 = var11;
  174.       this.field_2 = var13;
  175.       this.field_3 = var15;
  176.       this.xmin = Math.min(Math.min(var1, var13), Math.min(var5, var9));
  177.       this.xmax = Math.max(Math.max(var1, var13), Math.max(var5, var9));
  178.       this.xcoeff0 = var1;
  179.       this.xcoeff1 = (var5 - var1) * (double)3.0F;
  180.       this.xcoeff2 = (var9 - var5 - var5 + var1) * (double)3.0F;
  181.       this.xcoeff3 = var13 - (var9 - var5) * (double)3.0F - var1;
  182.       this.ycoeff0 = var3;
  183.       this.ycoeff1 = (var7 - var3) * (double)3.0F;
  184.       this.ycoeff2 = (var11 - var7 - var7 + var3) * (double)3.0F;
  185.       this.ycoeff3 = var15 - (var11 - var7) * (double)3.0F - var3;
  186.       this.YforT1 = this.YforT2 = this.YforT3 = var3;
  187.    }
  188.  
  189.    public int getOrder() {
  190.       return 3;
  191.    }
  192.  
  193.    public double getXTop() {
  194.       return this.field_0;
  195.    }
  196.  
  197.    public double getYTop() {
  198.       return this.field_1;
  199.    }
  200.  
  201.    public double getXBot() {
  202.       return this.field_2;
  203.    }
  204.  
  205.    public double getYBot() {
  206.       return this.field_3;
  207.    }
  208.  
  209.    public double getXMin() {
  210.       return this.xmin;
  211.    }
  212.  
  213.    public double getXMax() {
  214.       return this.xmax;
  215.    }
  216.  
  217.    public double getX0() {
  218.       return super.direction == 1 ? this.field_0 : this.field_2;
  219.    }
  220.  
  221.    public double getY0() {
  222.       return super.direction == 1 ? this.field_1 : this.field_3;
  223.    }
  224.  
  225.    public double getCX0() {
  226.       return super.direction == 1 ? this.cx0 : this.cx1;
  227.    }
  228.  
  229.    public double getCY0() {
  230.       return super.direction == 1 ? this.cy0 : this.cy1;
  231.    }
  232.  
  233.    public double getCX1() {
  234.       return super.direction == -1 ? this.cx0 : this.cx1;
  235.    }
  236.  
  237.    public double getCY1() {
  238.       return super.direction == -1 ? this.cy0 : this.cy1;
  239.    }
  240.  
  241.    public double getX1() {
  242.       return super.direction == -1 ? this.field_0 : this.field_2;
  243.    }
  244.  
  245.    public double getY1() {
  246.       return super.direction == -1 ? this.field_1 : this.field_3;
  247.    }
  248.  
  249.    public double TforY(double var1) {
  250.       if (var1 == this.field_1) {
  251.          return (double)0.0F;
  252.       } else if (var1 == this.field_3) {
  253.          return (double)1.0F;
  254.       } else if (var1 == this.YforT1) {
  255.          return this.TforY1;
  256.       } else if (var1 == this.YforT2) {
  257.          return this.TforY2;
  258.       } else if (var1 == this.YforT3) {
  259.          return this.TforY3;
  260.       } else if (!(var1 < this.field_1) && !(var1 > this.field_3)) {
  261.          double var3 = this.ycoeff2;
  262.          double var5 = this.ycoeff1;
  263.          double var7 = this.ycoeff0 - var1;
  264.          if (this.ycoeff3 == (double)0.0F) {
  265.             double[] var32 = new double[]{var7, var5, var3};
  266.             int var34 = QuadCurve2D.solveQuadratic(var32, var32);
  267.             return Curve.firstValidRoot(var32, var34);
  268.          } else {
  269.             var3 /= this.ycoeff3;
  270.             var5 /= this.ycoeff3;
  271.             var7 /= this.ycoeff3;
  272.             boolean var9 = false;
  273.             double var10 = (var3 * var3 - (double)3.0F * var5) / (double)9.0F;
  274.             double var12 = ((double)2.0F * var3 * var3 * var3 - (double)9.0F * var3 * var5 + (double)27.0F * var7) / (double)54.0F;
  275.             double var14 = var12 * var12;
  276.             double var16 = var10 * var10 * var10;
  277.             double var18 = var3 / (double)3.0F;
  278.             double var20;
  279.             if (var14 < var16) {
  280.                double var22 = Math.acos(var12 / Math.sqrt(var16));
  281.                var10 = (double)-2.0F * Math.sqrt(var10);
  282.                var20 = this.refine(var3, var5, var7, var1, var10 * Math.cos(var22 / (double)3.0F) - var18);
  283.                if (var20 < (double)0.0F) {
  284.                   var20 = this.refine(var3, var5, var7, var1, var10 * Math.cos((var22 + (Math.PI * 2D)) / (double)3.0F) - var18);
  285.                }
  286.  
  287.                if (var20 < (double)0.0F) {
  288.                   var20 = this.refine(var3, var5, var7, var1, var10 * Math.cos((var22 - (Math.PI * 2D)) / (double)3.0F) - var18);
  289.                }
  290.             } else {
  291.                boolean var35 = var12 < (double)0.0F;
  292.                double var23 = Math.sqrt(var14 - var16);
  293.                if (var35) {
  294.                   var12 = -var12;
  295.                }
  296.  
  297.                double var25 = Math.pow(var12 + var23, 0.3333333333333333);
  298.                if (!var35) {
  299.                   var25 = -var25;
  300.                }
  301.  
  302.                double var27 = var25 == (double)0.0F ? (double)0.0F : var10 / var25;
  303.                var20 = this.refine(var3, var5, var7, var1, var25 + var27 - var18);
  304.             }
  305.  
  306.             if (var20 < (double)0.0F) {
  307.                double var36 = (double)0.0F;
  308.                double var24 = (double)1.0F;
  309.  
  310.                while(true) {
  311.                   var20 = (var36 + var24) / (double)2.0F;
  312.                   if (var20 == var36 || var20 == var24) {
  313.                      break;
  314.                   }
  315.  
  316.                   double var26 = this.YforT(var20);
  317.                   if (var26 < var1) {
  318.                      var36 = var20;
  319.                   } else {
  320.                      if (!(var26 > var1)) {
  321.                         break;
  322.                      }
  323.  
  324.                      var24 = var20;
  325.                   }
  326.                }
  327.             }
  328.  
  329.             if (var20 >= (double)0.0F) {
  330.                this.TforY3 = this.TforY2;
  331.                this.YforT3 = this.YforT2;
  332.                this.TforY2 = this.TforY1;
  333.                this.YforT2 = this.YforT1;
  334.                this.TforY1 = var20;
  335.                this.YforT1 = var1;
  336.             }
  337.  
  338.             return var20;
  339.          }
  340.       } else {
  341.          throw new InternalError("bad y (" + var1 + ", " + this.field_1 + "=>" + this.field_3 + ")");
  342.       }
  343.    }
  344.  
  345.    public double refine(double var1, double var3, double var5, double var7, double var9) {
  346.       if (!(var9 < -0.1) && !(var9 > 1.1)) {
  347.          double var11 = this.YforT(var9);
  348.          double var13;
  349.          double var15;
  350.          if (var11 < var7) {
  351.             var13 = var9;
  352.             var15 = (double)1.0F;
  353.          } else {
  354.             var13 = (double)0.0F;
  355.             var15 = var9;
  356.          }
  357.  
  358.          boolean var21 = true;
  359.  
  360.          while(var11 != var7) {
  361.             if (!var21) {
  362.                double var22 = (var13 + var15) / (double)2.0F;
  363.                if (var22 == var13 || var22 == var15) {
  364.                   break;
  365.                }
  366.  
  367.                var9 = var22;
  368.             } else {
  369.                double var26 = this.dYforT(var9, 1);
  370.                if (var26 == (double)0.0F) {
  371.                   var21 = false;
  372.                   continue;
  373.                }
  374.  
  375.                double var24 = var9 + (var7 - var11) / var26;
  376.                if (var24 == var9 || var24 <= var13 || var24 >= var15) {
  377.                   var21 = false;
  378.                   continue;
  379.                }
  380.  
  381.                var9 = var24;
  382.             }
  383.  
  384.             var11 = this.YforT(var9);
  385.             if (var11 < var7) {
  386.                var13 = var9;
  387.             } else {
  388.                if (!(var11 > var7)) {
  389.                   break;
  390.                }
  391.  
  392.                var15 = var9;
  393.             }
  394.          }
  395.  
  396.          boolean var27 = false;
  397.          return var9 > (double)1.0F ? (double)-1.0F : var9;
  398.       } else {
  399.          return (double)-1.0F;
  400.       }
  401.    }
  402.  
  403.    public double XforY(double var1) {
  404.       if (var1 == this.field_1) {
  405.          return this.field_0;
  406.       } else {
  407.          return var1 == this.field_3 ? this.field_2 : this.XforT(this.TforY(var1));
  408.       }
  409.    }
  410.  
  411.    public double XforT(double var1) {
  412.       return ((this.xcoeff3 * var1 + this.xcoeff2) * var1 + this.xcoeff1) * var1 + this.xcoeff0;
  413.    }
  414.  
  415.    public double YforT(double var1) {
  416.       return ((this.ycoeff3 * var1 + this.ycoeff2) * var1 + this.ycoeff1) * var1 + this.ycoeff0;
  417.    }
  418.  
  419.    public double dXforT(double var1, int var3) {
  420.       switch (var3) {
  421.          case 0:
  422.             return ((this.xcoeff3 * var1 + this.xcoeff2) * var1 + this.xcoeff1) * var1 + this.xcoeff0;
  423.          case 1:
  424.             return ((double)3.0F * this.xcoeff3 * var1 + (double)2.0F * this.xcoeff2) * var1 + this.xcoeff1;
  425.          case 2:
  426.             return (double)6.0F * this.xcoeff3 * var1 + (double)2.0F * this.xcoeff2;
  427.          case 3:
  428.             return (double)6.0F * this.xcoeff3;
  429.          default:
  430.             return (double)0.0F;
  431.       }
  432.    }
  433.  
  434.    public double dYforT(double var1, int var3) {
  435.       switch (var3) {
  436.          case 0:
  437.             return ((this.ycoeff3 * var1 + this.ycoeff2) * var1 + this.ycoeff1) * var1 + this.ycoeff0;
  438.          case 1:
  439.             return ((double)3.0F * this.ycoeff3 * var1 + (double)2.0F * this.ycoeff2) * var1 + this.ycoeff1;
  440.          case 2:
  441.             return (double)6.0F * this.ycoeff3 * var1 + (double)2.0F * this.ycoeff2;
  442.          case 3:
  443.             return (double)6.0F * this.ycoeff3;
  444.          default:
  445.             return (double)0.0F;
  446.       }
  447.    }
  448.  
  449.    public double nextVertical(double var1, double var3) {
  450.       double[] var5 = new double[]{this.xcoeff1, (double)2.0F * this.xcoeff2, (double)3.0F * this.xcoeff3};
  451.       int var6 = QuadCurve2D.solveQuadratic(var5, var5);
  452.  
  453.       for(int var7 = 0; var7 < var6; ++var7) {
  454.          if (var5[var7] > var1 && var5[var7] < var3) {
  455.             var3 = var5[var7];
  456.          }
  457.       }
  458.  
  459.       return var3;
  460.    }
  461.  
  462.    public void enlarge(Rectangle2D var1) {
  463.       var1.add(this.field_0, this.field_1);
  464.       double[] var2 = new double[]{this.xcoeff1, (double)2.0F * this.xcoeff2, (double)3.0F * this.xcoeff3};
  465.       int var3 = QuadCurve2D.solveQuadratic(var2, var2);
  466.  
  467.       for(int var4 = 0; var4 < var3; ++var4) {
  468.          double var5 = var2[var4];
  469.          if (var5 > (double)0.0F && var5 < (double)1.0F) {
  470.             var1.add(this.XforT(var5), this.YforT(var5));
  471.          }
  472.       }
  473.  
  474.       var1.add(this.field_2, this.field_3);
  475.    }
  476.  
  477.    public Curve getSubCurve(double var1, double var3, int var5) {
  478.       if (var1 == this.field_1 && var3 == this.field_3) {
  479.          return ((Curve)this).getWithDirection(var5);
  480.       } else {
  481.          double[] var6 = new double[14];
  482.          double var7;
  483.          if (var1 <= this.field_1) {
  484.             var7 = (double)0.0F;
  485.          } else {
  486.             var7 = this.TforY(var1);
  487.          }
  488.  
  489.          double var9;
  490.          if (var3 >= this.field_3) {
  491.             var9 = (double)1.0F;
  492.          } else {
  493.             var9 = this.TforY(var3);
  494.          }
  495.  
  496.          var6[0] = this.field_0;
  497.          var6[1] = this.field_1;
  498.          var6[2] = this.cx0;
  499.          var6[3] = this.cy0;
  500.          var6[4] = this.cx1;
  501.          var6[5] = this.cy1;
  502.          var6[6] = this.field_2;
  503.          var6[7] = this.field_3;
  504.          if (!(var7 < (double)0.0F) && !(var9 < (double)0.0F)) {
  505.             if (var9 < (double)1.0F) {
  506.                split(var6, 0, var9);
  507.             }
  508.  
  509.             if (var7 <= (double)0.0F) {
  510.                return new Order3(var6[0], var1, var6[2], var6[3], var6[4], var6[5], var6[6], var3, var5);
  511.             } else {
  512.                split(var6, 0, var7 / var9);
  513.                return new Order3(var6[6], var1, var6[8], var6[9], var6[10], var6[11], var6[12], var3, var5);
  514.             }
  515.          } else {
  516.             throw new InternalError("bad t");
  517.          }
  518.       }
  519.    }
  520.  
  521.    public Curve getReversedCurve() {
  522.       return new Order3(this.field_0, this.field_1, this.cx0, this.cy0, this.cx1, this.cy1, this.field_2, this.field_3, -super.direction);
  523.    }
  524.  
  525.    public int getSegment(double[] var1) {
  526.       if (super.direction == 1) {
  527.          var1[0] = this.cx0;
  528.          var1[1] = this.cy0;
  529.          var1[2] = this.cx1;
  530.          var1[3] = this.cy1;
  531.          var1[4] = this.field_2;
  532.          var1[5] = this.field_3;
  533.       } else {
  534.          var1[0] = this.cx1;
  535.          var1[1] = this.cy1;
  536.          var1[2] = this.cx0;
  537.          var1[3] = this.cy0;
  538.          var1[4] = this.field_0;
  539.          var1[5] = this.field_1;
  540.       }
  541.  
  542.       return 3;
  543.    }
  544.  
  545.    public String controlPointString() {
  546.       return "(" + Curve.round(this.getCX0()) + ", " + Curve.round(this.getCY0()) + "), " + "(" + Curve.round(this.getCX1()) + ", " + Curve.round(this.getCY1()) + "), ";
  547.    }
  548. }
  549.