public void IntersectionHorizontalSegmentWithVerticalSegment2() { var segmentH = new KtSegment2D(-3, 3, 5, 3); var segmentV = new KtSegment2D(2, 0, 2, 5); Assert.AreEqual(segmentV.IntersectionWith(segmentH), new KtPoint2D(2, 3)); }
public void InsectionHorizontalSegmentWithYAxis2() { var segment = new KtSegment2D(-3, 3, 5, 3); var yaxis = KtLine2D.YAxis(); Assert.AreEqual(yaxis.IntersectionWith(segment), new KtPoint2D(0, 3)); }
public void InlineTest() { var segment = new KtSegment2D(1, 2, -5, -2); Assert.IsFalse(segment.Inline(new KtPoint2D(-23, -24))); Assert.IsTrue(segment.Inline(new KtPoint2D(-2, 0))); }
public void IntersectionHorizontalSegmentWithVerticalSegment() { var segmentH = new KtSegment2D(-3, 3, 5, 3); var segmentV = new KtSegment2D(2, 0, 2, 5); #pragma warning disable CS0618 // Type or member is obsolete Assert.AreEqual(segmentV.IntersectWith3(segmentH), new KtPoint2D(2, 3)); #pragma warning restore CS0618 // Type or member is obsolete }
public void InsectionHorizontalSegmentWithYAxis() { var segment = new KtSegment2D(-3, 3, 5, 3); var yaxis = KtLine2D.YAxis(); #pragma warning disable CS0618 // Type or member is obsolete Assert.AreEqual(yaxis.IntersectWith3(segment), new KtPoint2D(0, 3)); #pragma warning restore CS0618 // Type or member is obsolete }
public void IntersectionBarelyTouchingTest() { var line1 = new KtSegment2D(0, 0, 1, 1); var line2 = new KtSegment2D(.5, 0.5, 0, 1); var line3 = new KtSegment2D(0, 0, 0, 1); Assert.AreEqual(line2.IntersectionWith(line1), new KtPoint2D(0.5, 0.5)); Assert.AreEqual(line3.IntersectionWith(line1), new KtPoint2D(0, 0)); }
public void TestIntersectionCheckSpeedB() { var line1 = new KtSegment2D(-1, 2, -.5, 3); var line2 = new KtSegment2D(1, 2, -1, 3); for (int i = 0; i < testIteration; i++) { Assert.IsTrue(line1.IntersectionWith(line2) != null); } }
public void Inequality() { var line = new KtLine2D(0, 0, 20, 1); var segment = new KtSegment2D(0, 0, 20, 1); var ray = new KtRay2D(new KtPoint2D(0, 0), new KtPoint2D(20, 1)); Assert.AreNotEqual(line, segment); Assert.AreNotEqual(line, ray); Assert.AreNotEqual(segment, ray); }
public void IntersectionTest() { var line1 = new KtSegment2D(-1, 2, -.5, 3); var line2 = new KtSegment2D(1, 2, .5, 3); var line3 = new KtSegment2D(1, 2, -1, 3); Assert.AreEqual(line2.IntersectionWith(line1), null); Assert.IsFalse(line1.HasIntersection(line2)); Assert.AreEqual(line3.IntersectionWith(line1), new KtPoint2D(-0.6, 2.8)); Assert.IsTrue(line1.HasIntersection(line3)); }
internal static bool Inscribes(this CircularStack <KtPoint2D> points, KtSegment2D segment) { var point1In = points.Inscribes(segment.Start); var point2In = points.Inscribes(segment.End); var edges = points.ToEdges(); var intersectionCounts = edges.Count(segment.HasIntersection); if (intersectionCounts > 2) { return(false); } if (point1In && point2In) { return(intersectionCounts < 1); } if (!point1In && !point2In) { return(segment.EndLieOnSegments(edges) && points.Inscribes(segment.MidPoint())); } return((!point1In && segment.Start.LiesOnSegments(edges)) || (!point2In && segment.End.LiesOnSegments(edges))); }
public void TestIntersectionsOfLineTypes() { var line = new KtLine2D(2, 4, 5); var segment = new KtSegment2D(0, 2, 30, 4); #pragma warning disable CS0618 // Type or member is obsolete Assert.AreEqual(line.IntersectWith3(segment), null); segment = new KtSegment2D(0, 4, -2, 2); Assert.AreEqual(line.IntersectWith3(segment), new KtPoint2D(-11.0 / 6, 13.0 / 6)); segment = new KtSegment2D(-2, 2, 0, 4); Assert.AreEqual(line.IntersectWith3(segment), new KtPoint2D(-11.0 / 6, 13.0 / 6)); var ray = new KtRay2D(new KtPoint2D(0, 2), new KtVector2D(1, 2)); Assert.AreEqual(line.IntersectWith3(ray), null); ray = new KtRay2D(new KtPoint2D(0, 2), new KtVector2D(1, -2)); Assert.AreEqual(line.IntersectWith3(ray), new KtPoint2D(.5, 1.0)); var yaxis = KtLine2D.YAxis(); var line2 = new KtRay2D(new KtPoint2D(0, 20), new KtVector2D(3, 4)); Assert.AreEqual(yaxis.IntersectWith3(line2), new KtPoint2D(0, 20)); var line45 = new KtRay2D(new KtPoint2D(), new KtVector2D(30, 30)); var line45N = new KtRay2D(new KtPoint2D(0, 50), new KtVector2D(30, -30)); Assert.AreEqual(line45.IntersectWith3(line45N), new KtPoint2D(25, 25)); #pragma warning restore CS0618 // Type or member is obsolete }
internal static bool Inscribes(this EnumerableRegions clips, KtSegment2D edge) => clips.Select(clip => clip.Corners).Inscribes(edge);
internal static bool Inscribes(this IEnumerable <KtPoint2D> points, KtSegment2D segment) => points.ToCircularStack().Inscribes(segment);
public bool IsIntersecting(KtSegment2D segment) => Edges().Any(segment.HasIntersection);
public abstract bool Inscribes(KtSegment2D segment);
internal static bool EndLieOnSegments(this KtSegment2D segment, IEnumerable <KtSegment2D> segments) => segment.Start.LiesOnSegments(segments) && segment.End.LiesOnSegments(segments);
internal static Ternary GetEdgeAssociation(this KtSegment2D segment, params IEnumerable <KtPoint2D>[] groupOfPoints) => groupOfPoints.SelectMany(ToEdges).Any(segment.HasIntersection) ? Ternary.Neutral : groupOfPoints.Any(points => points.Inscribes(segment)) ? Ternary.True : Ternary.False;
public void PointInsideLineTest() { var segment = new KtSegment2D(1, 2, -5, -2); Assert.AreEqual(segment.PointInsideLine(.5), new KtPoint2D(-2, 0)); }
public override bool Inscribes(KtSegment2D segment) => LoopedCorners().Inscribes(segment) && (holes.Count == 0 || !holes.All(hole => hole.Inscribes(segment)));
public void DistanceTest() { var segment = new KtSegment2D(1, 2, -5, -2); Assert.IsTrue((segment.Distance(new KtPoint2D(20, -5)) + 16.3636557886443).NearZero(8)); }
public void EqualsTest1() { var segment = new KtSegment2D(1, 2, -5, -2); Assert.AreNotEqual(segment, new KtLine2D(3, 5, 3, 6)); }
public void EqualsTest() { var segment = new KtSegment2D(1, 2, -5, -2); Assert.AreEqual(segment, new KtSegment2D(1, 2, -5, -2)); }
internal static bool Inscribes(this IEnumerable <IEnumerable <KtPoint2D> > points, KtSegment2D segment) => points.Any(clipCorner => clipCorner.Inscribes(segment));
public void CloneTest() { var segment = new KtSegment2D(3, 2, 4, 7); Assert.AreEqual(segment, segment.Clone()); }