public void MonotoneSubdivisionAlgorithmConstructorTest() { // predefined polygon (which is extended) MonotoneSubdivisionAlgorithm algorithm = new MonotoneSubdivisionAlgorithm(_shell); Assert.AreEqual(_shell.Count + 1, algorithm.Shell.Count); Assert.IsTrue(_shell.SequenceEqual(algorithm.Shell.Take(_shell.Count))); Assert.AreEqual(algorithm.Shell[0], algorithm.Shell[algorithm.Shell.Count - 1]); // random polygon IBasicPolygon polygon = RandomPolygonGenerator.CreateRandomPolygon(100, new Coordinate(10, 10), new Coordinate(50, 50)); algorithm = new MonotoneSubdivisionAlgorithm(polygon.Shell.Coordinates); Assert.IsTrue(polygon.Shell.SequenceEqual(algorithm.Shell)); // exceptions Assert.IsTrue(polygon.Shell.SequenceEqual(algorithm.Shell)); Assert.Throws <ArgumentNullException>(() => algorithm = new MonotoneSubdivisionAlgorithm(null)); }
public void MonotoneSubdivisionTriangulateTest() { for (Int32 polygonNumber = 1; polygonNumber < 10; polygonNumber++) { IBasicPolygon polygon = RandomPolygonGenerator.CreateRandomPolygon(10 * polygonNumber, new Coordinate(10, 10), new Coordinate(50, 50)); IReadOnlyList <Coordinate[]> triangles = MonotoneSubdivisionAlgorithm.Triangulate(polygon.Shell); triangles.Count.ShouldBe(polygon.Shell.Count - 3); foreach (Coordinate[] triangle in triangles) { triangle.Length.ShouldBe(3); triangle.ShouldBeSubsetOf(polygon.Shell); } } }
public void RandomPolygonGeneratorCreateRandomPolygonTest() { // check properties of generated polygons Int32 coordinateNumber = 10; Coordinate minCoordinate = new Coordinate(10, 10); Coordinate maxCoordinate = new Coordinate(20, 20); Double convexityRatio = 0.1; for (Int32 polygonNumber = 1; polygonNumber < 100; polygonNumber++) { IBasicPolygon randomPolygon = RandomPolygonGenerator.CreateRandomPolygon(coordinateNumber * polygonNumber, minCoordinate, maxCoordinate); Assert.AreEqual(coordinateNumber * polygonNumber + 1, randomPolygon.Shell.Count); // number of coordinates Assert.AreEqual(Orientation.CounterClockwise, PolygonAlgorithms.Orientation(randomPolygon)); // orientation foreach (Coordinate coordinate in randomPolygon.Shell) { Assert.True(coordinate.X > minCoordinate.X && coordinate.X <maxCoordinate.X && coordinate.Y> minCoordinate.Y && coordinate.Y < maxCoordinate.Y); // all coordinates are located in the rectangle } Assert.IsFalse(ShamosHoeyAlgorithm.Intersects(randomPolygon.Shell)); // no intersection } // check convexity for (Int32 polygonNumber = 1; polygonNumber < 100; polygonNumber++) { Assert.IsTrue(PolygonAlgorithms.IsConvex(RandomPolygonGenerator.CreateRandomPolygon(coordinateNumber * polygonNumber, minCoordinate, maxCoordinate, 1))); } for (Int32 polygonNumber = 1; polygonNumber < 100; polygonNumber++) { Assert.IsFalse(PolygonAlgorithms.IsConvex(RandomPolygonGenerator.CreateRandomPolygon(coordinateNumber * polygonNumber, minCoordinate, maxCoordinate, 0))); } // check exceptions Assert.Throws <ArgumentOutOfRangeException>(() => RandomPolygonGenerator.CreateRandomPolygon(1, minCoordinate, maxCoordinate, convexityRatio)); Assert.Throws <ArgumentOutOfRangeException>(() => RandomPolygonGenerator.CreateRandomPolygon(coordinateNumber, maxCoordinate, minCoordinate, convexityRatio)); Assert.Throws <ArgumentOutOfRangeException>(() => RandomPolygonGenerator.CreateRandomPolygon(coordinateNumber, minCoordinate, maxCoordinate, -1)); }
public void MonotoneSubdivisionTriangulateTest() { for (Int32 polygonNumber = 1; polygonNumber < 10; polygonNumber++) { IBasicPolygon polygon = RandomPolygonGenerator.CreateRandomPolygon(10 * polygonNumber, new Coordinate(10, 10), new Coordinate(50, 50)); IList <Coordinate[]> triangles = MonotoneSubdivisionAlgorithm.Triangulate(polygon.Shell.Coordinates); Assert.AreEqual(polygon.Shell.Count - 3, triangles.Count); foreach (Coordinate[] triangle in triangles) { Assert.AreEqual(3, triangle.Length); foreach (Coordinate coordinate in triangle) { Assert.IsTrue(polygon.Shell.Contains(coordinate)); } } } }
public void MonotoneSubdivisionAlgorithmConstructorTest() { // predefined polygon (which is extended) MonotoneSubdivisionAlgorithm algorithm = new MonotoneSubdivisionAlgorithm(this.source, null); algorithm.Source.Count().ShouldBe(this.source.Count + 1); algorithm.Source.Take(this.source.Count).ShouldBe(this.source); algorithm.Source.Last().ShouldBe(this.source[0]); // random polygon IBasicPolygon polygon = RandomPolygonGenerator.CreateRandomPolygon(100, new Coordinate(10, 10), new Coordinate(50, 50)); algorithm = new MonotoneSubdivisionAlgorithm(polygon.Shell, null); algorithm.Source.ShouldBeSameAs(polygon.Shell); // exceptions Should.Throw <ArgumentNullException>(() => algorithm = new MonotoneSubdivisionAlgorithm(null, null)); }