home *** CD-ROM | disk | FTP | other *** search
/ S283 Planetary Science &n…he Search for Life DVD 2 / DVD-ROM.iso / install / jre1_3 / lib / rt.jar / java / awt / geom / Arc2D.class (.txt) < prev    next >
Encoding:
Java Class File  |  1979-12-31  |  6.5 KB  |  463 lines

  1. package java.awt.geom;
  2.  
  3. public abstract class Arc2D extends RectangularShape {
  4.    public static final int OPEN = 0;
  5.    public static final int CHORD = 1;
  6.    public static final int PIE = 2;
  7.    private int type;
  8.  
  9.    protected Arc2D(int var1) {
  10.       this.setArcType(var1);
  11.    }
  12.  
  13.    public abstract double getAngleStart();
  14.  
  15.    public abstract double getAngleExtent();
  16.  
  17.    public int getArcType() {
  18.       return this.type;
  19.    }
  20.  
  21.    public Point2D getStartPoint() {
  22.       double var1 = Math.toRadians(-this.getAngleStart());
  23.       double var3 = ((RectangularShape)this).getX() + (Math.cos(var1) * (double)0.5F + (double)0.5F) * ((RectangularShape)this).getWidth();
  24.       double var5 = ((RectangularShape)this).getY() + (Math.sin(var1) * (double)0.5F + (double)0.5F) * ((RectangularShape)this).getHeight();
  25.       return new Point2D.Double(var3, var5);
  26.    }
  27.  
  28.    public Point2D getEndPoint() {
  29.       double var1 = Math.toRadians(-this.getAngleStart() - this.getAngleExtent());
  30.       double var3 = ((RectangularShape)this).getX() + (Math.cos(var1) * (double)0.5F + (double)0.5F) * ((RectangularShape)this).getWidth();
  31.       double var5 = ((RectangularShape)this).getY() + (Math.sin(var1) * (double)0.5F + (double)0.5F) * ((RectangularShape)this).getHeight();
  32.       return new Point2D.Double(var3, var5);
  33.    }
  34.  
  35.    public abstract void setArc(double var1, double var3, double var5, double var7, double var9, double var11, int var13);
  36.  
  37.    public void setArc(Point2D var1, Dimension2D var2, double var3, double var5, int var7) {
  38.       this.setArc(var1.getX(), var1.getY(), var2.getWidth(), var2.getHeight(), var3, var5, var7);
  39.    }
  40.  
  41.    public void setArc(Rectangle2D var1, double var2, double var4, int var6) {
  42.       this.setArc(((RectangularShape)var1).getX(), ((RectangularShape)var1).getY(), ((RectangularShape)var1).getWidth(), ((RectangularShape)var1).getHeight(), var2, var4, var6);
  43.    }
  44.  
  45.    public void setArc(Arc2D var1) {
  46.       this.setArc(((RectangularShape)var1).getX(), ((RectangularShape)var1).getY(), ((RectangularShape)var1).getWidth(), ((RectangularShape)var1).getHeight(), var1.getAngleStart(), var1.getAngleExtent(), var1.type);
  47.    }
  48.  
  49.    public void setArcByCenter(double var1, double var3, double var5, double var7, double var9, int var11) {
  50.       this.setArc(var1 - var5, var3 - var5, var5 * (double)2.0F, var5 * (double)2.0F, var7, var9, var11);
  51.    }
  52.  
  53.    public void setArcByTangent(Point2D var1, Point2D var2, Point2D var3, double var4) {
  54.       double var6 = Math.atan2(var1.getY() - var2.getY(), var1.getX() - var2.getX());
  55.       double var8 = Math.atan2(var3.getY() - var2.getY(), var3.getX() - var2.getX());
  56.       double var10 = var8 - var6;
  57.       if (var10 > Math.PI) {
  58.          var8 -= (Math.PI * 2D);
  59.       } else if (var10 < -Math.PI) {
  60.          var8 += (Math.PI * 2D);
  61.       }
  62.  
  63.       double var12 = (var6 + var8) / (double)2.0F;
  64.       double var14 = Math.abs(var8 - var12);
  65.       double var16 = var4 / Math.sin(var14);
  66.       double var18 = var2.getX() + var16 * Math.cos(var12);
  67.       double var20 = var2.getY() + var16 * Math.sin(var12);
  68.       if (var6 < var8) {
  69.          --var6;
  70.          ++var8;
  71.       } else {
  72.          ++var6;
  73.          --var8;
  74.       }
  75.  
  76.       var6 = Math.toDegrees(-var6);
  77.       var8 = Math.toDegrees(-var8);
  78.       var10 = var8 - var6;
  79.       if (var10 < (double)0.0F) {
  80.          var10 += (double)360.0F;
  81.       } else {
  82.          var10 -= (double)360.0F;
  83.       }
  84.  
  85.       this.setArcByCenter(var18, var20, var4, var6, var10, this.type);
  86.    }
  87.  
  88.    public abstract void setAngleStart(double var1);
  89.  
  90.    public abstract void setAngleExtent(double var1);
  91.  
  92.    public void setAngleStart(Point2D var1) {
  93.       this.setAngleStart(-Math.toDegrees(Math.atan2(var1.getY() - ((RectangularShape)this).getCenterY(), var1.getX() - ((RectangularShape)this).getCenterX())));
  94.    }
  95.  
  96.    public void setAngles(double var1, double var3, double var5, double var7) {
  97.       double var9 = ((RectangularShape)this).getCenterX();
  98.       double var11 = ((RectangularShape)this).getCenterY();
  99.       double var13 = Math.atan2(var11 - var3, var1 - var9);
  100.       double var15 = Math.atan2(var11 - var7, var5 - var9);
  101.       var15 -= var13;
  102.       if (var15 <= (double)0.0F) {
  103.          var15 += (Math.PI * 2D);
  104.       }
  105.  
  106.       this.setAngleStart(Math.toDegrees(var13));
  107.       this.setAngleExtent(Math.toDegrees(var15));
  108.    }
  109.  
  110.    public void setAngles(Point2D var1, Point2D var2) {
  111.       this.setAngles(var1.getX(), var1.getY(), var2.getX(), var2.getY());
  112.    }
  113.  
  114.    public void setArcType(int var1) {
  115.       if (var1 >= 0 && var1 <= 2) {
  116.          this.type = var1;
  117.       } else {
  118.          throw new IllegalArgumentException("invalid type for Arc: " + var1);
  119.       }
  120.    }
  121.  
  122.    public void setFrame(double var1, double var3, double var5, double var7) {
  123.       this.setArc(var1, var3, var5, var7, this.getAngleStart(), this.getAngleExtent(), this.type);
  124.    }
  125.  
  126.    public Rectangle2D getBounds2D() {
  127.       if (((RectangularShape)this).isEmpty()) {
  128.          return this.makeBounds(((RectangularShape)this).getX(), ((RectangularShape)this).getY(), ((RectangularShape)this).getWidth(), ((RectangularShape)this).getHeight());
  129.       } else {
  130.          double var1;
  131.          double var3;
  132.          double var5;
  133.          double var7;
  134.          if (this.getArcType() == 2) {
  135.             var7 = (double)0.0F;
  136.             var5 = (double)0.0F;
  137.             var3 = (double)0.0F;
  138.             var1 = (double)0.0F;
  139.          } else {
  140.             var3 = (double)1.0F;
  141.             var1 = (double)1.0F;
  142.             var7 = (double)-1.0F;
  143.             var5 = (double)-1.0F;
  144.          }
  145.  
  146.          double var9 = (double)0.0F;
  147.  
  148.          for(int var11 = 0; var11 < 6; ++var11) {
  149.             if (var11 < 4) {
  150.                var9 += (double)90.0F;
  151.                if (!this.containsAngle(var9)) {
  152.                   continue;
  153.                }
  154.             } else if (var11 == 4) {
  155.                var9 = this.getAngleStart();
  156.             } else {
  157.                var9 += this.getAngleExtent();
  158.             }
  159.  
  160.             double var12 = Math.toRadians(-var9);
  161.             double var14 = Math.cos(var12);
  162.             double var16 = Math.sin(var12);
  163.             var1 = Math.min(var1, var14);
  164.             var3 = Math.min(var3, var16);
  165.             var5 = Math.max(var5, var14);
  166.             var7 = Math.max(var7, var16);
  167.          }
  168.  
  169.          double var22 = ((RectangularShape)this).getWidth();
  170.          double var23 = ((RectangularShape)this).getHeight();
  171.          var5 = (var5 - var1) * (double)0.5F * var22;
  172.          var7 = (var7 - var3) * (double)0.5F * var23;
  173.          var1 = ((RectangularShape)this).getX() + (var1 * (double)0.5F + (double)0.5F) * var22;
  174.          var3 = ((RectangularShape)this).getY() + (var3 * (double)0.5F + (double)0.5F) * var23;
  175.          return this.makeBounds(var1, var3, var5, var7);
  176.       }
  177.    }
  178.  
  179.    protected abstract Rectangle2D makeBounds(double var1, double var3, double var5, double var7);
  180.  
  181.    static double normalizeDegrees(double var0) {
  182.       if (var0 > (double)180.0F) {
  183.          if (var0 <= (double)540.0F) {
  184.             var0 -= (double)360.0F;
  185.          } else {
  186.             var0 = Math.IEEEremainder(var0, (double)360.0F);
  187.             if (var0 == (double)-180.0F) {
  188.                var0 = (double)180.0F;
  189.             }
  190.          }
  191.       } else if (var0 <= (double)-180.0F) {
  192.          if (var0 > (double)-540.0F) {
  193.             var0 += (double)360.0F;
  194.          } else {
  195.             var0 = Math.IEEEremainder(var0, (double)360.0F);
  196.             if (var0 == (double)-180.0F) {
  197.                var0 = (double)180.0F;
  198.             }
  199.          }
  200.       }
  201.  
  202.       return var0;
  203.    }
  204.  
  205.    public boolean containsAngle(double var1) {
  206.       double var3 = this.getAngleExtent();
  207.       boolean var5 = var3 < (double)0.0F;
  208.       if (var5) {
  209.          var3 = -var3;
  210.       }
  211.  
  212.       if (var3 >= (double)360.0F) {
  213.          return true;
  214.       } else {
  215.          var1 = normalizeDegrees(var1) - normalizeDegrees(this.getAngleStart());
  216.          if (var5) {
  217.             var1 = -var1;
  218.          }
  219.  
  220.          if (var1 < (double)0.0F) {
  221.             var1 += (double)360.0F;
  222.          }
  223.  
  224.          return var1 >= (double)0.0F && var1 < var3;
  225.       }
  226.    }
  227.  
  228.    public boolean contains(double var1, double var3) {
  229.       double var5 = ((RectangularShape)this).getWidth();
  230.       if (var5 <= (double)0.0F) {
  231.          return false;
  232.       } else {
  233.          double var7 = (var1 - ((RectangularShape)this).getX()) / var5 - (double)0.5F;
  234.          double var9 = ((RectangularShape)this).getHeight();
  235.          if (var9 <= (double)0.0F) {
  236.             return false;
  237.          } else {
  238.             double var11 = (var3 - ((RectangularShape)this).getY()) / var9 - (double)0.5F;
  239.             double var13 = var7 * var7 + var11 * var11;
  240.             if (var13 >= (double)0.25F) {
  241.                return false;
  242.             } else {
  243.                double var15 = Math.abs(this.getAngleExtent());
  244.                if (var15 >= (double)360.0F) {
  245.                   return true;
  246.                } else {
  247.                   boolean var17 = this.containsAngle(-Math.toDegrees(Math.atan2(var11, var7)));
  248.                   if (this.type == 2) {
  249.                      return var17;
  250.                   } else {
  251.                      if (var17) {
  252.                         if (var15 >= (double)180.0F) {
  253.                            return true;
  254.                         }
  255.                      } else if (var15 <= (double)180.0F) {
  256.                         return false;
  257.                      }
  258.  
  259.                      double var18 = Math.toRadians(-this.getAngleStart());
  260.                      double var20 = Math.cos(var18);
  261.                      double var22 = Math.sin(var18);
  262.                      var18 += Math.toRadians(-this.getAngleExtent());
  263.                      double var24 = Math.cos(var18);
  264.                      double var26 = Math.sin(var18);
  265.                      boolean var28 = Line2D.relativeCCW(var20, var22, var24, var26, var1, var3) * Line2D.relativeCCW(var20, var22, var24, var26, (double)0.0F, (double)0.0F) >= 0;
  266.                      return var17 ? !var28 : var28;
  267.                   }
  268.                }
  269.             }
  270.          }
  271.       }
  272.    }
  273.  
  274.    public boolean intersects(double var1, double var3, double var5, double var7) {
  275.       if (!this.contains(var1, var3) && !this.contains(var1 + var5, var3) && !this.contains(var1, var3 + var7) && !this.contains(var1 + var5, var3 + var7)) {
  276.          var1 -= ((RectangularShape)this).getX() + ((RectangularShape)this).getWidth() / (double)2.0F;
  277.          var3 = (var3 - (((RectangularShape)this).getY() + ((RectangularShape)this).getHeight() / (double)2.0F)) * (double)-1.0F;
  278.          double var15 = ((RectangularShape)this).getWidth() / ((RectangularShape)this).getHeight();
  279.          if (var1 * var1 / (((RectangularShape)this).getWidth() / (double)2.0F * (((RectangularShape)this).getWidth() / (double)2.0F)) < (double)1.0F) {
  280.             if (var1 == (double)0.0F && (((RectangularShape)this).getHeight() / (double)2.0F >= var3 - var7 && ((RectangularShape)this).getHeight() / (double)2.0F <= var3 || (double)-1.0F * (((RectangularShape)this).getHeight() / (double)2.0F) >= var3 - var7 && (double)-1.0F * (((RectangularShape)this).getHeight() / (double)2.0F) <= var3)) {
  281.                if (this.containsAngle((Math.PI / 2D))) {
  282.                   return true;
  283.                }
  284.  
  285.                if (this.containsAngle(Math.PI)) {
  286.                   return true;
  287.                }
  288.             }
  289.  
  290.             double var11 = Math.abs(Math.sqrt(((double)1.0F - var1 * var1 / (((RectangularShape)this).getWidth() / (double)2.0F * (((RectangularShape)this).getWidth() / (double)2.0F))) * ((RectangularShape)this).getHeight() / (double)2.0F * (((RectangularShape)this).getHeight() / (double)2.0F)));
  291.             double var9 = Math.abs(Math.atan(var11 * var15 / var1));
  292.             if (var1 > (double)0.0F && (var11 >= var3 - var7 && var11 <= var3 || (double)-1.0F * var11 >= var3 - var7 && (double)-1.0F * var11 <= var3)) {
  293.                if (this.containsAngle(var9 / Math.PI * (double)180.0F)) {
  294.                   return true;
  295.                }
  296.  
  297.                if (this.containsAngle(((Math.PI * 2D) - var9) / Math.PI * (double)180.0F)) {
  298.                   return true;
  299.                }
  300.             }
  301.  
  302.             if (var1 < (double)0.0F && (var11 >= var3 - var7 && var11 <= var3 || (double)-1.0F * var11 >= var3 - var7 && (double)-1.0F * var11 <= var3)) {
  303.                if (this.containsAngle((Math.PI - var9) / Math.PI * (double)180.0F)) {
  304.                   return true;
  305.                }
  306.  
  307.                if (this.containsAngle((Math.PI + var9) / Math.PI * (double)180.0F)) {
  308.                   return true;
  309.                }
  310.             }
  311.          }
  312.  
  313.          if ((var1 + var5) * (var1 + var5) / (((RectangularShape)this).getWidth() / (double)2.0F * (((RectangularShape)this).getWidth() / (double)2.0F)) < (double)1.0F) {
  314.             if (var1 + var5 == (double)0.0F && (((RectangularShape)this).getHeight() / (double)2.0F >= var3 - var7 && ((RectangularShape)this).getHeight() / (double)2.0F <= var3 || (double)-1.0F * (((RectangularShape)this).getHeight() / (double)2.0F) >= var3 - var7 && (double)-1.0F * (((RectangularShape)this).getHeight() / (double)2.0F) <= var3)) {
  315.                if (this.containsAngle((Math.PI / 2D))) {
  316.                   return true;
  317.                }
  318.  
  319.                if (this.containsAngle(Math.PI)) {
  320.                   return true;
  321.                }
  322.             }
  323.  
  324.             double var22 = Math.abs(Math.sqrt(((double)1.0F - (var1 + var5) * (var1 + var5) / (((RectangularShape)this).getWidth() / (double)2.0F * (((RectangularShape)this).getWidth() / (double)2.0F))) * ((RectangularShape)this).getHeight() / (double)2.0F * (((RectangularShape)this).getHeight() / (double)2.0F)));
  325.             double var19 = Math.abs(Math.atan(var22 * var15 / (var1 + var5)));
  326.             if (var1 + var5 > (double)0.0F && (var22 >= var3 - var7 && var22 <= var3 || (double)-1.0F * var22 >= var3 - var7 && (double)-1.0F * var22 <= var3)) {
  327.                if (this.containsAngle(var19 / Math.PI * (double)180.0F)) {
  328.                   return true;
  329.                }
  330.  
  331.                if (this.containsAngle(((Math.PI * 2D) - var19) / Math.PI * (double)180.0F)) {
  332.                   return true;
  333.                }
  334.             }
  335.  
  336.             if (var1 + var5 < (double)0.0F && (var22 >= var3 - var7 && var22 <= var3 || (double)-1.0F * var22 >= var3 - var7 && (double)-1.0F * var22 <= var3)) {
  337.                if (this.containsAngle((Math.PI - var19) / Math.PI * (double)180.0F)) {
  338.                   return true;
  339.                }
  340.  
  341.                if (this.containsAngle((Math.PI + var19) / Math.PI * (double)180.0F)) {
  342.                   return true;
  343.                }
  344.             }
  345.          }
  346.  
  347.          if (var3 * var3 / (((RectangularShape)this).getHeight() / (double)2.0F * (((RectangularShape)this).getHeight() / (double)2.0F)) < (double)1.0F) {
  348.             if (var3 == (double)0.0F && (((RectangularShape)this).getWidth() / (double)2.0F >= var1 && ((RectangularShape)this).getWidth() / (double)2.0F <= var1 + var5 || (double)-1.0F * (((RectangularShape)this).getWidth() / (double)2.0F) >= var1 && (double)-1.0F * (((RectangularShape)this).getWidth() / (double)2.0F) <= var1 + var5)) {
  349.                if (this.containsAngle(Math.PI)) {
  350.                   return true;
  351.                }
  352.  
  353.                if (this.containsAngle((Math.PI * 2D))) {
  354.                   return true;
  355.                }
  356.             }
  357.  
  358.             double var13 = Math.abs(Math.sqrt(((double)1.0F - var3 * var3 / (((RectangularShape)this).getHeight() / (double)2.0F * (((RectangularShape)this).getHeight() / (double)2.0F))) * ((RectangularShape)this).getWidth() / (double)2.0F * (((RectangularShape)this).getWidth() / (double)2.0F)));
  359.             double var20 = Math.abs(Math.atan(var3 / (var13 / var15)));
  360.             if (var3 > (double)0.0F && (var13 >= var1 && var13 <= var1 + var5 || (double)-1.0F * var13 >= var1 && (double)-1.0F * var13 <= var1 + var5)) {
  361.                if (this.containsAngle(var20 / Math.PI * (double)180.0F)) {
  362.                   return true;
  363.                }
  364.  
  365.                if (this.containsAngle((Math.PI - var20) / Math.PI * (double)180.0F)) {
  366.                   return true;
  367.                }
  368.             }
  369.  
  370.             if (var3 < (double)0.0F && (var13 >= var1 && var13 <= var1 + var5 || (double)-1.0F * var13 >= var1 && (double)-1.0F * var13 <= var1 + var5)) {
  371.                if (this.containsAngle(((Math.PI * 2D) - var20) / Math.PI * (double)180.0F)) {
  372.                   return true;
  373.                }
  374.  
  375.                if (this.containsAngle((Math.PI + var20) / Math.PI * (double)180.0F)) {
  376.                   return true;
  377.                }
  378.             }
  379.          }
  380.  
  381.          if ((var3 - var7) * (var3 - var7) / (((RectangularShape)this).getHeight() / (double)2.0F * (((RectangularShape)this).getHeight() / (double)2.0F)) < (double)1.0F) {
  382.             if (var3 - var7 == (double)0.0F && (((RectangularShape)this).getWidth() / (double)2.0F >= var1 && ((RectangularShape)this).getWidth() / (double)2.0F <= var1 + var5 || (double)-1.0F * (((RectangularShape)this).getWidth() / (double)2.0F) >= var1 && (double)-1.0F * (((RectangularShape)this).getWidth() / (double)2.0F) <= var1 + var5)) {
  383.                if (this.containsAngle(Math.PI)) {
  384.                   return true;
  385.                }
  386.  
  387.                if (this.containsAngle((Math.PI * 2D))) {
  388.                   return true;
  389.                }
  390.             }
  391.  
  392.             double var23 = Math.abs(Math.sqrt(((double)1.0F - (var3 - var7) * (var3 - var7) / (((RectangularShape)this).getHeight() / (double)2.0F * (((RectangularShape)this).getHeight() / (double)2.0F))) * ((RectangularShape)this).getWidth() / (double)2.0F * (((RectangularShape)this).getWidth() / (double)2.0F)));
  393.             double var21 = Math.abs(Math.atan((var3 - var7) / (var23 / var15)));
  394.             if (var3 - var7 > (double)0.0F && (var23 >= var1 && var23 <= var1 + var5 || (double)-1.0F * var23 >= var1 && (double)-1.0F * var23 <= var1 + var5)) {
  395.                if (this.containsAngle(var21 / Math.PI * (double)180.0F)) {
  396.                   return true;
  397.                }
  398.  
  399.                if (this.containsAngle((Math.PI - var21) / Math.PI * (double)180.0F)) {
  400.                   return true;
  401.                }
  402.             }
  403.  
  404.             if (var3 - var7 < (double)0.0F && (var23 >= var1 && var23 <= var1 + var5 || (double)-1.0F * var23 >= var1 && (double)-1.0F * var23 <= var1 + var5)) {
  405.                if (this.containsAngle(((Math.PI * 2D) - var21) / Math.PI * (double)180.0F)) {
  406.                   return true;
  407.                }
  408.  
  409.                if (this.containsAngle((Math.PI + var21) / Math.PI * (double)180.0F)) {
  410.                   return true;
  411.                }
  412.             }
  413.          }
  414.  
  415.          return false;
  416.       } else {
  417.          return true;
  418.       }
  419.    }
  420.  
  421.    public boolean contains(double var1, double var3, double var5, double var7) {
  422.       return this.contains(var1, var3, var5, var7, (Rectangle2D)null);
  423.    }
  424.  
  425.    public boolean contains(Rectangle2D var1) {
  426.       return this.contains(((RectangularShape)var1).getX(), ((RectangularShape)var1).getY(), ((RectangularShape)var1).getWidth(), ((RectangularShape)var1).getHeight(), var1);
  427.    }
  428.  
  429.    private boolean contains(double var1, double var3, double var5, double var7, Rectangle2D var9) {
  430.       if (this.contains(var1, var3) && this.contains(var1 + var5, var3) && this.contains(var1, var3 + var7) && this.contains(var1 + var5, var3 + var7)) {
  431.          if (this.type == 2 && !(this.getAngleExtent() <= (double)180.0F)) {
  432.             if (var9 == null) {
  433.                var9 = new Rectangle2D.Double(var1, var3, var5, var7);
  434.             }
  435.  
  436.             double var10 = ((RectangularShape)this).getWidth() / (double)2.0F;
  437.             double var12 = ((RectangularShape)this).getHeight() / (double)2.0F;
  438.             double var14 = ((RectangularShape)this).getX() + var10;
  439.             double var16 = ((RectangularShape)this).getY() + var12;
  440.             double var18 = Math.toRadians(-this.getAngleStart());
  441.             double var20 = var14 + var10 * Math.cos(var18);
  442.             double var22 = var16 + var12 * Math.sin(var18);
  443.             if (((Rectangle2D)var9).intersectsLine(var14, var16, var20, var22)) {
  444.                return false;
  445.             } else {
  446.                var18 += Math.toRadians(-this.getAngleExtent());
  447.                var20 = var14 + var10 * Math.cos(var18);
  448.                var22 = var16 + var12 * Math.sin(var18);
  449.                return !((Rectangle2D)var9).intersectsLine(var14, var16, var20, var22);
  450.             }
  451.          } else {
  452.             return true;
  453.          }
  454.       } else {
  455.          return false;
  456.       }
  457.    }
  458.  
  459.    public PathIterator getPathIterator(AffineTransform var1) {
  460.       return new ArcIterator(this, var1);
  461.    }
  462. }
  463.