예제 #1
0
        public static double[] Calcular(string func, double[] xk, double erro, int n)
        {
            int    k = 0;
            double lambda, norma = 1000;

            double[] d, yk, vetNorma, x;
            vetNorma = new double[n];
            d        = new double[n];
            yk       = new double[n];
            string lambdaD, vetYj, Fy;

            do
            {
                k++;
                x  = (double[])xk.Clone();
                yk = (double[])xk.Clone();
                for (int j = 0; j < n; j++)
                {
                    /*Monta o vetor d*/
                    for (int b = 0; b < n; b++)
                    {
                        d[b] = 0;
                    }
                    d[j] = 1;
                    /**/
                    //multiplica lambda por d
                    lambdaD = Interpretadores.LambdaVDirec(d);
                    //vetor lambda*d + vetor yk
                    vetYj = Interpretadores.GeraVetorY(yk, lambdaD);
                    //substitui lambda por x nos lugares corretos -> Fy só com lambda de variável
                    Fy = Interpretadores.GeraFy(func, vetYj.Replace(',', '.'));
                    //Newton para calcular o valor de lambda
                    lambda = Newton.Calcular(0, (Fy.Replace("lamb", "x[1]")).Replace(',', '.'), 0.1);
                    //substitui o valor de lambda na função Fy -> gera vetor xk novo
                    yk = Interpretadores.SubsLambda(lambda, vetYj.Replace(',', '.'));
                }
                xk       = (double[])yk.Clone();
                vetNorma = Interpretadores.SubtracaoVetor(xk, x);
                //resultado da norma
                norma = Interpretadores.NormaVetor(vetNorma);
            } while (norma > erro);
            return(xk);
        }
예제 #2
0
        } // LeerDevmode

        /** \brief Lectura registro EmrHeader
         * \details Lectura y analisis registro EMR_HEADER, Su estructura se define en el documento MS-EMF, título 2.3.4.2.
         * \param ArrayEmrHeader Array con el contenido del registro EMR_HEADER.
         * \param PrintJob Estructura pasada por referencia para guardar las propiedades del trabajo de impresión
         * \param Position Posición del registro EMR_HEADER en el fichero de Spool
         */
        private void AnalizeEmrHeader(byte [] ArrayEmrHeader, ref STRUCT_PRINT_JOB PrintJob, int Position)
        {
            // Primeros elementos del registro:
            //  - Type: 4 bytes (ya leido)
            //  - Size: 4 bytes (ya leido)
            //  - Bounds: 16 bytes.
            //  - Frame: 16 bytes. PuntoOrigen (Ox, Oy) Punto Final (Fx, Fy)
            // El resto de elementos no nos analizamos por que no lo necesitamos.

            int PosicionFrame = 24; // (Type + Size + Bounds) bytes

            // Coordenadas del frame
            uint Ox, Oy, Fx, Fy;

            Ox             = (uint)BitConverter.ToInt32(ArrayEmrHeader, PosicionFrame);
            PosicionFrame += 4;
            Oy             = (uint)BitConverter.ToInt32(ArrayEmrHeader, PosicionFrame);
            PosicionFrame += 4;
            Fx             = (uint)BitConverter.ToInt32(ArrayEmrHeader, PosicionFrame);
            PosicionFrame += 4;
            Fy             = (uint)BitConverter.ToInt32(ArrayEmrHeader, PosicionFrame);

            Log.Info("         " + Util.MostrarHex((UInt32)(Position + PosicionFrame)) + "    Frame:   " + "(" + Ox.ToString() + ", " + Oy.ToString() + "), (" + Fx.ToString() + ", " + Fy.ToString() + ")");

            // El siguiente If es por si un trabajo de impresión no tuviese el mismo tamaño de página para todas las páginas.
            // Comparamos con el tamaño de página guardado en el trabajo de impresión. Si el tamaño de página del EMR_HEADER es mayor actualizamos en el trabajo de impresion.
            if ((PrintJob.N_WIDTH * PrintJob.N_LENGTH) < ((Fx - Ox) * (Fy - Oy)))
            {
                PrintJob.N_WIDTH  = (int)(Fy - Oy);
                PrintJob.N_LENGTH = (int)(Fx - Ox);
            }
        } // Fin LeerEmrHeader