using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Azimuth; using Annulus.CSG; namespace Annulus.UnitTests.CSG { public class MinkowskiSumTests : UnitTestSharp.TestFixture { public class ConvexConvexTests : UnitTestSharp.TestFixture { public void Squares_CCW() { var square = new ConvexPolygon(new Vector[] { new Vector(-10, 10), new Vector(-10, -10), new Vector(10, -10), new Vector(10, 10), }); var transformA = new AffineMatrix(0, Vector.Zero); var transformB = new AffineMatrix(0, new Vector(30, 0)); var sum = MinkowskiSum.CalculateSum( transformA, square, transformB, square ); var expected = new ConvexPolygon(new Vector[] { new Vector(10, 20), new Vector(10, -20), new Vector(50, -20), new Vector(50, 20), }); CheckEqual(expected.VertexList, sum.VertexList); } public void Squares_CW() { var square = new ConvexPolygon(new Vector[] { new Vector(-10, 10), new Vector(10, 10), new Vector(10, -10), new Vector(-10, -10), }); var transformA = new AffineMatrix(0, Vector.Zero); var transformB = new AffineMatrix(0, new Vector(30, 0)); var sum = MinkowskiSum.CalculateSum( transformA, square, transformB, square ); var expected = new ConvexPolygon(new Vector[] { new Vector(10, 20), new Vector(50, 20), new Vector(50, -20), new Vector(10, -20), }); CheckEqual(expected.VertexList, sum.VertexList); } public void Squares_CW_CCW() { var squareCW = new ConvexPolygon(new Vector[] { new Vector(-10, 10), new Vector(10, 10), new Vector(10, -10), new Vector(-10, -10), }); var squareCCW = new ConvexPolygon(new Vector[] { new Vector(-10, 10), new Vector(-10, -10), new Vector(10, -10), new Vector(10, 10), }); var transformA = new AffineMatrix(0, Vector.Zero); var transformB = new AffineMatrix(0, new Vector(30, 0)); var sum = MinkowskiSum.CalculateSum( transformA, squareCW, transformB, squareCCW ); var expected = new ConvexPolygon(new Vector[] { new Vector(10, 20), new Vector(50, 20), new Vector(50, -20), new Vector(10, -20), }); CheckEqual(expected.VertexList, sum.VertexList); } public void Squares_CCW_CW() { var squareCW = new ConvexPolygon(new Vector[] { new Vector(-10, 10), new Vector(10, 10), new Vector(10, -10), new Vector(-10, -10), }); var squareCCW = new ConvexPolygon(new Vector[] { new Vector(-10, 10), new Vector(-10, -10), new Vector(10, -10), new Vector(10, 10), }); var transformA = new AffineMatrix(0, Vector.Zero); var transformB = new AffineMatrix(0, new Vector(30, 0)); var sum = MinkowskiSum.CalculateSum( transformA, squareCCW, transformB, squareCW ); var expected = new ConvexPolygon(new Vector[] { new Vector(10, 20), new Vector(10, -20), new Vector(50, -20), new Vector(50, 20), }); CheckEqual(expected.VertexList, sum.VertexList); } public void Square_Triangle() { var squareCCW = new ConvexPolygon(new Vector[] { new Vector(-10, 10), new Vector(-10, -10), new Vector(10, -10), new Vector(10, 10), }); var trisCCW = new ConvexPolygon(new Vector[] { new Vector(0, 0), new Vector(2, 1), new Vector(1, 2), }); var transformA = new AffineMatrix(0, Vector.Zero); var transformB = new AffineMatrix(0, new Vector(30, 0)); var sum = MinkowskiSum.CalculateSum( transformA, squareCCW, transformB, trisCCW ); var expected = new ConvexPolygon(new Vector[] { new Vector(20, 10), new Vector(20, -10), new Vector(40, -10), new Vector(42, -9), new Vector(42, 11), new Vector(42, 11), new Vector(41, 12), new Vector(21, 12), new Vector(21, 12), }); CheckEqual(expected.VertexList, sum.VertexList); } } } }