예제 #1
0
        public void Set_Refuerzo_Seccion(int[] Refuerzos_temp, double Recubrimiento)
        {
            double Long_arco         = 0;
            double Theta             = 0;
            double Radio_interno     = 0;
            double Perimetro_interno = 0;

            double[]  Coord     = new double[2];
            int       id        = 0;
            CRefuerzo refuerzoi = null;

            Refuerzos.Clear();

            Radio_interno     = ((2 * radio * 100) - 2 * Recubrimiento - 2) / 2;
            Perimetro_interno = 2 * Math.PI * Radio_interno;
            Long_arco         = Perimetro_interno / Refuerzos_temp.Count();

            foreach (int Diametroi in Refuerzos_temp)
            {
                Coord[0]         = Radio_interno * Math.Cos((Math.PI / 2) - Theta);
                Coord[1]         = Radio_interno * Math.Sin((Math.PI / 2) - Theta);
                refuerzoi        = FunctionsProject.DeepClone(new CRefuerzo(id, "#" + Diametroi, Coord, TipodeRefuerzo.longitudinal));
                refuerzoi.Alzado = 1;
                Refuerzos.Add(refuerzoi);
                id++;
                Theta += Long_arco / Radio_interno;
            }
        }
예제 #2
0
        public void Refuerzo_Base(double recub)
        {
            int    Num_Barras = 0;
            int    Barra_aux  = 0;
            int    Diametro1  = 0;
            int    Diametro2  = 0;
            double As_min;
            double As_i;
            double p_error;
            int    Cont_Aux1 = 0;
            int    Cont_Aux2 = 0;
            int    X1        = 0; //Cantidad de barras para diametro1
            int    X2        = 0; //Cantida de barras para diametro2

            Refuerzos.Clear();
            Num_Barras = 4;
            As_min     = 0.01 * Area;
            As_i       = As_min / Num_Barras;

            while (As_i > FunctionsProject.Find_As(6))
            {
                Num_Barras += 2;
                As_i        = (As_min / Num_Barras);
            }

            //Asociar As_i a un diametro de barra
            Barra_aux = FunctionsProject.Find_Barra(As_i);

            //Encontrar Combinatoria optima para el acero base mas aproximado al 1%
            p_error = Math.Abs(((FunctionsProject.Find_As(Barra_aux) * Num_Barras) - As_min) / As_min) * 100;

            if (p_error >= 1.05)

            {
                if (FunctionsProject.Find_As(Barra_aux) * Num_Barras > As_min)
                {
                    Diametro1 = Barra_aux;
                    if (Diametro1 == 4)
                    {
                        Diametro2 = 0;
                    }
                    else
                    {
                        Diametro2 = Barra_aux - 1;
                    }
                }
                else
                {
                    Diametro1 = Barra_aux;
                    Diametro2 = Barra_aux + 1;
                }

                if (Diametro2 > 0)
                {
                    X2 = Convert.ToInt32((As_min - FunctionsProject.Find_As(Diametro1) * Num_Barras) / (FunctionsProject.Find_As(Diametro2) - FunctionsProject.Find_As(Diametro1)));
                }
                else
                {
                    X2 = 0;
                }

                if (X2 % 2 != 0)
                {
                    X2 = FunctionsProject.Redondear_Entero(X2, 4, true);
                }

                X1 = Num_Barras - X2;
            }
            else
            {
                Diametro1 = Barra_aux;
                Diametro2 = 0;
                X1        = Num_Barras;
                X2        = 0;
            }

            int[] Aux_Refuerzos  = new int[Num_Barras];
            int   Aux_num_barras = Num_Barras;
            int   i = 0;

            Cont_Aux1 = X1;
            Cont_Aux2 = X2;

            while (Aux_num_barras > 0)
            {
                if (X2 > 0)
                {
                    if (Cont_Aux1 > 0)
                    {
                        if (Cont_Aux1 > 0)
                        {
                            Aux_Refuerzos[i] = Diametro1;
                            Cont_Aux1       -= 1;
                            Aux_num_barras  -= 1;
                        }

                        if (Cont_Aux1 > 0)
                        {
                            Aux_Refuerzos[i + (Num_Barras / 2) - 1] = Diametro1;
                            Cont_Aux1      -= 1;
                            Aux_num_barras -= 1;
                        }
                    }
                    else
                    {
                        if (Aux_Refuerzos[i] == 0)
                        {
                            Aux_Refuerzos[i] = Diametro2;
                            Cont_Aux2       -= 1;
                            Aux_num_barras  -= 1;
                        }
                    }
                }
                else
                {
                    Aux_Refuerzos[i] = Diametro1;
                    Cont_Aux1       -= 1;
                    Aux_num_barras  -= 1;
                }
                i++;
            }
            Set_Refuerzo_Seccion(Aux_Refuerzos, recub);
        }