using System; using System.Collections.Generic; using System.Linq; using System.Text; using Azimuth; using Annulus.DiscreteCollisionDetection; namespace Annulus.UnitTests.DiscreteCollisionDetection { public class CornerPointTests : UnitTestSharp.TestFixture { public void Basic_Inside() { var commonPoint = new Vector(1, 1); var tralingEdge = new Vector(1, 2); var leadingEdge = new Vector(2, 1); var point = new Vector(2, 2); var result = CornerPoint.FindIntersection (commonPoint, tralingEdge, leadingEdge, point, -1); CheckEqual(CornerPoint.Result.Inside, result); Check(result.IsInsideOrOutside()); } public void Basic_Outside_II() { var commonPoint = new Vector(1, 1); var tralingEdge = new Vector(1, 2); var leadingEdge = new Vector(2, 1); var point = new Vector(-2, 2); var result = CornerPoint.FindIntersection (commonPoint, tralingEdge, leadingEdge, point, -1); CheckEqual(CornerPoint.Result.Outside, result); Check(result.IsInsideOrOutside()); } public void Basic_Outside_III() { var commonPoint = new Vector(1, 1); var tralingEdge = new Vector(1, 2); var leadingEdge = new Vector(2, 1); var point = new Vector(-2, -2); var result = CornerPoint.FindIntersection (commonPoint, tralingEdge, leadingEdge, point, -1); CheckEqual(CornerPoint.Result.Outside, result); Check(result.IsInsideOrOutside()); } public void Basic_Outside_IV() { var commonPoint = new Vector(1, 1); var tralingEdge = new Vector(1, 2); var leadingEdge = new Vector(2, 1); var point = new Vector(2, -2); var result = CornerPoint.FindIntersection (commonPoint, tralingEdge, leadingEdge, point, -1); CheckEqual(CornerPoint.Result.Outside, result); Check(result.IsInsideOrOutside()); } public void Reverse_Inside() { var commonPoint = new Vector(1, 1); var tralingEdge = new Vector(1, 2); var leadingEdge = new Vector(2, 1); var point = new Vector(2, 2); var result = CornerPoint.FindIntersection (commonPoint, tralingEdge, leadingEdge, point, 1); CheckEqual(CornerPoint.Result.Outside, result); Check(result.IsInsideOrOutside()); } public void Reverse_Outside_II() { var commonPoint = new Vector(1, 1); var tralingEdge = new Vector(1, 2); var leadingEdge = new Vector(2, 1); var point = new Vector(-2, 2); var result = CornerPoint.FindIntersection (commonPoint, tralingEdge, leadingEdge, point, 1); CheckEqual(CornerPoint.Result.Inside, result); Check(result.IsInsideOrOutside()); } public void Reverse_Outside_III() { var commonPoint = new Vector(1, 1); var tralingEdge = new Vector(1, 2); var leadingEdge = new Vector(2, 1); var point = new Vector(-2, -2); var result = CornerPoint.FindIntersection (commonPoint, tralingEdge, leadingEdge, point, 1); CheckEqual(CornerPoint.Result.Inside, result); Check(result.IsInsideOrOutside()); } public void Reverse_Outside_IV() { var commonPoint = new Vector(1, 1); var tralingEdge = new Vector(1, 2); var leadingEdge = new Vector(2, 1); var point = new Vector(2, -2); var result = CornerPoint.FindIntersection (commonPoint, tralingEdge, leadingEdge, point, 1); CheckEqual(CornerPoint.Result.Inside, result); Check(result.IsInsideOrOutside()); } public void AntiParallel() { var commonPoint = new Vector(1, 1); var tralingEdge = new Vector(1, 2); var leadingEdge = new Vector(2, 1); var point = new Vector(1, -2); var result = CornerPoint.FindIntersection (commonPoint, tralingEdge, leadingEdge, point, 1); CheckEqual(CornerPoint.Result.Inside, result); Check(result.IsInsideOrOutside()); } public void OnTrailing() { var commonPoint = new Vector(1, 1); var tralingEdge = new Vector(1, 2); var leadingEdge = new Vector(2, 1); var point = new Vector(1, 2); var result = CornerPoint.FindIntersection (commonPoint, tralingEdge, leadingEdge, point, 1); CheckEqual(CornerPoint.Result.OnTrailing, result); Check(result.IsOnAnEdge()); } public void OnLeading() { var commonPoint = new Vector(1, 1); var tralingEdge = new Vector(1, 2); var leadingEdge = new Vector(2, 1); var point = new Vector(2, 1); var result = CornerPoint.FindIntersection (commonPoint, tralingEdge, leadingEdge, point, 1); CheckEqual(CornerPoint.Result.OnLeading, result); Check(result.IsOnAnEdge()); } public void Degenerate_NotOnEdge_Inside() { var commonPoint = new Vector(1, 1); var tralingEdge = new Vector(1, 2); var leadingEdge = new Vector(1, 2); var point = new Vector(2, 1); var result = CornerPoint.FindIntersection (commonPoint, tralingEdge, leadingEdge, point, 1); CheckEqual(CornerPoint.Result.Inside, result); CheckFalse(result.IsOnAnEdge()); } public void Degenerate_NotOnEdge_Outside() { var commonPoint = new Vector(1, 1); var tralingEdge = new Vector(1, 2); var leadingEdge = new Vector(1, 2); var point = new Vector(2, 1); var result = CornerPoint.FindIntersection (commonPoint, tralingEdge, leadingEdge, point, -1); CheckEqual(CornerPoint.Result.Outside, result); CheckFalse(result.IsOnAnEdge()); } public void Degenerate_OnEdge() { var commonPoint = new Vector(1, 1); var tralingEdge = new Vector(1, 2); var leadingEdge = new Vector(1, 2); var point = new Vector(1, 2); var result = CornerPoint.FindIntersection (commonPoint, tralingEdge, leadingEdge, point, 1); CheckEqual(CornerPoint.Result.OnLeading | CornerPoint.Result.OnTrailing, result); Check(result.IsOnAnEdge()); } public void AntiParallelEdges_Inside() { var commonPoint = new Vector(0, 0); var tralingEdge = new Vector(0, 2); var leadingEdge = new Vector(0, -2); var point = new Vector(2, 0); var result = CornerPoint.FindIntersection (commonPoint, tralingEdge, leadingEdge, point, 1); CheckEqual(CornerPoint.Result.Inside, result); Check(result.IsInsideOrOutside()); } public void AntiParallelEdges_Outside() { var commonPoint = new Vector(0, 0); var tralingEdge = new Vector(0, 2); var leadingEdge = new Vector(0, -2); var point = new Vector(2, 0); var result = CornerPoint.FindIntersection (commonPoint, tralingEdge, leadingEdge, point, -1); CheckEqual(CornerPoint.Result.Outside, result); Check(result.IsInsideOrOutside()); } public void Degenerate_Trailing() { var commonPoint = new Vector(0, 0); var tralingEdge = new Vector(0, 0); var leadingEdge = new Vector(0, 2); var point = new Vector(2, 0); CheckThrow(typeof(Exception)); var result = CornerPoint.FindIntersection (commonPoint, tralingEdge, leadingEdge, point, -1); } public void Degenerate_Leading() { var commonPoint = new Vector(0, 0); var tralingEdge = new Vector(0, 2); var leadingEdge = new Vector(0, 0); var point = new Vector(2, 0); CheckThrow(typeof(Exception)); var result = CornerPoint.FindIntersection (commonPoint, tralingEdge, leadingEdge, point, -1); } public void Degenerate_Point() { var commonPoint = new Vector(0, 0); var tralingEdge = new Vector(0, -2); var leadingEdge = new Vector(0, 2); var point = new Vector(0, 0); CheckThrow(typeof(Exception)); var result = CornerPoint.FindIntersection (commonPoint, tralingEdge, leadingEdge, point, -1); } public void Degenerate_CornerWinding() { var commonPoint = new Vector(0, 0); var tralingEdge = new Vector(0, -2); var leadingEdge = new Vector(0, 2); var point = new Vector(2, 0); CheckThrow(typeof(Exception)); var result = CornerPoint.FindIntersection (commonPoint, tralingEdge, leadingEdge, point, 0); } } }