コード例 #1
0
ファイル: Vec2dTests.cs プロジェクト: lanicon/Macad3D
        public void IsParallel()
        {
            var p1 = new Vec2d(1, 0);
            var p2 = new Vec2d(0, 1);

            Assert.IsFalse(p1.IsParallel(p2, 0.1));
            Assert.IsTrue(p1.IsParallel(p2, Math.PI / 2));
        }
コード例 #2
0
        public void SmoothCorner_BezierArc()
        {
            var sketch      = Sketch.Create();
            var p1          = sketch.AddPoint(new Pnt2d(0, 0));
            var p2          = sketch.AddPoint(new Pnt2d(2, 9));
            var p3          = sketch.AddPoint(new Pnt2d(10, 10));
            var p4          = sketch.AddPoint(new Pnt2d(20, 0));
            var p5          = sketch.AddPoint(new Pnt2d(18, 7));
            var bezier1     = new SketchSegmentBezier(p1, p2, p3);
            var s1          = sketch.AddSegment(bezier1);
            var arc         = new SketchSegmentArc(p3, p4, p5);
            var s2          = sketch.AddSegment(arc);
            var constraint1 = new SketchConstraintSmoothCorner(p3, true);
            var c1          = sketch.AddConstraint(constraint1);

            Assert.IsTrue(sketch.SolveConstraints(true));

            var tan1      = new Vec2d(sketch.Points[p2], sketch.Points[p3]);
            var parameter = new double[2];
            var circle    = arc.GetCircle(sketch.Points, parameter);
            var pnt       = new Pnt2d();
            var tan2      = new Vec2d();

            ElCLib.D1(parameter[0], circle, ref pnt, ref tan2);
            Assert.IsTrue(tan1.IsParallel(tan2, 0.01));
        }
コード例 #3
0
        public void SmoothCorner_BezierLine()
        {
            var sketch      = Sketch.Create();
            var p1          = sketch.AddPoint(new Pnt2d(0, 0));
            var p2          = sketch.AddPoint(new Pnt2d(2, 9));
            var p3          = sketch.AddPoint(new Pnt2d(10, 10));
            var p4          = sketch.AddPoint(new Pnt2d(15, 0));
            var bezier1     = new SketchSegmentBezier(p1, p2, p3);
            var s1          = sketch.AddSegment(bezier1);
            var line        = new SketchSegmentLine(p3, p4);
            var s2          = sketch.AddSegment(line);
            var constraint1 = new SketchConstraintSmoothCorner(p3, true);
            var c1          = sketch.AddConstraint(constraint1);

            Assert.IsTrue(sketch.SolveConstraints(true));

            var tan1 = new Vec2d(sketch.Points[p2], sketch.Points[p3]);
            var tan2 = new Vec2d(sketch.Points[p3], sketch.Points[p4]);

            Assert.IsTrue(tan1.IsParallel(tan2, 0.01));
        }
コード例 #4
0
        public void SmoothCorner_BezierBezier_Symmetric()
        {
            var sketch      = Sketch.Create();
            var p1          = sketch.AddPoint(new Pnt2d(0, 0));
            var p2          = sketch.AddPoint(new Pnt2d(2, 9));
            var p3          = sketch.AddPoint(new Pnt2d(10, 10));
            var p4          = sketch.AddPoint(new Pnt2d(15, 9));
            var p5          = sketch.AddPoint(new Pnt2d(20, 7));
            var p6          = sketch.AddPoint(new Pnt2d(20, 0));
            var bezier1     = new SketchSegmentBezier(p1, p2, p3);
            var s1          = sketch.AddSegment(bezier1);
            var bezier2     = new SketchSegmentBezier(p3, p4, p5, p6);
            var s2          = sketch.AddSegment(bezier2);
            var constraint1 = new SketchConstraintSmoothCorner(p3, true);
            var c1          = sketch.AddConstraint(constraint1);

            Assert.IsTrue(sketch.SolveConstraints(true));

            var tan1 = new Vec2d(sketch.Points[p2], sketch.Points[p3]);
            var tan2 = new Vec2d(sketch.Points[p3], sketch.Points[p4]);

            Assert.IsTrue(tan1.IsParallel(tan2, 0.1));
            Assert.AreEqual(tan1.Magnitude(), tan2.Magnitude(), 0.0001);
        }
コード例 #5
0
        public void ValueType_Vec2d()
        {
            var p1 = new Vec2d(1, 0);
            var p2 = new Vec2d(0, 1);

            Assert.IsFalse(p1.IsEqual(p2, 0.99, 0.1));
            Assert.IsTrue(p1.IsEqual(p2, 1.01, 0.1));
            Assert.IsTrue(p1.IsEqual(p2, 0.99, Math.PI / 2));
            Assert.IsTrue(p1.IsNormal(p2, 0.1));
            Assert.IsFalse(p1.IsOpposite(p2, 0.1));
            Assert.IsTrue(p1.IsOpposite(p2, Math.PI / 2));
            Assert.IsFalse(p1.IsParallel(p2, 0.1));
            Assert.IsTrue(p1.IsParallel(p2, Math.PI / 2));

            p1 = new Vec2d(1, 2);
            p2 = new Vec2d(4, 5);

            Assert.AreEqual(5, p1.SquareMagnitude());
            Assert.AreEqual(Math.Sqrt(5), p1.Magnitude());

            p2 = p1;
            p2.Add(new Vec2d(1, 2));
            Assert.AreEqual(new Vec2d(2, 4), p2);
            Assert.AreEqual(new Vec2d(2, 4), p1.Added(new Vec2d(1, 2)));

            p2 = new Vec2d(1, 2);
            p2.Subtract(new Vec2d(3, 2));
            Assert.AreEqual(new Vec2d(-2, 0), p2);
            Assert.AreEqual(new Vec2d(-2, 0), p1.Subtracted(new Vec2d(3, 2)));

            p2 = new Vec2d(1, 2);
            Assert.AreEqual(-4, p1.Crossed(new Vec2d(3, 2)));

            Assert.AreEqual(Math.Sqrt(16), p1.CrossMagnitude(new Vec2d(3, 2)));
            Assert.AreEqual(16, p1.CrossSquareMagnitude(new Vec2d(3, 2)));

            p2 = new Vec2d(1, 2);
            p2.Divide(2);
            Assert.AreEqual(new Vec2d(0.5, 1), p2);
            Assert.AreEqual(new Vec2d(0.5, 1), p1.Divided(2));

            Assert.AreEqual(5, p1.Dot(new Vec2d(1, 2)));

            p2 = new Vec2d(1, 2);
            p2.Multiply(2);
            Assert.AreEqual(new Vec2d(2, 4), p2);
            Assert.AreEqual(new Vec2d(2, 4), p1.Multiplied(2));

            p2 = new Vec2d(1, 2);
            p2.Scale(2);
            Assert.AreEqual(new Vec2d(2, 4), p2);
            Assert.AreEqual(new Vec2d(2, 4), p1.Scaled(2));

            p2 = new Vec2d(1, 23);
            Assert.AreEqual("0.0434372242763069,0.99905615835506", p2.Normalized().ToString());
            p2.Normalize();
            Assert.AreEqual("0.0434372242763069,0.99905615835506", p2.ToString());

            p2 = new Vec2d(1, 2);
            p2.Reverse();
            Assert.AreEqual(new Vec2d(-1, -2), p2);
            Assert.AreEqual(new Vec2d(-1, -2), p1.Reversed());

            p2.SetLinearForm(new Vec2d(1, 2), new Vec2d(4, 5));
            Assert.AreEqual(new Vec2d(5, 7), p2);
            p2.SetLinearForm(2, new Vec2d(1, 2), new Vec2d(4, 5));
            Assert.AreEqual(new Vec2d(6, 9), p2);
            p2.SetLinearForm(2, new Vec2d(1, 2), 3, new Vec2d(4, 5));
            Assert.AreEqual(new Vec2d(14, 19), p2);
            p2.SetLinearForm(2, new Vec2d(1, 2), 3, new Vec2d(4, 5), new Vec2d(7, 8));
            Assert.AreEqual(new Vec2d(21, 27), p2);

            p2 = new Vec2d(2, 1);
            Assert.AreEqual(new Vec2d(1, 0), p2.Mirrored(new Vec2d(1, 0)));
            p2.Mirror(new Vec2d(1, 0));
            Assert.AreEqual(new Vec2d(1, 0), p2);

            var m2 = new Ax2d(new Pnt2d(-1, 2), new Dir2d(-1, 0));

            p2 = new Vec2d(2, 1);
            Assert.AreEqual(new Vec2d(2, -1), p2.Mirrored(m2));
            p2.Mirror(m2);
            Assert.AreEqual(new Vec2d(2, -1), p2);

            p2 = new Vec2d(2, 1);
            Assert.AreEqual("-1,2", p2.Rotated(Math.PI / 2).ToString());
            p2.Rotate(Math.PI / 2);
            Assert.AreEqual("-1,2", p2.ToString());

            //TestContext.WriteLine(string.Format(CultureInfo.InvariantCulture, "{0},{1},{2}", gp2.x, gp2.y, gp2.z));

            Trsf2d t1 = new Trsf2d();

            t1.SetRotation(new Pnt2d(1, 2), Math.PI / 2);
            p2 = new Vec2d(2, 1);
            Assert.AreEqual("-1,2", p2.Transformed(t1).ToString());
            p2.Transform(t1);
            Assert.AreEqual("-1,2", p2.ToString());
        }