package br.com.etyllica.core.linear; /** * * @author yuripourre * */ public class Point2D { protected String name = ""; protected double x = 0.0; protected double y = 0.0; protected int color = 0x000000;//Black Hex Value public Point2D() { super(); setLocation(0, 0); } public Point2D(double x, double y, int color) { this(x,y); this.color = color; } public Point2D(double x, double y, String name) { this(x,y); this.name = name; } public Point2D(double x, double y) { super(); setLocation(x, y); } public Point2D(Point2D point) { super(); setLocation(point.x, point.y); } public double getX() { return x; } public void setX(double x) { this.x = x; } public double getY() { return y; } public void setY(double y) { this.y = y; } public void setLocation(double x, double y) { setX(x); setY(y); } public void setOffset(double x, double y) { setOffsetX(x); setOffsetY(y); } public void setOffsetX(double x) { this.x += x; } public void setOffsetY(double y) { this.y += y; } public String getName() { return name; } public void setName(String name) { this.name = name; } public double angle(Point2D point) { return angle(point.getX(), point.getY()); } public double angle(double px, double py) { return angleXY(px, py); } public double angleXY(double px, double py) { double deltaX = px - x; double deltaY = py - y; double angleInDegrees = Math.atan2(deltaY, deltaX) * 180 / Math.PI; return angleInDegrees; } public static double angle(double px, double py, double qx, double qy) { double deltaX = qx - px; double deltaY = qy - py; double angleInDegrees = Math.atan2(deltaY, deltaX) * 180 / Math.PI; return angleInDegrees; } public void rotate(double cx, double cy, double degreeAngle) { double angle = Math.toRadians(degreeAngle); double nx = cx + (x-cx)*Math.cos(angle) - (y-cy)*Math.sin(angle); double ny = cy + (x-cx)*Math.sin(angle) + (y-cy)*Math.cos(angle); x = nx; y = ny; } public void rotate(Point2D p, double degreeAngle) { rotate(p.getX(), p.getY(), degreeAngle); } public static boolean isRightTurn(Point2D a, Point2D b, Point2D c) { return (b.x - a.x)*(c.y - a.y) - (b.y - a.y)*(c.x - a.x) > 0; } public double distance(Point2D point) { return distance(point.getX(), point.getY()); } public double distance(double px, double py) { return distance(px, py, this.x, this.y); } public static double distance(double px, double py, double qx, double qy) { double difX = px - qx; double difY = py - qy; double dist = Math.sqrt(Math.pow(difX, 2) + Math.pow(difY, 2)); return dist; } public Point2D distantPoint(Point2D b, double distance) { double deltaX = x-b.getX(); double deltaY = y-b.getY(); double dist = Math.sqrt(deltaX*deltaX + deltaY*deltaY); deltaX /= dist; deltaY /= dist; Point2D c = new Point2D(x-distance*deltaX, y-distance*deltaY); return c; } public int getColor() { return color; } public void setColor(int color) { this.color = color; } public static Point2D clone(Point2D point) { return new Point2D(point.getX(), point.getY()); } @Override public int hashCode() { final int prime = 31; int result = 1; long temp; temp = Double.doubleToLongBits(x); result = prime * result + (int) (temp ^ (temp >>> 32)); temp = Double.doubleToLongBits(y); result = prime * result + (int) (temp ^ (temp >>> 32)); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Point2D other = (Point2D) obj; if (Double.doubleToLongBits(x) != Double.doubleToLongBits(other.x)) return false; if (Double.doubleToLongBits(y) != Double.doubleToLongBits(other.y)) return false; return true; } }