| /* |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You under the Apache License, Version 2.0 |
| * (the "License"); you may not use this file except in compliance with |
| * the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| package org.apache.lucene.spatial3d.geom; |
| |
| import org.junit.Test; |
| |
| import static org.junit.Assert.assertEquals; |
| import static org.junit.Assert.assertFalse; |
| import static org.junit.Assert.assertTrue; |
| |
| public class GeoConvexPolygonTest { |
| |
| |
| @Test |
| public void testPolygonPointWithin() { |
| GeoConvexPolygon c; |
| GeoPoint gp; |
| c = new GeoConvexPolygon(PlanetModel.SPHERE, -0.1, -0.5); |
| c.addPoint(0.0, -0.6, false); |
| c.addPoint(0.1, -0.5, false); |
| c.addPoint(0.0, -0.4, false); |
| c.done(false); |
| // Sample some points within |
| gp = new GeoPoint(PlanetModel.SPHERE, 0.0, -0.5); |
| assertTrue(c.isWithin(gp)); |
| gp = new GeoPoint(PlanetModel.SPHERE, 0.0, -0.55); |
| assertTrue(c.isWithin(gp)); |
| gp = new GeoPoint(PlanetModel.SPHERE, 0.0, -0.45); |
| assertTrue(c.isWithin(gp)); |
| gp = new GeoPoint(PlanetModel.SPHERE, -0.05, -0.5); |
| assertTrue(c.isWithin(gp)); |
| gp = new GeoPoint(PlanetModel.SPHERE, 0.05, -0.5); |
| assertTrue(c.isWithin(gp)); |
| // Sample some nearby points outside, and compute distance-to-shape for them as well |
| gp = new GeoPoint(PlanetModel.SPHERE, 0.0, -0.65); |
| assertFalse(c.isWithin(gp)); |
| assertEquals(0.05,c.computeOutsideDistance(DistanceStyle.ARC,gp),1e-12); |
| assertEquals(0.05,c.computeOutsideDistance(DistanceStyle.NORMAL,gp),1e-3); |
| assertEquals(0.05,c.computeOutsideDistance(DistanceStyle.LINEAR,gp),1e-3); |
| gp = new GeoPoint(PlanetModel.SPHERE, 0.0, -0.35); |
| assertFalse(c.isWithin(gp)); |
| gp = new GeoPoint(PlanetModel.SPHERE, -0.15, -0.5); |
| assertFalse(c.isWithin(gp)); |
| gp = new GeoPoint(PlanetModel.SPHERE, 0.15, -0.5); |
| assertFalse(c.isWithin(gp)); |
| // Random points outside |
| gp = new GeoPoint(PlanetModel.SPHERE, 0.0, 0.0); |
| assertFalse(c.isWithin(gp)); |
| gp = new GeoPoint(PlanetModel.SPHERE, Math.PI * 0.5, 0.0); |
| assertFalse(c.isWithin(gp)); |
| gp = new GeoPoint(PlanetModel.SPHERE, 0.0, Math.PI); |
| assertFalse(c.isWithin(gp)); |
| } |
| |
| @Test |
| public void testPolygonBounds() { |
| GeoConvexPolygon c; |
| LatLonBounds b; |
| |
| c = new GeoConvexPolygon(PlanetModel.SPHERE, -0.1, -0.5); |
| c.addPoint(0.0, -0.6, false); |
| c.addPoint(0.1, -0.5, false); |
| c.addPoint(0.0, -0.4, false); |
| c.done(false); |
| |
| b = new LatLonBounds(); |
| c.getBounds(b); |
| assertFalse(b.checkNoLongitudeBound()); |
| assertFalse(b.checkNoTopLatitudeBound()); |
| assertFalse(b.checkNoBottomLatitudeBound()); |
| assertEquals(-0.6, b.getLeftLongitude(), 0.000001); |
| assertEquals(-0.4, b.getRightLongitude(), 0.000001); |
| assertEquals(-0.1, b.getMinLatitude(), 0.000001); |
| assertEquals(0.1, b.getMaxLatitude(), 0.000001); |
| } |
| |
| } |