Esempio n. 1
0
        public static bool PuntoCircunscritoDelaunay(Triangulo Triangulo, Punto3D PTest)
        {
            //Triángulo en orden antihorario
            Triangulo = OrdenarVertices(Triangulo, false);

            Matrices.Matriz MatCircunscrito = new Matrices.Matriz(new double[4, 4] {
                { Triangulo.P1.X, Triangulo.P1.Y, Math.Pow(Triangulo.P1.X, 2.0) + Math.Pow(Triangulo.P1.Y, 2.0), 1.0 },
                { Triangulo.P2.X, Triangulo.P2.Y, Math.Pow(Triangulo.P2.X, 2.0) + Math.Pow(Triangulo.P2.Y, 2.0), 1.0 },
                { Triangulo.P3.X, Triangulo.P3.Y, Math.Pow(Triangulo.P3.X, 2.0) + Math.Pow(Triangulo.P3.Y, 2.0), 1.0 },
                { PTest.X, PTest.Y, Math.Pow(PTest.X, 2.0) + Math.Pow(PTest.Y, 2.0), 1.0 }
            });

            return(MatCircunscrito.Determinate > 0);
        }
Esempio n. 2
0
        private bool _CondicionDelaunay(Triangulo T, Punto3D P)
        {
            //TODO: determinar cual de las dos operaciones matriciales es más rápida

            T.OrdenarVertices(false);

            Matrices.Matriz MatDelaunay = new Matrices.Matriz(new double[4, 4]
            {
                { T.P1.X, T.P1.Y, Math.Pow(T.P1.X, 2.0) + Math.Pow(T.P1.Y, 2.0), 1.0 },
                { T.P2.X, T.P2.Y, Math.Pow(T.P2.X, 2.0) + Math.Pow(T.P2.Y, 2.0), 1.0 },
                { T.P3.X, T.P3.Y, Math.Pow(T.P3.X, 2.0) + Math.Pow(T.P3.Y, 2.0), 1.0 },
                { P.X, P.Y, Math.Pow(P.X, 2.0) + Math.Pow(P.Y, 2.0), 1.0 }
            });

            /*Matrices.Matriz MatDelaunayCompacta = new Matrices.Matriz(new double[3,3]
             *  {
             *      {T.P1.X - P.X, T.P1.Y - P.Y, Math.Pow(T.P1.X - P.X, 2.0) + Math.Pow(T.P1.Y - P.Y, 2.0)},
             *      {T.P2.X - P.X, T.P2.Y - P.Y, Math.Pow(T.P2.X - P.X, 2.0) + Math.Pow(T.P2.Y - P.Y, 2.0)},
             *      {T.P3.X - P.X, T.P3.Y - P.Y, Math.Pow(T.P3.X - P.X, 2.0) + Math.Pow(T.P3.Y - P.Y, 2.0)},
             *  });*/

            return(MatDelaunay.Determinate > 0.0);
            //return MatDelaunayCompacta.Determinate > 0.0;
        }