/* * Jitsi, the OpenSource Java VoIP and Instant Messaging client. * * Copyright @ 2015 Atlassian Pty Ltd * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package net.java.sip.communicator.service.protocol; import java.util.Objects; /** * A point representing a location in {@code (x,y)} coordinate space, * specified in integer precision. * <p> * This class has been inspired by the java.awt.Point class. * <p> * @author Julien Waechter * @author Emil Ivov */ public class WhiteboardPoint implements Cloneable { /** * The X coordinate of this WhiteboadPoint. */ private double x; /** * The Y coordinate of this <code>Point</code>. */ private double y; /** * Constructs and initializes a point with the same location as * the specified <tt>Point</tt> object. * @param p a point */ public WhiteboardPoint(WhiteboardPoint p) { this(p.x, p.y); } /** * Constructs and initializes a point at the specified <tt>(x,y)</tt> * location in the coordinate space. * * @param x the X coordinate of the newly constructed <code>Point</code> * @param y the Y coordinate of the newly constructed <code>Point</code> * @since 1.0 */ public WhiteboardPoint(double x, double y) { this.x = x; this.y = y; } /** * Returns the X coordinate of this <tt>WhiteboardPoint</tt>. * * @return the x coordinate of this <tt>WhiteboardPoint</tt>. */ public double getX() { return x; } /** * Returns the Y coordinate of this <tt>WhiteboardPoint</tt>. * * @return the y coordinate of this <tt>WhiteboardPoint</tt>. */ public double getY() { return y; } /** * Sets a new value to the x coordinate. * * @param x the new value of the x coordinate */ public void setX(double x) { this.x = x; } /** * Sets a new value to the y coordinate. * * @param y the new value of the y coordinate */ public void setY(double y) { this.y = y; } /** * Determines whether or not two points are equal. Two instances of * <tt>WhiteboardPoint</tt> are equal if the values of their * <tt>x</tt> and <tt>y</tt> member fields, representing * their position in the coordinate space, are the same. * * @param obj an object to be compared with this <tt>WhiteboardPoint</tt> * * @return <tt>true</tt> if the object to be compared is an instance of * <tt>WhiteboardPoint</tt> and has the same values; <tt>false</tt> * otherwise. */ @Override public boolean equals(Object obj) { if (obj instanceof WhiteboardPoint) { WhiteboardPoint pt = (WhiteboardPoint)obj; return (x == pt.x) && (y == pt.y); } return false; } @Override public int hashCode() { return Objects.hash(x, y); } /** * Returns a string representation of this point and its location * in the {@code (x,y)} coordinate space. This method is intended to be * used only for debugging purposes, and the content and format of the * returned string may vary between implementations. * * The returned string may be empty but may not be <code>null</code>. * * @return a string representation of this point */ @Override public String toString() { return getClass().getName() + "[x=" + x + ",y=" + y + "]"; } /** * Creates and returns a copy of this <tt>WhiteboardPoint</tt>. * * @return a clone of this <tt>WhiteboardPoint</tt> instance. */ @Override protected Object clone() { return new WhiteboardPoint(this); } /** * Calculates the distance from this point the given point. * * @param p the point to which to calculate the distance * @return the distance between this point and the given point */ public double distance(WhiteboardPoint p) { double PX = p.getX() - this.getX(); double PY = p.getY() - this.getY(); return Math.sqrt(PX * PX + PY * PY); } }