// cutDownType values: ( PercentOfTrees, Volume, Area )
        // trimType values: ( ByTallest, BySmallest, Systematic )
        // value: (% de corta)
        public override void ApplyCutDown(Parcela oldPlot, Parcela newPlot, CutDownType cutDownType, TrimType trimType, float value)
        {
            newPlot.VAR_10      = value;
            newPlot.H_DOMINANTE = oldPlot.H_DOMINANTE.Value;
            double parA1, parA2,
                   parB0, parB1, parB2, parB3,
                   parC0, parC1, parC2, parC3,
                   parD1, parD2,
                   parA, parB, SEC_NORMAL, tpuBA;

            switch (trimType)
            {
            case TrimType.ByTallest:

                break;

            case  TrimType.BySmallest:
                if (cutDownType == CutDownType.Area)
                {
                    parC0 = 1.35;
                    parC1 = 0.979;
                    parC2 = 0.859;
                    tpuBA = value / 100;
                    newPlot.A_BASIMETRICA = oldPlot.A_BASIMETRICA.Value - tpuBA * oldPlot.A_BASIMETRICA.Value;

                    newPlot.N_PIESHA = newPlot.A_BASIMETRICA * 40000 / Math.Pow(oldPlot.D_CUADRATICO.Value, 2) * Math.PI;

                    newPlot.D_CUADRATICO = oldPlot.D_CUADRATICO.Value;

                    newPlot.VCC = Math.Exp((double)1.69 + 0.0604 * newPlot.SI.Value - 48.8 / newPlot.EDAD.Value + 0.982 * Math.Log(newPlot.A_BASIMETRICA.Value));
                }
                break;

            case  TrimType.Systematic:
                if (cutDownType == CutDownType.Area)
                {
                    parC0 = 1.35;
                    parC1 = 0.979;
                    parC2 = 0.859;
                    tpuBA = value / 100;
                    newPlot.A_BASIMETRICA = oldPlot.A_BASIMETRICA.Value - tpuBA * oldPlot.A_BASIMETRICA.Value;

                    newPlot.N_PIESHA = newPlot.A_BASIMETRICA * 40000 / Math.Pow(oldPlot.D_CUADRATICO.Value, 2) * Math.PI;

                    newPlot.D_CUADRATICO = oldPlot.D_CUADRATICO.Value;

                    newPlot.VCC = Math.Exp((double)1.69 + 0.0604 * newPlot.SI.Value - 48.8 / newPlot.EDAD.Value + 0.982 * Math.Log(newPlot.A_BASIMETRICA.Value));
                }
                break;
            }
        }
Example #2
0
        // cutDownType values: ( PercentOfTrees, Volume, Area )
        // trimType values: ( ByTallest, BySmallest, Systematic )
        // value: (% de corta)
        public override void ApplyCutDown(Parcela oldPlot, Parcela newPlot, CutDownType cutDownType, TrimType trimType, float value)
        {
            newPlot.VAR_9 = value; // % de corta...
            double parA0, parB0, parB1, parB2, parB3;

            parA0      = 4.9272;
            parB0      = 1.3324;
            parB1      = 0.0559;
            parB2      = -22.7815;
            parB3      = 1.0394;
            newPlot.SI = oldPlot.SI.Value;
            double parC0, parC1, parC2, SEC_NORMAL;

            switch (cutDownType)
            {
            case CutDownType.PercentOfTrees:
                parC0                 = 0.531019;
                parC1                 = 0.989792;
                parC2                 = 0.517850;
                newPlot.N_PIESHA      = (1 - value / 100) * oldPlot.N_PIESHA.Value;
                newPlot.D_CUADRATICO  = parC0 + oldPlot.D_CUADRATICO.Value * (parC1 + parC2 * Math.Pow(value / 100, 2));
                SEC_NORMAL            = Math.PI * Math.Pow(newPlot.D_CUADRATICO.Value / 2, 2);
                newPlot.A_BASIMETRICA = SEC_NORMAL * newPlot.N_PIESHA.Value / 10000;
                newPlot.VCC           = Math.Exp((double)parB0 + parB1 * newPlot.SI.Value + parB2 / newPlot.EDAD.Value + parB3 * Math.Log(newPlot.A_BASIMETRICA.Value));
                break;

            case CutDownType.Volume:
                break;

            case CutDownType.Area:
                parC0 = 0.144915;
                parC1 = 0.969819;
                parC2 = 0.678010;
                newPlot.A_BASIMETRICA = (1 - value / 100) * oldPlot.A_BASIMETRICA.Value;
                newPlot.D_CUADRATICO  = Math.Pow(parC0 + parC1 * Math.Pow(oldPlot.D_CUADRATICO.Value, 0.5) + parC2 * (value / 100), 2);
                SEC_NORMAL            = Math.PI * Math.Pow(newPlot.D_CUADRATICO.Value / 200, 2);
                newPlot.N_PIESHA      = newPlot.A_BASIMETRICA.Value / SEC_NORMAL;
                newPlot.VCC           = Math.Exp((double)parB0 + parB1 * newPlot.SI.Value + parB2 / newPlot.EDAD.Value + parB3 * Math.Log(newPlot.A_BASIMETRICA.Value));
                break;
            }
        }
// cutDownType values: ( PercentOfTrees, Volume, Area )
// trimType values: ( ByTallest, BySmallest, Systematic )
// value: (% de corta)
        public override void ApplyCutDown(Parcela oldPlot, Parcela newPlot, CutDownType cutDownType, TrimType trimType, float value)
        {
            newPlot.VAR_9 = value;
            //Indice de calidad
            double IC = oldPlot.SI.Value / 10;
            // H_DOMINANTE:
            double parA17, parB17, parC17, parA29, parB29, parC29;

            parA17 = 1.9962;
            parB17 = 0.2642;
            parC17 = 0.46;
            parA29 = 3.1827;
            parB29 = 0.3431;
            parC29 = 0.3536;
            double H0_17 = 10 * parA17 * Math.Pow(1 - Math.Exp((double)-1 * parB17 * newPlot.EDAD.Value / 10), 1 / parC17);
            double H0_29 = 10 * parA29 * Math.Pow(1 - Math.Exp((double)-1 * parB29 * newPlot.EDAD.Value / 10), 1 / parC29);

            newPlot.VAR_2       = H0_17;
            newPlot.VAR_3       = H0_29;
            newPlot.H_DOMINANTE = H0_17 + (H0_29 - H0_17) * (IC - 1.7) / 1.2;
            // parametros de volumen y área basimétrica
            double parA0, parB0, parB1, parB2, parB3;

            parA0 = 5.103222;
            parB0 = 1.42706;
            parB1 = 0.388317;
            parB2 = -30.691629;
            parB3 = 1.034549;
            // parametros de corta
            double parC0, parC1, parC2, SEC_NORMAL, tpuN, tpuBA;

            switch (cutDownType)
            {
            case CutDownType.PercentOfTrees:
                parC0                 = 0.531019;
                parC1                 = 0.989792;
                parC2                 = 0.517850;
                tpuN                  = value / 100;
                newPlot.N_PIESHA      = (1 - tpuN) * oldPlot.N_PIESHA.Value;
                newPlot.D_CUADRATICO  = parC0 + parC1 * oldPlot.D_CUADRATICO + parC2 * oldPlot.D_CUADRATICO.Value * Math.Pow(tpuN, 2);
                SEC_NORMAL            = Math.PI * Math.Pow(newPlot.D_CUADRATICO.Value / 2, 2);
                newPlot.A_BASIMETRICA = SEC_NORMAL * newPlot.N_PIESHA.Value / 10000;
                newPlot.VCC           = Math.Exp((double)parB0 + parB1 * IC + parB2 / newPlot.EDAD.Value + parB3 * Math.Log(newPlot.A_BASIMETRICA.Value));
                break;

            case CutDownType.Volume:
                break;

            case CutDownType.Area:
                parC0 = 0.144915;
                parC1 = 0.969819;
                parC2 = 0.678010;
                tpuBA = value / 100;
                newPlot.A_BASIMETRICA = (1 - tpuBA) * oldPlot.A_BASIMETRICA.Value;
                newPlot.D_CUADRATICO  = Math.Pow(parC0 + parC1 * Math.Pow(oldPlot.D_CUADRATICO.Value, 0.5) + parC2 * (tpuBA), 2);
                SEC_NORMAL            = Math.PI * Math.Pow(newPlot.D_CUADRATICO.Value / 200, 2);
                newPlot.N_PIESHA      = newPlot.A_BASIMETRICA.Value / SEC_NORMAL;
                newPlot.VCC           = Math.Exp((double)parB0 + parB1 * IC + parB2 / newPlot.EDAD.Value + parB3 * Math.Log(newPlot.A_BASIMETRICA.Value));
                break;
            }
        }