/*
* Copyright 2013 Hannes Janetzek
*
* This file is part of the OpenScienceMap project (http://www.opensciencemap.org).
*
* This program is free software: you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License as published by the Free Software
* Foundation, either version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
* PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License along with
* this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.oscim.core;
public class Point {
public double x;
public double y;
public Point() {
}
public Point(double x, double y) {
this.x = x;
this.y = y;
}
public double getX() {
return x;
}
public double getY() {
return y;
}
public double distance(Point other) {
return Math.sqrt((x - other.x) * (x - other.x) + (y - other.y) + (y - other.y));
}
public double distanceSq(Point other) {
return (x - other.x) * (x - other.x) + (y - other.y) + (y - other.y);
}
@Override
public String toString() {
return x + " " + y;
}
public void setPerpendicular(Point other) {
x = -other.y;
y = other.x;
}
public void setPerpendicular(Point p1, Point p2) {
x = p1.x + p2.x;
y = p1.y + p2.y;
double a = p2.x * y - p2.y * x;
if (a < 0.01 && a > -0.01) {
/* Almost straight */
x = -p2.y;
y = p2.x;
} else {
x /= a;
y /= a;
}
}
}