Mega Code Archive

 
Categories / Java / 2D Graphics GUI
 

Circle shape

//package net.slashie.utils; import java.util.ArrayList; import java.util.List; public class Circle {   private Position center;   private int radius;   public Circle (Position p, int radius){     this.center = p;     this.radius = radius;   }      public List<Position> getPoints (){     List<Position> ret = new ArrayList<Position>();     int d = 3 - (2 * radius);     Position runner = new Position(0, radius);     Position zero = new Position(0,0);     while (true) {       if (Position.flatDistance(zero, runner) <= radius)         addPoints(center, runner.x,runner.y, ret);       if (d < 0)         d = d + (4*runner.x)+6;       else {         d = d + 4 * (runner.x-runner.y) +10;         runner.y --;       }       runner.x++;       if (runner.y == 0)         break;     }     return ret;   }   private void addPoints(Position center, int x, int y, List<Position> collection){     collection.add(new Position(center.x + x, center.y + y));     collection.add(new Position(center.x + x, center.y - y));     collection.add(new Position(center.x - x, center.y + y));     collection.add(new Position(center.x - x, center.y - y));     collection.add(new Position(center.x + y, center.y + x));     collection.add(new Position(center.x + y, center.y - x));     collection.add(new Position(center.x - y, center.y + x));     collection.add(new Position(center.x - y, center.y - x));   } }  class Position implements java.io.Serializable {   public int x,y,z;   public int x(){     return x;   }      public int y(){     return y;   }      public int z(){     return z;   }         public Position(int px, int py){     x = px;     y = py;   }   public Position(int px, int py, int pz){     this(px, py);     z = pz;   }   public Position(Position p){     x = p.x;     y = p.y;     z = p.z;   }   public static Position add (Position a, Position b){     return new Position (a.x + b.x, a.y + b.y, a.z + b.z);   }   public static Position subs (Position a, Position b){     return new Position (a.x - b.x, a.y - b.y, a.z - b.z);   }   public static Position mul(Position a, int c){     return new Position (a.x * c, a.y * c, a.z * c);   }   public static Position mul(Position a, Position b){     return new Position (a.x * b.x, a.y * b.y, a.z * b.z);   }   public void mul(Position pos){     x *= pos.x;     y *= pos.y;     z *= pos.z;   }   public boolean equals(Object o){     if (o == null)       return false;     try {       if (((Position)o).x == x && ((Position)o).y == y && ((Position)o).z == z){         return true;       }     } catch (ClassCastException cce){       throw new RuntimeException("Error comparing points "+this+" "+o, cce);     }     return false;   }      public int hashCode() {     return toString().hashCode();   }   public String toString(){     return "("+x+","+y+","+z+")";   }   public static int flatDistance(Position a, Position b){     return (int) Math.sqrt(Math.pow(a.x - b.x, 2) + Math.pow (a.y - b.y, 2));   }   public static int flatDistance(int x1, int y1, int x2, int y2){     return (int) Math.sqrt(Math.pow(x1 - x2, 2) + Math.pow (y1 - y2, 2));   }      public static int distance(Position a, Position b){     return (int) Math.sqrt(Math.pow(a.x - b.x, 2) + Math.pow (a.y - b.y, 2));   }    /*  public static int distance(Position a, Position b){     return (int) Math.s(Math.pow(a.x - b.x, 2) + Math.pow (a.y - b.y, 2));   }*/   public void add(Position p){     x += p.x;     y += p.y;     z += p.z;   } }