using System; using System.Collections.Generic; using System.Linq; using System.Text; using Azimuth; using Annulus; using Annulus.DiscreteCollisionDetection; namespace Annulus.UnitTests.DiscreteCollisionDetection { public class LineRayTests : UnitTestSharp.TestFixture { public void Basic() { var A = new Line { From = new Vector(0, -1), To = new Vector(0, 1), }; var B = new Ray { From = new Vector(-1, 0), Direction = new Vector(2, 0), }; Scalar t1; var result = LineRay.FindIntersection(A, B, out t1); CheckEqual(0.5, t1); CheckEqual(LineLine.Result.Intersecting, result); } public void OneDegenerate_First() { var A = new Line { From = new Vector(1, 0), To = new Vector(1, 0), }; var B = new Ray { From = new Vector(-1, 0), Direction = new Vector(2, 0), }; Scalar t1; var result = LineRay.FindIntersection(A, B, out t1); Check(Scalar.IsNaN(t1)); CheckEqual(LineLine.Result.Degenerate, result); } public void OneDegenerate_Second() { var A = new Line { From = new Vector(0, -1), To = new Vector(0, 1), }; var B = new Ray { From = new Vector(0, 0), Direction = new Vector(0, 0), }; Scalar t1; var result = LineRay.FindIntersection(A, B, out t1); Check(Scalar.IsNaN(t1)); CheckEqual(LineLine.Result.Degenerate, result); } public void Parallel_Identical() { var A = new Line { From = new Vector(0, -1), To = new Vector(0, 1), }; var B = new Ray { From = new Vector(0, -1), Direction = new Vector(0, 1), }; Scalar t1; var result = LineRay.FindIntersection(A, B, out t1); Check(Scalar.IsNaN(t1)); CheckEqual(LineLine.Result.Parallel, result); } public void Parallel_NonIdentical() { var A = new Line { From = new Vector(1, -2), To = new Vector(1, 2), }; var B = new Ray { From = new Vector(0, -1), Direction = new Vector(0, 2), }; Scalar t1; var result = LineRay.FindIntersection(A, B, out t1); Check(Scalar.IsNaN(t1)); CheckEqual(LineLine.Result.Parallel, result); } public void DoubleDegenerate() { var A = new Line { From = new Vector(1, 1), To = new Vector(1, 1), }; var B = new Ray { From = new Vector(1, 1), Direction = new Vector(1, 1), }; Scalar t1; var result = LineRay.FindIntersection(A, B, out t1); Check(Scalar.IsNaN(t1)); CheckEqual(LineLine.Result.Degenerate, result); } public void Infinity_Parallel() { var A = new Line { From = new Vector(1, 0), To = new Vector(1, Scalar.PositiveInfinity), }; var B = new Ray { From = new Vector(0, 1), Direction = new Vector(0, Scalar.PositiveInfinity), }; Scalar t1; var result = LineRay.FindIntersection(A, B, out t1); Check(Scalar.IsNaN(t1)); CheckEqual(LineLine.Result.Degenerate, result); } public void Infinity_Intersection() { var A = new Line { From = new Vector(1, 0), To = new Vector(1, Scalar.PositiveInfinity), }; var B = new Ray { From = new Vector(0, 1), Direction = new Vector(Scalar.PositiveInfinity, 1), }; Scalar t1; var result = LineRay.FindIntersection(A, B, out t1); Check(Scalar.IsNaN(t1)); CheckEqual(LineLine.Result.Degenerate, result); } public void LineBehindRay() { var A = new Line { From = new Vector(1, 0), To = new Vector(1, -1), }; var B = new Ray { From = new Vector(2, 0), Direction = new Vector(1, 0), }; Scalar t1; var result = LineRay.FindIntersection(A, B, out t1); Check(Scalar.IsNaN(t1)); CheckEqual(LineLine.Result.NonParallelNoIntersection, result); } } }