Пример #1
0
        public void Property_Segment2DIntersectionShouldBehaveTheSameAsSegment3DIntersection
        (
            Segment2D segment1,
            Segment2D segment2
        )
        {
            var intersection2D = segment1.IntersectWithSegment(segment2);
            var intersection3D = segment1.To3D().IntersectWithSegment(segment2.To3D());

            if (intersection2D.Is <Null>())
            {
                intersection3D.Is <Null>().Should().BeTrue();
            }

            if (intersection2D.Is <Point2D>(out var point2D))
            {
                intersection3D.Is <Point>().Should().BeTrue();
                intersection3D.As <Point>().ToPoint2D().Should().Be(point2D);
            }
            if (intersection2D.Is <Segment2D>())
            {
                var segment2D = intersection2D.As <Segment2D>();
                intersection3D.Is <LineSegment>().Should().BeTrue();
                intersection3D.As <LineSegment>().ProjectTo2D().Should().Be(segment2D);
            }
        }
Пример #2
0
 public void Property_IntersectWithSegment_ShouldBeSymmetric
 (
     Segment2D segment1,
     Segment2D segment2
 )
 {
     segment1.IntersectWithSegment(segment2).Should().Be(segment2.IntersectWithSegment(segment1));
 }
Пример #3
0
        public void IntersectWithSegment2D_OffsetOverlapCloseToTolerance()
        {
            var edge1        = new Segment2D(Inches, -4.77, 3.08, -2.95934488486086, -0.80296242508802385);
            var edge2        = new Segment2D(Inches, -2.998, -0.789, -1.5571358638827124, -3.8789431114303676);
            var intersection = edge1.IntersectWithSegment(edge2);

            intersection.CastTo <Point2D>().Should().Be(new Point2D(Inches, -2.98, -0.80));
        }
Пример #4
0
        public void IntersectWithSegment2D_SlightlyOffsetShortOverlapWithoutEqualEndpoints()
        {
            var edge1        = new Segment2D(Inches, 0, 0, 1.0312, 0);
            var edge2        = new Segment2D(Inches, 1, 0.002, 2, 0.002);
            var intersection = edge1.IntersectWithSegment(edge2);

            intersection.CastTo <Point2D>().Should().Be(new Point2D(Inches, 1.02, 0));
            // I do not think this should change.
            intersection.Is <Null>().Should().BeFalse();
        }
Пример #5
0
        public void IntersectWithSegment2D_SharedEndPoints_CloseToTolerance()
        {
            var edge1 = new Segment2D(new Point2D(Unit.Inches,
                                                  247.5672, 78.58992105222),
                                      new Point2D(Unit.Inches,
                                                  116.954391, 24.1687020923795));
            var edge2 =
                new Segment2D(new Point2D(Unit.Inches,
                                          266.817596, 70.540802),
                              new Point2D(Unit.Inches,
                                          247.5672, 78.5615942974942));
            var intersection = edge1.IntersectWithSegment(edge2).CastTo <Point2D>();

            intersection.Should().Be(edge1.BasePoint);
            intersection.Should().Be(edge2.EndPoint);
        }
Пример #6
0
        public void Property_IfSegmentsAreParallelAndIntersect_ItShouldBeAnEndPoint
        (
            Segment2D segment1,
            Segment2D segment2
        )
        {
            var intersection = segment1.IntersectWithSegment(segment2);

            if (
                segment1.GetDirection().IsParallelTo(segment2.GetDirection()) &&
                intersection.Is <Point2D>(out var point2D))
            {
                var point        = point2D.ToPoint3D();
                var isEndOfOneOf = point.IsBaseOrEndPointOf(segment1.To3D()) ||
                                   point.IsBaseOrEndPointOf(segment2.To3D());

                isEndOfOneOf.Should().BeTrue();
            }
        }
Пример #7
0
        public void Property_NonNullResultIfAnyEndPointIsWithinDistanceToleranceOfOtherSegment
        (
            Segment2D segment1,
            Segment2D segment2
        )
        {
            var intersection = segment1.IntersectWithSegment(segment2);

            var ends = Enumerable
                       .Concat
                       (
                segment1.EndPoints.Where(e => e.ToPoint3D().DistanceTo(segment2.To3D()) == ZeroDistance),
                segment2.EndPoints.Where(e => e.ToPoint3D().DistanceTo(segment1.To3D()) == ZeroDistance)
                       )
                       .ToList();

            if (ends.Any())
            {
                intersection.Should().NotBe(Null.Instance);
            }
        }