org.opentripplanner.visibility.PolarPoint Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of otp Show documentation
Show all versions of otp Show documentation
The OpenTripPlanner multimodal journey planning system
/**
Ported by David Turner from Visilibity, by Karl J. Obermeyer
This port undoubtedly introduced a number of bugs (and removed some features).
Bug reports should be directed to the OpenTripPlanner project, unless they
can be reproduced in the original VisiLibity.
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 .
*/
package org.opentripplanner.visibility;
class PolarPoint extends VLPoint implements Comparable {
VLPoint polar_origin;
// Polar coordinates where radius always positive, and angle
// measured ccw from the world coordinate system's x-axis.
double range = Double.NaN;
Angle bearing = new Angle(Double.NaN);
public PolarPoint(VLPoint polar_origin_temp, VLPoint point_temp) {
this(polar_origin_temp, point_temp, 0);
}
public PolarPoint(VLPoint polar_origin_temp, VLPoint point_temp, double epsilon) {
super(point_temp);
polar_origin = polar_origin_temp.clone();
if (polar_origin.distance(point_temp) <= epsilon) {
bearing = new Angle(0.0);
range = 0.0;
} else {
bearing = new Angle(point_temp.y - polar_origin_temp.y, point_temp.x
- polar_origin_temp.x);
range = polar_origin_temp.distance(point_temp);
}
}
public void set_polar_origin(VLPoint polar_origin_temp) {
PolarPoint newPoint = new PolarPoint(polar_origin_temp, new VLPoint(x, y));
setFromPolarPoint(newPoint);
}
void setFromPolarPoint(PolarPoint newPoint) {
this.polar_origin = newPoint.polar_origin.clone();
this.range = newPoint.range;
this.bearing = newPoint.bearing.clone();
this.x = newPoint.x;
this.y = newPoint.y;
}
public PolarPoint clone() {
PolarPoint clone = new PolarPoint();
clone.setFromPolarPoint(this);
return clone;
}
public void set_x(double x_temp) {
PolarPoint newPoint = new PolarPoint(polar_origin, new VLPoint(x_temp, y));
setFromPolarPoint(newPoint);
}
public void set_y(double y_temp) {
PolarPoint newPoint = new PolarPoint(polar_origin, new VLPoint(x, y_temp));
setFromPolarPoint(newPoint);
}
public void set_range(double range_temp) {
range = range_temp;
x = polar_origin.x + range * Math.cos(bearing.get());
y = polar_origin.y + range * Math.sin(bearing.get());
}
public void set_bearing(Angle bearing_temp) {
bearing = bearing_temp.clone();
x = polar_origin.x + range * Math.cos(bearing.get());
y = polar_origin.y + range * Math.sin(bearing.get());
}
public boolean equals(Object o) {
if (!(o instanceof PolarPoint)) {
return false;
}
PolarPoint polar_point2 = (PolarPoint) o;
return polar_origin.equals(polar_point2.polar_origin) && range == polar_point2.range
&& bearing.equals(polar_point2.bearing);
}
public int compareTo(VLPoint point2) {
if (!(point2 instanceof PolarPoint)) {
return super.compareTo(point2);
}
PolarPoint polar_point2 = (PolarPoint) point2;
int bearingComp = bearing.compareTo(polar_point2.bearing);
if (bearingComp == 0) {
return (int) Math.signum(range - polar_point2.range);
}
return bearingComp;
}
void set_bearing_to_2pi() {
bearing.set_to_2pi();
}
public PolarPoint() {
super();
range = Double.NaN;
bearing = new Angle(Double.NaN);
}
public String toString() {
return "PolarPoint(" + bearing + " " + range + ") of " + super.toString();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy