diff --git a/brouter-core/src/main/java/btools/router/OsmNodeNamed.java b/brouter-core/src/main/java/btools/router/OsmNodeNamed.java index 64de5d2..0f75fad 100644 --- a/brouter-core/src/main/java/btools/router/OsmNodeNamed.java +++ b/brouter-core/src/main/java/btools/router/OsmNodeNamed.java @@ -28,9 +28,8 @@ public class OsmNodeNamed extends OsmNode public double distanceWithinRadius(int lon1, int lat1, int lon2, int lat2, double totalSegmentLength) { double[] lonlat2m = CheapRulerSingleton.getLonLatToMeterScales( (lat1 + lat2) >> 1 ); - double realRadius = radius * 110984.; - boolean isFirstPointWithinCircle = CheapRulerSingleton.distance(lon1, lat1, ilon, ilat) < realRadius; - boolean isLastPointWithinCircle = CheapRulerSingleton.distance(lon2, lat2, ilon, ilat) < realRadius; + boolean isFirstPointWithinCircle = CheapRulerSingleton.distance(lon1, lat1, ilon, ilat) < radius; + boolean isLastPointWithinCircle = CheapRulerSingleton.distance(lon2, lat2, ilon, ilat) < radius; // First point is within the circle if (isFirstPointWithinCircle) { // Last point is within the circle @@ -62,7 +61,7 @@ public class OsmNodeNamed extends OsmNode double initialToCenter = CheapRulerSingleton.distance(ilon, ilat, lon1, lat1); // Half length of the segment within the circle double halfDistanceWithin = Math.sqrt( - realRadius*realRadius - ( + radius*radius - ( initialToCenter*initialToCenter - initialToProject*initialToProject ) diff --git a/brouter-core/src/main/java/btools/router/RoutingContext.java b/brouter-core/src/main/java/btools/router/RoutingContext.java index c43e4bd..3db5d1d 100644 --- a/brouter-core/src/main/java/btools/router/RoutingContext.java +++ b/brouter-core/src/main/java/btools/router/RoutingContext.java @@ -426,7 +426,7 @@ public final class RoutingContext double dd = Math.sqrt( (dx10*dx10 + dy10*dy10)*(dx21*dx21 + dy21*dy21) ); if ( dd == 0. ) { cosangle = 1.; return 0.; } - double sinp = (dy10*dy21 - dx10*dx21)/dd; + double sinp = (dx10*dy21 - dy10*dx21)/dd; double cosp = (dy10*dy21 + dx10*dx21)/dd; cosangle = cosp; diff --git a/brouter-core/src/test/java/btools/router/OsmNodeNamedTest.java b/brouter-core/src/test/java/btools/router/OsmNodeNamedTest.java index 8a899cf..cc31b52 100644 --- a/brouter-core/src/test/java/btools/router/OsmNodeNamedTest.java +++ b/brouter-core/src/test/java/btools/router/OsmNodeNamedTest.java @@ -29,7 +29,7 @@ public class OsmNodeNamedTest { node.ilon = toOsmLon(2.334243); node.ilat = toOsmLat(48.824017); // Radius - node.radius = 30 / 110984.; + node.radius = 30; // Check distance within radius is correctly computed if the segment passes through the center lon1 = toOsmLon(2.332559); @@ -39,9 +39,9 @@ public class OsmNodeNamedTest { double totalSegmentLength = CheapRulerSingleton.distance(lon1, lat1, lon2, lat2); assertEquals( "Works for segment aligned with the nogo center", - 2 * node.radius * 110984., + 2 * node.radius, node.distanceWithinRadius(lon1, lat1, lon2, lat2, totalSegmentLength), - 0.01 * (2 * node.radius * 110984.) + 0.01 * (2 * node.radius) ); // Check distance within radius is correctly computed for a given circle diff --git a/brouter-util/src/main/java/btools/util/CheapRulerSingleton.java b/brouter-util/src/main/java/btools/util/CheapRulerSingleton.java index 7872390..8138e00 100644 --- a/brouter-util/src/main/java/btools/util/CheapRulerSingleton.java +++ b/brouter-util/src/main/java/btools/util/CheapRulerSingleton.java @@ -33,7 +33,7 @@ public final class CheapRulerSingleton { } private static double[] calcKxKyFromILat(int ilat) { - double lat = DEG_TO_RAD*ilat*ILATLNG_TO_LATLNG - 90; + double lat = DEG_TO_RAD*(ilat*ILATLNG_TO_LATLNG - 90); double cos = Math.cos(lat); double cos2 = 2 * cos * cos - 1; double cos3 = 2 * cos * cos2 - cos;