using System; using System.Collections.Generic; using System.Linq; using System.Text; using Azimuth; using Annulus.DiscreteCollisionDetection; namespace Annulus.UnitTests.DiscreteCollisionDetection { public class LinePointTests : UnitTestSharp.TestFixture { public void Basic() { Vector pt = new Vector(0, 0); var line = new Line { From = new Vector(-1, 0), To = new Vector(1, 0), }; Scalar t; var status = LinePoint.ClosestPointOnLineToPoint(line, pt, out t); CheckEqual(0.5, t); CheckEqual(LinePoint.Status.Success, status); } public void Perpindicular() { Vector pt = new Vector(0, 7); var line = new Line { From = new Vector(-1, 0), To = new Vector(1, 0), }; Scalar t; var status = LinePoint.ClosestPointOnLineToPoint(line, pt, out t); CheckEqual(0.5, t); CheckEqual(LinePoint.Status.Success, status); } public void Infinity_Perp() { Vector pt = new Vector(0, Scalar.PositiveInfinity); var line = new Line { From = new Vector(-1, 0), To = new Vector(1, 0), }; Scalar t; var status = LinePoint.ClosestPointOnLineToPoint(line, pt, out t); Check(Scalar.IsNaN(t)); CheckEqual(LinePoint.Status.Degenerate, status); } public void Infinity_Parallel() { Vector pt = new Vector(Scalar.PositiveInfinity, 0); var line = new Line { From = new Vector(-1, 0), To = new Vector(1, 0), }; Scalar t; var status = LinePoint.ClosestPointOnLineToPoint(line, pt, out t); Check(Scalar.IsNaN(t)); CheckEqual(LinePoint.Status.Degenerate, status); } public void Line_Infinity() { Vector pt = new Vector(0, 0); var line = new Line { From = new Vector(Scalar.NegativeInfinity, 0), To = new Vector(Scalar.PositiveInfinity, 0), }; Scalar t; var status = LinePoint.ClosestPointOnLineToPoint(line, pt, out t); Check(Scalar.IsNaN(t)); CheckEqual(LinePoint.Status.Degenerate, status); } } }