Example #1
0
        public void SquareAroundCircle()
        {
            var circle = new Circle() { center = new Point(0, 0, false), rad = new Parameter(10, false) };

            // We want a box around the circle where all lines touch the 
            // circle and line0 is vertical. We arrange the lines roughly
            // in the correct placement to get the search off to a good
            // start
            var line0 = new Line(new Point(-21,0), new Point(0, 23));
            var line1 = new Line(new Point(0,22), new Point(22, 0));
            var line2 = new Line(new Point(21,0), new Point(0, -29));
            var line3 = new Line(new Point(0,-27), new Point(-25, 0));

            var angle = new Parameter (Math.PI/2, false);

            var r = SketchSolve.Solver.solve
                ( true
                , line0.IsTangentTo(circle)
                , line1.IsTangentTo(circle)
                , line2.IsTangentTo(circle)
                , line3.IsTangentTo(circle)
                , line0.HasInternalAngle (line1, angle)
                , line1.HasInternalAngle(line2, angle) 
                , line2.HasInternalAngle(line3, angle)
                , line3.HasInternalAngle(line0, angle)
                , line0.p2.IsColocated(line1.p1)
                , line1.p2.IsColocated(line2.p1)
                , line2.p2.IsColocated(line3.p1)
                , line3.p2.IsColocated(line0.p1)
                , line0.IsVertical()
                //, line1.IsHorizontal()
                //, line2.IsVertical()
                //, line3.IsHorizontal()
                );

            Console.WriteLine (line0);
            Console.WriteLine (line1);
            Console.WriteLine (line2);
            Console.WriteLine (line3);

            Console.WriteLine (circle.CenterTo(line0));

            r.Should ().BeApproximately (0, 0.0001);


        }       
Example #2
0
        public void TangentToCircleConstraintWithLineInitiallyThroughCenter()
        {
            // Create a fully constrained circle at 0,0 with radius 1
            var circle = new Circle() { center = new Point(0, 0, false), rad = new Parameter(1, false) };

            var v = 1 / Math.Sin(Math.PI / 4);

            var line = new Line(new Point(0, -v, false, false), new Point(0, v, true, false));

            var r = SketchSolve.Solver.solve
                ( true
                , line.IsTangentTo(circle));

            Console.WriteLine (line);
            r.Should().BeApproximately(0,0.0001);

            (circle.CenterTo (line).Vector.LengthSquared - 1).Should ().BeApproximately (0, 0.001);
        }
Example #3
0
        public void TangentToCircleConstraintWithLineInitiallyHorizontalShouldWork()
        {
            // Create a fully constrained circle at 0,0 with radius 1
            var circle = new Circle() { center = new Point(0, 0, false), rad = new Parameter(10, false) };

            var v = -15;

            var line = new Line(new Point(-100, -v, false, true), new Point(100, -v*2.1, false, true));

            var r = SketchSolve.Solver.solve
                ( true
                , line.IsTangentTo(circle)
                , line.IsHorizontal()
                );

            Console.WriteLine (line);
            Console.WriteLine (circle);

            (circle.CenterTo (line).Vector.LengthSquared - circle.rad.Value*circle.rad.Value)
                .Should ()
                .BeApproximately (0, 0.001);
        }
Example #4
0
        public void TangentToCircleConstraintShouldWork()
        {
            // Create a fully constrained circle at 0,0 with radius 1
            var circle = new Circle() { center = new Point(0, 0, false), rad = new Parameter(1, false) };

            var v = 1 / Math.Sin(Math.PI / 4);

            var line = new Line(new Point(0, -v, false, false), new Point(35, 0, true, false));

            var r = SketchSolve.Solver.solve
                ( true
                , line.IsTangentTo(circle));

            r.Should().BeApproximately(0,0.0001);

            line.p2.x.Value.Should().BeApproximately(v, 0.001);

            
        }