Beispiel #1
0
        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));
        }
Beispiel #2
0
        public void InsectionHorizontalSegmentWithYAxis2()
        {
            var segment = new KtSegment2D(-3, 3, 5, 3);
            var yaxis   = KtLine2D.YAxis();

            Assert.AreEqual(yaxis.IntersectionWith(segment), new KtPoint2D(0, 3));
        }
Beispiel #3
0
        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)));
        }
Beispiel #4
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
        }
Beispiel #5
0
        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
        }
Beispiel #6
0
        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));
        }
Beispiel #7
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);
            }
        }
Beispiel #8
0
        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);
        }
Beispiel #9
0
        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));
        }
Beispiel #10
0
        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)));
        }
Beispiel #11
0
        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
        }
Beispiel #12
0
 internal static bool Inscribes(this EnumerableRegions clips, KtSegment2D edge) =>
 clips.Select(clip => clip.Corners).Inscribes(edge);
Beispiel #13
0
 internal static bool Inscribes(this IEnumerable <KtPoint2D> points, KtSegment2D segment) =>
 points.ToCircularStack().Inscribes(segment);
Beispiel #14
0
 public bool IsIntersecting(KtSegment2D segment) => Edges().Any(segment.HasIntersection);
Beispiel #15
0
 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;
Beispiel #18
0
        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)));
Beispiel #20
0
        public void DistanceTest()
        {
            var segment = new KtSegment2D(1, 2, -5, -2);

            Assert.IsTrue((segment.Distance(new KtPoint2D(20, -5)) + 16.3636557886443).NearZero(8));
        }
Beispiel #21
0
        public void EqualsTest1()
        {
            var segment = new KtSegment2D(1, 2, -5, -2);

            Assert.AreNotEqual(segment, new KtLine2D(3, 5, 3, 6));
        }
Beispiel #22
0
        public void EqualsTest()
        {
            var segment = new KtSegment2D(1, 2, -5, -2);

            Assert.AreEqual(segment, new KtSegment2D(1, 2, -5, -2));
        }
Beispiel #23
0
 internal static bool Inscribes(this IEnumerable <IEnumerable <KtPoint2D> > points, KtSegment2D segment) =>
 points.Any(clipCorner => clipCorner.Inscribes(segment));
Beispiel #24
0
        public void CloneTest()
        {
            var segment = new KtSegment2D(3, 2, 4, 7);

            Assert.AreEqual(segment, segment.Clone());
        }