Circle.java Source code

Java tutorial

Introduction

Here is the source code for Circle.java

Source

//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;

    }

}