using System; using System.Collections.Generic; using System.Linq; using System.Text; using Azimuth; using Annulus.DiscreteCollisionDetection; namespace Annulus.UnitTests.DiscreteCollisionDetection { public class CornerCornerTests : UnitTestSharp.TestFixture { public void Contained() { var commonPoint = new Vector(0, 0); var trailing_A = new Vector(0, 1); var leading_A = new Vector(1, 0); var trailing_B = new Vector(0.5, 1); var leading_B = new Vector(1, 0.5); var result = CornerCorner.FindIntersection(commonPoint, trailing_A, leading_A, -1, trailing_B, leading_B); CheckEqual(CornerCorner.Result.EntirelyContained, result); } public void Disjoint() { var commonPoint = new Vector(0, 0); var trailing_A = new Vector(0, 1); var leading_A = new Vector(1, 0); var trailing_B = new Vector(0.5, 1); var leading_B = new Vector(1, 0.5); var result = CornerCorner.FindIntersection(commonPoint, trailing_A, leading_A, 1, trailing_B, leading_B); CheckEqual(CornerCorner.Result.Disjoint, result); } public void Intersect() { var commonPoint = new Vector(0, 0); var trailing_A = new Vector(0, 1); var leading_A = new Vector(1, 0); var trailing_B = new Vector(1, 1); var leading_B = new Vector(-1, 1); var result = CornerCorner.FindIntersection(commonPoint, trailing_A, leading_A, 1, trailing_B, leading_B); CheckEqual(CornerCorner.Result.Intersecting, result); } public void Disjoint_Overlap_Leading() { var commonPoint = new Vector(0, 0); var trailing_A = new Vector(0, 1); var leading_A = new Vector(1, 0); var trailing_B = new Vector(0.5, 1); var leading_B = new Vector(1, 0); var result = CornerCorner.FindIntersection(commonPoint, trailing_A, leading_A, 1, trailing_B, leading_B); CheckEqual(CornerCorner.Result.Disjoint | CornerCorner.Result.OnLeading, result); } public void Disjoint_Overlap_Trailing() { var commonPoint = new Vector(0, 0); var trailing_A = new Vector(0, 1); var leading_A = new Vector(1, 0); var trailing_B = new Vector(0, 1); var leading_B = new Vector(1, 0.5); var result = CornerCorner.FindIntersection(commonPoint, trailing_A, leading_A, 1, trailing_B, leading_B); CheckEqual(CornerCorner.Result.Disjoint | CornerCorner.Result.OnTrailing, result); } public void Contained_Overlap_Leading() { var commonPoint = new Vector(0, 0); var trailing_A = new Vector(0, 1); var leading_A = new Vector(1, 0); var trailing_B = new Vector(0.5, 1); var leading_B = new Vector(1, 0); var result = CornerCorner.FindIntersection(commonPoint, trailing_A, leading_A, -1, trailing_B, leading_B); CheckEqual(CornerCorner.Result.EntirelyContained | CornerCorner.Result.OnLeading, result); } public void Contained_Overlap_Trailing() { var commonPoint = new Vector(0, 0); var trailing_A = new Vector(0, 1); var leading_A = new Vector(1, 0); var trailing_B = new Vector(0, 1); var leading_B = new Vector(1, 0.5); var result = CornerCorner.FindIntersection(commonPoint, trailing_A, leading_A, -1, trailing_B, leading_B); CheckEqual(CornerCorner.Result.EntirelyContained | CornerCorner.Result.OnTrailing, result); } public void BothOverlap_Different() { var commonPoint = new Vector(0, 0); var trailing_A = new Vector(0, 1); var leading_A = new Vector(1, 0); var trailing_B = new Vector(0, 1); var leading_B = new Vector(1, 0); var result = CornerCorner.FindIntersection(commonPoint, trailing_A, leading_A, -1, trailing_B, leading_B); CheckEqual(CornerCorner.Result.OnLeading | CornerCorner.Result.OnTrailing, result); } public void BothOverlap_Same_Leading() { var commonPoint = new Vector(0, 0); var trailing_A = new Vector(0, 1); var leading_A = new Vector(1, 0); var trailing_B = new Vector(1, 0); var leading_B = new Vector(1, 0); var result = CornerCorner.FindIntersection(commonPoint, trailing_A, leading_A, -1, trailing_B, leading_B); CheckEqual(CornerCorner.Result.OnLeading, result); } public void BothOverlap_Same_Trailing() { var commonPoint = new Vector(0, 0); var trailing_A = new Vector(0, 1); var leading_A = new Vector(1, 0); var trailing_B = new Vector(0, 1); var leading_B = new Vector(0, 1); var result = CornerCorner.FindIntersection(commonPoint, trailing_A, leading_A, -1, trailing_B, leading_B); CheckEqual(CornerCorner.Result.OnTrailing, result); } public void Degenerate_Trailing() { var commonPoint = new Vector(0, 0); var trailing_A = new Vector(0, 0); var leading_A = new Vector(1, 0); var trailing_B = new Vector(0, 1); var leading_B = new Vector(0, 1); CheckThrow(typeof(Exception)); var result = CornerCorner.FindIntersection(commonPoint, trailing_A, leading_A, -1, trailing_B, leading_B); } public void Degenerate_Leading() { var commonPoint = new Vector(0, 0); var trailing_A = new Vector(0, 1); var leading_A = new Vector(1, 0); var trailing_B = new Vector(0, 1); var leading_B = new Vector(0, 0); CheckThrow(typeof(Exception)); var result = CornerCorner.FindIntersection(commonPoint, trailing_A, leading_A, -1, trailing_B, leading_B); } public void DegenerateWinding() { var commonPoint = new Vector(0, 0); var trailing_A = new Vector(0, 1); var leading_A = new Vector(1, 0); var trailing_B = new Vector(0, 1); var leading_B = new Vector(0, 0); CheckThrow(typeof(Exception)); var result = CornerCorner.FindIntersection(commonPoint, trailing_A, leading_A, 0, trailing_B, leading_B); } } }