Assert.assertEquals(Angle.MAXIMUM, Heading.degrees(-180).difference(Heading.degrees(0))); Assert.assertEquals(Heading.degrees(-180).difference(Heading.degrees(20)), Angle.degrees(160)); Assert.assertEquals(Heading.degrees(-180).difference(Heading.degrees(70)), Angle.degrees(110)); Assert.assertEquals(Heading.degrees(-180).difference(Heading.degrees(90)), Angle.degrees(90)); Assert.assertEquals(Heading.degrees(-180).difference(Heading.degrees(160)), Angle.degrees(20)); Assert.assertEquals(Heading.degrees(-180).difference(Heading.degrees(180)), Angle.degrees(0)); Assert.assertEquals(Heading.degrees(-180).difference(Heading.degrees(200)), Angle.degrees(20)); Assert.assertEquals(Heading.degrees(-180).difference(Heading.degrees(250)), Angle.degrees(70)); Assert.assertEquals(Heading.degrees(-180).difference(Heading.degrees(270)), Angle.degrees(90)); Assert.assertEquals(Heading.degrees(-180).difference(Heading.degrees(290)), Angle.degrees(110)); Assert.assertEquals(Heading.degrees(-180).difference(Heading.degrees(340)), Angle.degrees(160)); Assert.assertEquals(Angle.MAXIMUM, Heading.degrees(-180).difference(Heading.degrees(360))); Assert.assertEquals(Heading.degrees(-180).difference(Heading.degrees(380)), Angle.degrees(160)); Assert.assertEquals(Angle.degrees(90), Heading.degrees(-90).difference(Heading.degrees(0))); Assert.assertEquals(Heading.degrees(-90).difference(Heading.degrees(20)), Angle.degrees(110)); Assert.assertEquals(Heading.degrees(-90).difference(Heading.degrees(70)),
Location.STEVENS_CREEK.shiftAlongGreatCircle(Heading.degrees(315), Distance.meters(3)), Location.STEVENS_CREEK.shiftAlongGreatCircle(Heading.degrees(310), Distance.meters(6)), Location.STEVENS_CREEK.shiftAlongGreatCircle(Heading.degrees(305), Distance.meters(9)), Location.STEVENS_CREEK.shiftAlongGreatCircle(Heading.degrees(300), Distance.meters(12)), Location.STEVENS_CREEK.shiftAlongGreatCircle(Heading.degrees(295), Distance.meters(15)), Location.STEVENS_CREEK.shiftAlongGreatCircle(Heading.degrees(290), Distance.meters(18)), Location.STEVENS_CREEK.shiftAlongGreatCircle(Heading.degrees(285), Distance.meters(21)), Location.STEVENS_CREEK.shiftAlongGreatCircle(Heading.degrees(280), Distance.meters(24)), Location.STEVENS_CREEK.shiftAlongGreatCircle(Heading.degrees(275), Distance.meters(27)), Location.STEVENS_CREEK.shiftAlongGreatCircle(Heading.degrees(270), Distance.meters(30))); Assert.assertFalse(halfCircleLike.isApproximatelyNSided(1, Angle.MINIMUM));
Assert.assertEquals(Angle.NONE, Heading.degrees(-180).difference(Angle.degrees(0))); Assert.assertEquals(Angle.degrees(20), Heading.degrees(-180).difference(Angle.degrees(20))); Assert.assertEquals(Angle.degrees(70), Heading.degrees(-180).difference(Angle.degrees(70))); Assert.assertEquals(Angle.degrees(90), Heading.degrees(-180).difference(Angle.degrees(90))); Assert.assertEquals(Heading.degrees(-180).difference(Angle.degrees(160)), Angle.degrees(160)); Assert.assertEquals(Angle.MAXIMUM, Heading.degrees(-180).difference(Angle.degrees(180))); Assert.assertEquals(Heading.degrees(-180).difference(Angle.degrees(200)), Angle.degrees(160)); Assert.assertEquals(Heading.degrees(-180).difference(Angle.degrees(250)), Angle.degrees(110)); Assert.assertEquals(Heading.degrees(-180).difference(Angle.degrees(270)), Angle.degrees(90)); Assert.assertEquals(Heading.degrees(-180).difference(Angle.degrees(290)), Angle.degrees(70)); Assert.assertEquals(Heading.degrees(-180).difference(Angle.degrees(340)), Angle.degrees(20)); Assert.assertEquals(Angle.NONE, Heading.degrees(-180).difference(Angle.degrees(360))); Assert.assertEquals(Heading.degrees(-180).difference(Angle.degrees(380)), Angle.degrees(20)); Assert.assertEquals(Angle.degrees(90), Heading.degrees(-90).difference(Angle.degrees(0))); Assert.assertEquals(Angle.degrees(70), Heading.degrees(-90).difference(Angle.degrees(20))); Assert.assertEquals(Angle.degrees(20), Heading.degrees(-90).difference(Angle.degrees(70))); Assert.assertEquals(Angle.NONE, Heading.degrees(-90).difference(Angle.degrees(90))); Assert.assertEquals(Angle.degrees(70), Heading.degrees(-90).difference(Angle.degrees(160))); Assert.assertEquals(Angle.degrees(90), Heading.degrees(-90).difference(Angle.degrees(180))); Assert.assertEquals(Heading.degrees(-90).difference(Angle.degrees(200)), Angle.degrees(110));
@Test public void testIsApproximatelyNSidedTriangleLike3() { // Test another triangular like shape with several additional inner points // POLYGON ((-122.003467 37.324233, -122.0034571 37.3242374, -122.0033991 37.3242654, // -122.0033691 37.324278, -122.0035536 37.3242908, -122.0034922 37.3242511, -122.003467 // 37.324233)) final Polygon polygon = new Polygon(Location.STEVENS_CREEK, Location.STEVENS_CREEK.shiftAlongGreatCircle(Heading.degrees(61), Distance.meters(1)), Location.STEVENS_CREEK.shiftAlongGreatCircle(Heading.degrees(59), Distance.meters(7)), Location.STEVENS_CREEK.shiftAlongGreatCircle(Heading.degrees(60), Distance.meters(10)), Location.STEVENS_CREEK.shiftAlongGreatCircle(Heading.degrees(310), Distance.meters(10)), Location.STEVENS_CREEK.shiftAlongGreatCircle(Heading.degrees(312), Distance.meters(3))); Assert.assertFalse(polygon.isApproximatelyNSided(1, Angle.MINIMUM)); Assert.assertFalse(polygon.isApproximatelyNSided(1, Angle.MAXIMUM)); Assert.assertFalse(polygon.isApproximatelyNSided(2, Angle.MINIMUM)); Assert.assertFalse(polygon.isApproximatelyNSided(2, Angle.MAXIMUM)); Assert.assertFalse(polygon.isApproximatelyNSided(3, Angle.MINIMUM)); Assert.assertFalse(polygon.isApproximatelyNSided(3, Angle.degrees(0.1))); Assert.assertFalse(polygon.isApproximatelyNSided(3, Angle.degrees(0.5))); Assert.assertFalse(polygon.isApproximatelyNSided(3, Angle.degrees(1))); Assert.assertFalse(polygon.isApproximatelyNSided(3, Angle.degrees(2))); Assert.assertTrue(polygon.isApproximatelyNSided(3, Angle.degrees(3))); Assert.assertTrue(polygon.isApproximatelyNSided(3, Angle.degrees(30))); }
@Test public void testHeadingTo() { final Location location1 = new Location(Latitude.degrees(37.336900), Longitude.degrees(-122.005414)); final Location location2 = new Location(Latitude.degrees(37.332758), Longitude.degrees(-122.005409)); Assert.assertTrue(Heading.degrees(180).difference(location1.headingTo(location2)) .isLessThan(Angle.degrees(1))); }
@Test public void testIsApproximatelyNSidedTriangleLike1() { // Test triangular like shape with one additional inner point // POLYGON ((-122.003467 37.324233, -122.003418 37.3242555, -122.0033691 37.324278, // -122.0035536 37.3242908, -122.003467 37.324233)) final Polygon polygon = new Polygon(Location.STEVENS_CREEK, Location.STEVENS_CREEK.shiftAlongGreatCircle(Heading.degrees(60), Distance.meters(5)), Location.STEVENS_CREEK.shiftAlongGreatCircle(Heading.degrees(60), Distance.meters(10)), Location.STEVENS_CREEK.shiftAlongGreatCircle(Heading.degrees(310), Distance.meters(10))); Assert.assertFalse(polygon.isApproximatelyNSided(1, Angle.MINIMUM)); Assert.assertFalse(polygon.isApproximatelyNSided(1, Angle.MAXIMUM)); Assert.assertFalse(polygon.isApproximatelyNSided(2, Angle.MINIMUM)); Assert.assertFalse(polygon.isApproximatelyNSided(2, Angle.MAXIMUM)); Assert.assertFalse(polygon.isApproximatelyNSided(3, Angle.MINIMUM)); Assert.assertTrue(polygon.isApproximatelyNSided(3, Angle.degrees(0.1))); Assert.assertTrue(polygon.isApproximatelyNSided(3, Angle.degrees(1))); Assert.assertTrue(polygon.isApproximatelyNSided(3, Angle.degrees(30))); }
@Test public void testIsApproximatelyNSidedTriangleLike2() { // Test another triangular like shape with one additional inner point // POLYGON ((-122.05576 37.332439, -122.055711 37.3324615, -122.055662 37.332484, // -122.0558466 37.3324968, -122.05576 37.332439)) final Polygon polygon = new Polygon(Location.STEVENS_CREEK, Location.STEVENS_CREEK.shiftAlongGreatCircle(Heading.degrees(59), Distance.meters(5)), Location.STEVENS_CREEK.shiftAlongGreatCircle(Heading.degrees(60), Distance.meters(10)), Location.STEVENS_CREEK.shiftAlongGreatCircle(Heading.degrees(310), Distance.meters(10))); Assert.assertFalse(polygon.isApproximatelyNSided(1, Angle.MINIMUM)); Assert.assertFalse(polygon.isApproximatelyNSided(1, Angle.MAXIMUM)); Assert.assertFalse(polygon.isApproximatelyNSided(2, Angle.MINIMUM)); Assert.assertFalse(polygon.isApproximatelyNSided(2, Angle.MAXIMUM)); Assert.assertFalse(polygon.isApproximatelyNSided(3, Angle.MINIMUM)); Assert.assertFalse(polygon.isApproximatelyNSided(3, Angle.degrees(0.1))); Assert.assertFalse(polygon.isApproximatelyNSided(3, Angle.degrees(0.5))); Assert.assertFalse(polygon.isApproximatelyNSided(3, Angle.degrees(1))); Assert.assertFalse(polygon.isApproximatelyNSided(3, Angle.degrees(2))); Assert.assertTrue(polygon.isApproximatelyNSided(3, Angle.degrees(3))); Assert.assertTrue(polygon.isApproximatelyNSided(3, Angle.degrees(30))); }