Пример #1
0
        private static void TestThreePoints(Vec2d c, double radius, double a1, double am, double a2)
        {
            CircleArc2 arc = new CircleArc2(c, radius, a1, a2);

            Assert.IsTrue(arc.GetAngle(arc.TMin).EpsilonEquals(a1));
            Assert.IsTrue(arc.GetAngle((arc.TMin + arc.TMax) / 2).EpsilonEquals(am));
            Assert.IsTrue(arc.GetAngle(arc.TMax).EpsilonEquals(a2));

            // Se toman 3 puntos y se calcula el centro, que tiene que coincidir con el centro.
            Vec2d p1 = arc.GetPosition(arc.TMin);
            Vec2d p2 = arc.GetPosition((arc.TMin + arc.TMax) / 2);
            Vec2d p3 = arc.GetPosition(arc.TMax);
            Vec2d cc = CircleArc2Utils.GetCenter(p1, p2, p3);

            Assert.IsTrue(arc.Center.EpsilonEquals(cc));

            // Se calcula el arco formado por los 3 puntos, que tiene que coincidir con el arco.
            CircleArc2 arc2 = CircleArc2Utils.ThreePoints(p1, p2, p3);

            Assert.IsTrue(arc.Angle1.EpsilonEquals(arc2.Angle1));
            //Assert.IsTrue(arc.Angle2.EpsilonEquals(arc2.Angle2));
            Assert.IsTrue(arc.AdvAngle.EpsilonEquals(arc2.AdvAngle));
            Assert.IsTrue(arc.Center.EpsilonEquals(arc2.Center));
            Assert.IsTrue(arc.Radius.EpsilonEquals(arc2.Radius));

            Assert.IsTrue(arc.TMin.EpsilonEquals(arc2.TMin));
            Assert.IsTrue(arc.TMax.EpsilonEquals(arc2.TMax));
        }
Пример #2
0
        public double Evaluate(Point2d pnt)
        {
            CircleArc2 arc = new CircleArc2(this.center, this.radius, this.angle0, this.angle1);
            double     d2;
            double     t = arc.Project(pnt, out d2);

            // Se desnormaliza la estacion.
            return(this.t0 + (this.t1 - this.t0) * t);
        }
Пример #3
0
        public void PuntoEje(double t, out Point2d pnt, out double normal, out double radio)
        {
            CircleArc2 arc = new CircleArc2(this.center, this.radius, this.angle0, this.angle1);

            if (this.t0.EpsilonEquals(this.t1))
            {
                pnt    = arc.GetPosition(this.t0);
                radio  = this.radius;
                normal = this.normal1;
                return;
            }

            // Se normaliza la estacion.
            double t01 = (t - this.t0) / (this.t1 - this.t0);

            pnt    = arc.GetPosition(t01);
            radio  = this.radius;
            normal = this.normal1 + (this.t1 - t) / this.radius;
        }