using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using UnitTestSharp; using Azimuth; using Annulus.DiscreteCollisionDetection; namespace Annulus.UnitTests.DiscreteCollisionDetection { public class ConvexConvexSignedDistanceTests : TestFixture { ConvexPolygon square = new ConvexPolygon(new Vector[] { new Vector(-10, 10), new Vector(-10, -10), new Vector(10, -10), new Vector(10, 10), }); public void Basic_XTranslate_Separate() { var distance = ConvexConvex.SignedDistance(square, square, AffineMatrix.BuildFromTranslation(Vector.Zero), AffineMatrix.BuildFromTranslation(new Vector(30, 0))); CheckEqual(10, distance); } public void Basic_XYTranslate_Separate() { var distance = ConvexConvex.SignedDistance(square, square, AffineMatrix.BuildFromTranslation(Vector.Zero), AffineMatrix.BuildFromTranslation(new Vector(30, 30))); CheckEqual(Math.Sqrt(200), distance); } public void Basic_YTranslate_Separate() { var distance = ConvexConvex.SignedDistance(square, square, AffineMatrix.BuildFromTranslation(Vector.Zero), AffineMatrix.BuildFromTranslation(new Vector(0, 30))); CheckEqual(10, distance); } public void Basic_nXYTranslate_Separate() { var distance = ConvexConvex.SignedDistance(square, square, AffineMatrix.BuildFromTranslation(Vector.Zero), AffineMatrix.BuildFromTranslation(new Vector(-30, 30))); CheckEqual(Math.Sqrt(200), distance); } public void Basic_nXTranslate_Separate() { var distance = ConvexConvex.SignedDistance(square, square, AffineMatrix.BuildFromTranslation(Vector.Zero), AffineMatrix.BuildFromTranslation(new Vector(-30, 0))); CheckEqual(10, distance); } public void Basic_nXnYTranslate_Separate() { var distance = ConvexConvex.SignedDistance(square, square, AffineMatrix.BuildFromTranslation(Vector.Zero), AffineMatrix.BuildFromTranslation(new Vector(-30, -30))); CheckEqual(Math.Sqrt(200), distance); } public void Basic_nYTranslate_Separate() { var distance = ConvexConvex.SignedDistance(square, square, AffineMatrix.BuildFromTranslation(Vector.Zero), AffineMatrix.BuildFromTranslation(new Vector(0, -30))); CheckEqual(10, distance); } public void Basic_XnYTranslate_Separate() { var distance = ConvexConvex.SignedDistance(square, square, AffineMatrix.BuildFromTranslation(Vector.Zero), AffineMatrix.BuildFromTranslation(new Vector(30, -30))); CheckEqual(Math.Sqrt(200), distance); } public void Basic_XTranslate_Overlapping() { var distance = ConvexConvex.SignedDistance(square, square, AffineMatrix.BuildFromTranslation(Vector.Zero), AffineMatrix.BuildFromTranslation(new Vector(10, 0))); CheckEqual(-10, distance); } public void Basic_XYTranslate_Overlapping() { var distance = ConvexConvex.SignedDistance(square, square, AffineMatrix.BuildFromTranslation(Vector.Zero), AffineMatrix.BuildFromTranslation(new Vector(10, 10))); CheckEqual(-10, distance); } public void Basic_YTranslate_Overlapping() { var distance = ConvexConvex.SignedDistance(square, square, AffineMatrix.BuildFromTranslation(Vector.Zero), AffineMatrix.BuildFromTranslation(new Vector(0, 10))); CheckEqual(-10, distance); } public void Basic_nXYTranslate_Overlapping() { var distance = ConvexConvex.SignedDistance(square, square, AffineMatrix.BuildFromTranslation(Vector.Zero), AffineMatrix.BuildFromTranslation(new Vector(-10, 10))); CheckEqual(-10, distance); } public void Basic_nXTranslate_Overlapping() { var distance = ConvexConvex.SignedDistance(square, square, AffineMatrix.BuildFromTranslation(Vector.Zero), AffineMatrix.BuildFromTranslation(new Vector(-10, 0))); CheckEqual(-10, distance); } public void Basic_nXnYTranslate_Overlapping() { var distance = ConvexConvex.SignedDistance(square, square, AffineMatrix.BuildFromTranslation(Vector.Zero), AffineMatrix.BuildFromTranslation(new Vector(-10, -10))); CheckEqual(-10, distance); } public void Basic_nYTranslate_Overlapping() { var distance = ConvexConvex.SignedDistance(square, square, AffineMatrix.BuildFromTranslation(Vector.Zero), AffineMatrix.BuildFromTranslation(new Vector(0, -10))); CheckEqual(-10, distance); } public void Basic_XnYTranslate_Overlapping() { var distance = ConvexConvex.SignedDistance(square, square, AffineMatrix.BuildFromTranslation(Vector.Zero), AffineMatrix.BuildFromTranslation(new Vector(10, -10))); CheckEqual(-10, distance); } public void Basic_XTranslate_Coincident() { var distance = ConvexConvex.SignedDistance(square, square, AffineMatrix.BuildFromTranslation(Vector.Zero), AffineMatrix.BuildFromTranslation(new Vector(20, 0))); CheckEqual(-0, distance); } public void Basic_XYTranslate_Coincident() { var distance = ConvexConvex.SignedDistance(square, square, AffineMatrix.BuildFromTranslation(Vector.Zero), AffineMatrix.BuildFromTranslation(new Vector(20, 20))); CheckEqual(-0, distance); } public void Basic_YTranslate_Coincident() { var distance = ConvexConvex.SignedDistance(square, square, AffineMatrix.BuildFromTranslation(Vector.Zero), AffineMatrix.BuildFromTranslation(new Vector(20, 20))); CheckEqual(-0, distance); } public void Basic_nXYTranslate_Coincident() { var distance = ConvexConvex.SignedDistance(square, square, AffineMatrix.BuildFromTranslation(Vector.Zero), AffineMatrix.BuildFromTranslation(new Vector(-20, 20))); CheckEqual(-0, distance); } public void Basic_nXTranslate_Coincident() { var distance = ConvexConvex.SignedDistance(square, square, AffineMatrix.BuildFromTranslation(Vector.Zero), AffineMatrix.BuildFromTranslation(new Vector(-20, 0))); CheckEqual(-0, distance); } public void Basic_nXnYTranslate_Coincident() { var distance = ConvexConvex.SignedDistance(square, square, AffineMatrix.BuildFromTranslation(Vector.Zero), AffineMatrix.BuildFromTranslation(new Vector(-20, -20))); CheckEqual(-0, distance); } public void Basic_nYTranslate_Coincident() { var distance = ConvexConvex.SignedDistance(square, square, AffineMatrix.BuildFromTranslation(Vector.Zero), AffineMatrix.BuildFromTranslation(new Vector(0, -20))); CheckEqual(-0, distance); } public void Basic_XnYTranslate_Coincident() { var distance = ConvexConvex.SignedDistance(square, square, AffineMatrix.BuildFromTranslation(Vector.Zero), AffineMatrix.BuildFromTranslation(new Vector(20, -20))); CheckEqual(-0, distance); } } }