calcAngle back to clockwise positive + fine-tuning
This commit is contained in:
parent
20e1d5aabb
commit
6bd435723f
2 changed files with 65 additions and 29 deletions
|
|
@ -33,7 +33,7 @@ public class RoutingContextTest {
|
|||
lat2 = toOsmLat(48.818043);
|
||||
assertEquals(
|
||||
"Works for an angle between -pi/4 and pi/4",
|
||||
10.,
|
||||
-10.,
|
||||
rc.calcAngle(lon0, lat0, lon1, lat1, lon2, lat2),
|
||||
0.05 * 10.
|
||||
);
|
||||
|
|
@ -59,7 +59,7 @@ public class RoutingContextTest {
|
|||
lat2 = toOsmLat(48.817799);
|
||||
assertEquals(
|
||||
"Works for an angle between -3*pi/4 and -pi/4",
|
||||
-100.,
|
||||
100.,
|
||||
rc.calcAngle(lon0, lat0, lon1, lat1, lon2, lat2),
|
||||
0.1 * 100.
|
||||
);
|
||||
|
|
@ -72,9 +72,49 @@ public class RoutingContextTest {
|
|||
lat2 = toOsmLat(48.818264);
|
||||
assertEquals(
|
||||
"Works for an angle between pi/4 and 3*pi/4",
|
||||
100.,
|
||||
-100.,
|
||||
rc.calcAngle(lon0, lat0, lon1, lat1, lon2, lat2),
|
||||
0.1 * 100.
|
||||
);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCalcAngle2() {
|
||||
RoutingContext rc = new RoutingContext();
|
||||
int lon1 = 8500000;
|
||||
int lat1 = 49500000;
|
||||
|
||||
double[] lonlat2m = CheapRulerSingleton.getLonLatToMeterScales( lat1 );
|
||||
double lon2m = lonlat2m[0];
|
||||
double lat2m = lonlat2m[1];
|
||||
|
||||
for ( double afrom = -175.; afrom < 180.; afrom += 10. )
|
||||
{
|
||||
double sf = Math.sin( afrom * Math.PI / 180. );
|
||||
double cf = Math.cos( afrom * Math.PI / 180. );
|
||||
|
||||
int lon0 = (int)(0.5+lon1 - cf*150./lon2m );
|
||||
int lat0 = (int)(0.5+lat1 - sf*150./lat2m );
|
||||
|
||||
for ( double ato = -177.; ato < 180.; ato += 10. )
|
||||
{
|
||||
double st = Math.sin( ato * Math.PI / 180. );
|
||||
double ct = Math.cos( ato * Math.PI / 180. );
|
||||
|
||||
int lon2 = (int)(0.5+lon1 + ct*250./lon2m);
|
||||
int lat2 = (int)(0.5+lat1 + st*250./lat2m);
|
||||
|
||||
double a1 = afrom - ato;
|
||||
if ( a1 > 180. ) a1 -= 360.;
|
||||
if ( a1 < -180. ) a1 += 360.;
|
||||
double a2 = rc.calcAngle( lon0, lat0, lon1, lat1, lon2, lat2 );
|
||||
double c1 = Math.cos( a1 * Math.PI / 180. );
|
||||
double c2 = rc.getCosAngle();
|
||||
|
||||
assertEquals( "angle mismatch for afrom=" + afrom + " ato=" + ato, a1, a2, 0.2 );
|
||||
assertEquals( "cosinus mismatch for afrom=" + afrom + " ato=" + ato, c1, c2, 0.001 );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue