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