home *** CD-ROM | disk | FTP | other *** search
/ Sky at Night 2007 June / SAN CD 6-2007 CD-ROM 25.iso / pc / Software / AstroGrav_Win / Java / jre1.6.0 / lib / rt.jar / java / awt / Polygon.class (.txt) < prev    next >
Encoding:
Java Class File  |  2006-11-29  |  3.9 KB  |  281 lines

  1. package java.awt;
  2.  
  3. import java.awt.geom.AffineTransform;
  4. import java.awt.geom.PathIterator;
  5. import java.awt.geom.Point2D;
  6. import java.awt.geom.Rectangle2D;
  7. import java.io.Serializable;
  8. import java.util.Arrays;
  9. import sun.awt.geom.Crossings;
  10.  
  11. public class Polygon implements Shape, Serializable {
  12.    public int npoints;
  13.    public int[] xpoints;
  14.    public int[] ypoints;
  15.    protected Rectangle bounds;
  16.    private static final long serialVersionUID = -6460061437900069969L;
  17.    private static final int MIN_LENGTH = 4;
  18.  
  19.    public Polygon() {
  20.       this.xpoints = new int[4];
  21.       this.ypoints = new int[4];
  22.    }
  23.  
  24.    public Polygon(int[] var1, int[] var2, int var3) {
  25.       if (var3 <= var1.length && var3 <= var2.length) {
  26.          if (var3 < 0) {
  27.             throw new NegativeArraySizeException("npoints < 0");
  28.          } else {
  29.             this.npoints = var3;
  30.             this.xpoints = Arrays.copyOf(var1, var3);
  31.             this.ypoints = Arrays.copyOf(var2, var3);
  32.          }
  33.       } else {
  34.          throw new IndexOutOfBoundsException("npoints > xpoints.length || npoints > ypoints.length");
  35.       }
  36.    }
  37.  
  38.    public void reset() {
  39.       this.npoints = 0;
  40.       this.bounds = null;
  41.    }
  42.  
  43.    public void invalidate() {
  44.       this.bounds = null;
  45.    }
  46.  
  47.    public void translate(int var1, int var2) {
  48.       for(int var3 = 0; var3 < this.npoints; ++var3) {
  49.          int[] var10000 = this.xpoints;
  50.          var10000[var3] += var1;
  51.          var10000 = this.ypoints;
  52.          var10000[var3] += var2;
  53.       }
  54.  
  55.       if (this.bounds != null) {
  56.          this.bounds.translate(var1, var2);
  57.       }
  58.  
  59.    }
  60.  
  61.    void calculateBounds(int[] var1, int[] var2, int var3) {
  62.       int var4 = Integer.MAX_VALUE;
  63.       int var5 = Integer.MAX_VALUE;
  64.       int var6 = Integer.MIN_VALUE;
  65.       int var7 = Integer.MIN_VALUE;
  66.  
  67.       for(int var8 = 0; var8 < var3; ++var8) {
  68.          int var9 = var1[var8];
  69.          var4 = Math.min(var4, var9);
  70.          var6 = Math.max(var6, var9);
  71.          int var10 = var2[var8];
  72.          var5 = Math.min(var5, var10);
  73.          var7 = Math.max(var7, var10);
  74.       }
  75.  
  76.       this.bounds = new Rectangle(var4, var5, var6 - var4, var7 - var5);
  77.    }
  78.  
  79.    void updateBounds(int var1, int var2) {
  80.       if (var1 < this.bounds.x) {
  81.          this.bounds.width += this.bounds.x - var1;
  82.          this.bounds.x = var1;
  83.       } else {
  84.          this.bounds.width = Math.max(this.bounds.width, var1 - this.bounds.x);
  85.       }
  86.  
  87.       if (var2 < this.bounds.y) {
  88.          this.bounds.height += this.bounds.y - var2;
  89.          this.bounds.y = var2;
  90.       } else {
  91.          this.bounds.height = Math.max(this.bounds.height, var2 - this.bounds.y);
  92.       }
  93.  
  94.    }
  95.  
  96.    public void addPoint(int var1, int var2) {
  97.       if (this.npoints >= this.xpoints.length || this.npoints >= this.ypoints.length) {
  98.          int var3 = this.npoints * 2;
  99.          if (var3 < 4) {
  100.             var3 = 4;
  101.          } else if ((var3 & var3 - 1) != 0) {
  102.             var3 = Integer.highestOneBit(var3);
  103.          }
  104.  
  105.          this.xpoints = Arrays.copyOf(this.xpoints, var3);
  106.          this.ypoints = Arrays.copyOf(this.ypoints, var3);
  107.       }
  108.  
  109.       this.xpoints[this.npoints] = var1;
  110.       this.ypoints[this.npoints] = var2;
  111.       ++this.npoints;
  112.       if (this.bounds != null) {
  113.          this.updateBounds(var1, var2);
  114.       }
  115.  
  116.    }
  117.  
  118.    public Rectangle getBounds() {
  119.       return this.getBoundingBox();
  120.    }
  121.  
  122.    /** @deprecated */
  123.    @Deprecated
  124.    public Rectangle getBoundingBox() {
  125.       if (this.npoints == 0) {
  126.          return new Rectangle();
  127.       } else {
  128.          if (this.bounds == null) {
  129.             this.calculateBounds(this.xpoints, this.ypoints, this.npoints);
  130.          }
  131.  
  132.          return this.bounds.getBounds();
  133.       }
  134.    }
  135.  
  136.    public boolean contains(Point var1) {
  137.       return this.contains(var1.x, var1.y);
  138.    }
  139.  
  140.    public boolean contains(int var1, int var2) {
  141.       return this.contains((double)var1, (double)var2);
  142.    }
  143.  
  144.    /** @deprecated */
  145.    @Deprecated
  146.    public boolean inside(int var1, int var2) {
  147.       return this.contains((double)var1, (double)var2);
  148.    }
  149.  
  150.    public Rectangle2D getBounds2D() {
  151.       return this.getBounds();
  152.    }
  153.  
  154.    public boolean contains(double var1, double var3) {
  155.       if (this.npoints > 2 && this.getBoundingBox().contains(var1, var3)) {
  156.          int var5 = 0;
  157.          int var6 = this.xpoints[this.npoints - 1];
  158.          int var7 = this.ypoints[this.npoints - 1];
  159.  
  160.          for(int var10 = 0; var10 < this.npoints; ++var10) {
  161.             int var8 = this.xpoints[var10];
  162.             int var9 = this.ypoints[var10];
  163.             if (var9 != var7) {
  164.                label74: {
  165.                   int var11;
  166.                   if (var8 < var6) {
  167.                      if (var1 >= (double)var6) {
  168.                         break label74;
  169.                      }
  170.  
  171.                      var11 = var8;
  172.                   } else {
  173.                      if (var1 >= (double)var8) {
  174.                         break label74;
  175.                      }
  176.  
  177.                      var11 = var6;
  178.                   }
  179.  
  180.                   double var12;
  181.                   double var14;
  182.                   if (var9 < var7) {
  183.                      if (var3 < (double)var9 || var3 >= (double)var7) {
  184.                         break label74;
  185.                      }
  186.  
  187.                      if (var1 < (double)var11) {
  188.                         ++var5;
  189.                         break label74;
  190.                      }
  191.  
  192.                      var12 = var1 - (double)var8;
  193.                      var14 = var3 - (double)var9;
  194.                   } else {
  195.                      if (var3 < (double)var7 || var3 >= (double)var9) {
  196.                         break label74;
  197.                      }
  198.  
  199.                      if (var1 < (double)var11) {
  200.                         ++var5;
  201.                         break label74;
  202.                      }
  203.  
  204.                      var12 = var1 - (double)var6;
  205.                      var14 = var3 - (double)var7;
  206.                   }
  207.  
  208.                   if (var12 < var14 / (double)(var7 - var9) * (double)(var6 - var8)) {
  209.                      ++var5;
  210.                   }
  211.                }
  212.             }
  213.  
  214.             var6 = var8;
  215.             var7 = var9;
  216.          }
  217.  
  218.          return (var5 & 1) != 0;
  219.       } else {
  220.          return false;
  221.       }
  222.    }
  223.  
  224.    private Crossings getCrossings(double var1, double var3, double var5, double var7) {
  225.       Crossings.EvenOdd var9 = new Crossings.EvenOdd(var1, var3, var5, var7);
  226.       int var10 = this.xpoints[this.npoints - 1];
  227.       int var11 = this.ypoints[this.npoints - 1];
  228.  
  229.       for(int var14 = 0; var14 < this.npoints; ++var14) {
  230.          int var12 = this.xpoints[var14];
  231.          int var13 = this.ypoints[var14];
  232.          if (((Crossings)var9).accumulateLine((double)var10, (double)var11, (double)var12, (double)var13)) {
  233.             return null;
  234.          }
  235.  
  236.          var10 = var12;
  237.          var11 = var13;
  238.       }
  239.  
  240.       return var9;
  241.    }
  242.  
  243.    public boolean contains(Point2D var1) {
  244.       return this.contains(var1.getX(), var1.getY());
  245.    }
  246.  
  247.    public boolean intersects(double var1, double var3, double var5, double var7) {
  248.       if (this.npoints > 0 && this.getBoundingBox().intersects(var1, var3, var5, var7)) {
  249.          Crossings var9 = this.getCrossings(var1, var3, var1 + var5, var3 + var7);
  250.          return var9 == null || !var9.isEmpty();
  251.       } else {
  252.          return false;
  253.       }
  254.    }
  255.  
  256.    public boolean intersects(Rectangle2D var1) {
  257.       return this.intersects(var1.getX(), var1.getY(), var1.getWidth(), var1.getHeight());
  258.    }
  259.  
  260.    public boolean contains(double var1, double var3, double var5, double var7) {
  261.       if (this.npoints > 0 && this.getBoundingBox().intersects(var1, var3, var5, var7)) {
  262.          Crossings var9 = this.getCrossings(var1, var3, var1 + var5, var3 + var7);
  263.          return var9 != null && var9.covers(var3, var3 + var7);
  264.       } else {
  265.          return false;
  266.       }
  267.    }
  268.  
  269.    public boolean contains(Rectangle2D var1) {
  270.       return this.contains(var1.getX(), var1.getY(), var1.getWidth(), var1.getHeight());
  271.    }
  272.  
  273.    public PathIterator getPathIterator(AffineTransform var1) {
  274.       return new PolygonPathIterator(this, this, var1);
  275.    }
  276.  
  277.    public PathIterator getPathIterator(AffineTransform var1, double var2) {
  278.       return this.getPathIterator(var1);
  279.    }
  280. }
  281.