Java tutorial
//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; } }