Exemplo n.º 1
0
        public void Arc3DTest_005()
        {
            var p1 = new Vector3D(20.17459383, 178.42487311, -56.31435851);
            var p2 = new Vector3D(1.7990927, 231.58612295, -18.13420814);
            var p3 = new Vector3D(262.37695212, 302.11773752, 132.19450446);

            var c = new Arc3D(1e-3, p1, p2, p3);

            Assert.True(new Line3D(c.Center, c.CS.BaseX, Line3DConstructMode.PointAndVector)
                        .SemiLineContainsPoints(1e-3, p1));
            var radTol = (1e-1).RadTol(c.Radius);
            var degTol = radTol.ToDeg();

            {
                var cinverse = new Arc3D(1e-3, p3, p2, p1);
                Assert.True(new Line3D(c.Center, cinverse.CS.BaseX, Line3DConstructMode.PointAndVector)
                            .SemiLineContainsPoints(1e-3, p3));
                Assert.True(c.AngleStart.EqualsTol(radTol, cinverse.AngleStart));
                Assert.True(c.AngleEnd.EqualsTol(radTol, cinverse.AngleEnd));
            }

            Assert.True(c.AngleStart.ToDeg().EqualsTol(degTol, 0));
            Assert.True(c.AngleEnd.ToDeg().EqualsTol(degTol, 154.14));

            var moveVector = new Vector3D(-1998.843, -6050.954, -1980.059);
            var cmoved     = c.Move(1e-3, moveVector);

            var p1moved = p1 + moveVector;
            var p2moved = p2 + moveVector;
            var p3moved = p3 + moveVector;

            Assert.True(cmoved.Contains(1e-3, p1moved, onlyPerimeter: true));
            Assert.True(cmoved.Contains(1e-3, p2moved, onlyPerimeter: true));
            Assert.True(cmoved.Contains(1e-3, p3moved, onlyPerimeter: true));

            Assert.True(c.Angle.ToDeg().EqualsTol(degTol, 154.14));

            var c2 = new Arc3D(1e-3, c.CS, c.Radius, c.AngleEnd, c.AngleStart);

            Assert.True(c2.Angle.ToDeg().EqualsTol(degTol, 360d - 154.14));

            Assert.True(c.Length.EqualsTol(1e-3, 456.67959116));
        }