public void Dibujo_Autocad(double Xi, double Yi, int Num_Despiece) { string LayerCirculo = "FC_BORDES"; double[] CentroDibujo = new double[3] { Xi + Centro[0], Yi - Centro[1], 0 }; double EscalaR = (radio - 2 * 0.02) / radio; double EscalaR2 = radio * 4; string Nom_Seccion = ""; string Escala = "1:15"; FunctionsAutoCAD.FunctionsAutoCAD.AddCircle(CentroDibujo, radio, LayerCirculo); FunctionsAutoCAD.FunctionsAutoCAD.B_Estribo_Circular(CentroDibujo, "FC_ESTRIBOS", EscalaR2, EscalaR2, EscalaR2, 1, 0); #region Dibujo de refuerzo en seccion var X_unicos = Refuerzos.Select(x => Math.Round(x.Coord[0], 2)).ToList().Distinct().ToList(); var Y_unicos = Refuerzos.Select(x => Math.Round(x.Coord[1], 2)).ToList().Distinct().ToList(); foreach (CRefuerzo refi in Refuerzos) { refi.Dibujo_Ref_Autocad(Xi, Yi, X_unicos.Max(), X_unicos.Min(), Y_unicos.Max(), Y_unicos.Min()); } #endregion Dibujo de refuerzo en seccion #region Nombre_Seccion Nom_Seccion = "%%USeccion " + Num_Despiece; FunctionsAutoCAD.FunctionsAutoCAD.B_NombreSeccion(P_XYZ: new double[] { Xi + (B / 2), Yi - H - 0.20, 0 }, Seccion: Nom_Seccion, Escala: Escala, Layer: "FC_R-200", Xscale: 15, Yscale: 15, Zscale: 15, Rotation: 0); #endregion Nombre_Seccion }
public void Pn_Balanceado(double recubrimiento, double DiyMax, int Angulo) { double Magnitud_Cb, Magnitud_ab; double Pc_b, Mc_B; double Pb, Mb; double cb, ab; double Centroide; double fsl, Msl; float ecu = 0.003f; float Fy = 4220; float fc = Material.FC; float Es = 2000000; float beta = 0.85f - 0.05f * (fc - 280) / 70f; float ey = Fy / Es; double A1, A2, AreaComp; Magnitud_Cb = (DiyMax + radio * 100) * ecu / (ey + ecu); Magnitud_ab = beta * Magnitud_Cb; cb = Magnitud_Cb - (radio * 100); ab = Magnitud_ab - (radio * 100); A1 = Area_Segmento((float)ab); A2 = Area_Segmento(-(float)radio * 100); AreaComp = (A1 - A2); Pc_b = 0.85 * fc * AreaComp; Centroide = Centroide_Segmento(ab, AreaComp); Mc_B = Pc_b * Math.Abs(Centroide); List <float> temp_c = new List <float>(); temp_c.Add((float)cb); foreach (CRefuerzo refuezo in Refuerzos) { refuezo.CalcularDeformacion(temp_c, ecu, Angulo, Fy, Es, (float)radio * 100, Shape); } fsl = Refuerzos.Select(x => x.Fuerzas_PorCadaCPorCadaAngulo.Select(x1 => x1.Item1).Select(x2 => x2[0]).First()).ToList().Sum(); Msl = Refuerzos.Select(x => x.Momento_PorCadaCPorCadaAngulo.Select(x1 => x1.Item1).Select(x2 => x2[0]).First()).ToList().Sum(); var coord = Refuerzos.Select(x => x.Coordenadas_PorCadaAngulo.Select(x1 => x1.Item1).Select(x2 => x2[1]).First()).ToList(); var prueba = Refuerzos.Select(x => x.Fuerzas_PorCadaCPorCadaAngulo.Select(x1 => x1.Item1).Select(x2 => x2[0]).First()).ToList(); Pb = Pc_b + fsl; Mb = Mc_B + Msl; float[] Temp = new float[] { (float)Mb, (float)Pb }; PbMb3D.Add(new Tuple <float[], int>(Temp, Angulo)); }
public void DiagramaInteraccion() { float ecu = 0.003f; float Fy = 4220; float fc = Material.FC; float Es = 2000000; float beta = 0.85f - 0.05f * (fc - 280) / 70f; PbMb2D = new List <Tuple <List <float[]>, int> >(); PbMb3D = new List <Tuple <float[], int> >(); AreaComprimida = new List <Tuple <List <float>, int> >(); CentroideAreaComprimida = new List <Tuple <List <float[]>, int> >(); foreach (CRefuerzo cRefuerzo in Refuerzos) { cRefuerzo.Coordenadas_PorCadaAngulo = new List <Tuple <float[], int> >(); cRefuerzo.Esfuerzos_PorCadaCPorCadaAngulo = new List <Tuple <List <float>, int> >(); cRefuerzo.Fuerzas_PorCadaCPorCadaAngulo = new List <Tuple <List <float>, int> >(); cRefuerzo.Momento_PorCadaCPorCadaAngulo = new List <Tuple <List <float>, int> >(); cRefuerzo.Deformacion_PorCadaCPorCadaAngulo = new List <Tuple <List <float>, int> >(); } int DeltasVariacionC = 20; int Delta = 10; for (int Angulo = 0; Angulo <= 360; Angulo += Delta) { List <float[]> PorCadaRotacion = new List <float[]>(); List <float> ms = new List <float>(); //Rotacion de la Sección Refuerzos.ForEach(x => x.CalcularCoordenadasPorCadaAngulo(Angulo)); List <float> C_Variando = new List <float>(); List <float> a_Variando = new List <float>(); List <float> AreaComprimida1 = new List <float>(); List <float[]> CentroideAreaComprimida1 = new List <float[]>(); float Ymin = -(float)radio * 100; float Ymax = (float)radio * 100; float Magnitud_C, Magnitud_a; float atemp; for (float C = Ymin + (Ymax - Ymin) / DeltasVariacionC; C <= Ymax; C += (Ymax - Ymin) / DeltasVariacionC) { Magnitud_C = C + (float)radio * 100; Magnitud_a = beta * Magnitud_C; atemp = Magnitud_a - (float)radio * 100; C_Variando.Add(C); a_Variando.Add(atemp); } Refuerzos.ForEach(x => x.CalcularDeformacion(C_Variando, ecu, Angulo, Fy, Es, Ymax, Shape)); //Calculo del area comprimida para cada variacion de c for (int i = 0; i < a_Variando.Count; i++) { float A1, A2; float[] Centroide_comp; A1 = Area_Segmento(a_Variando[i]); A2 = Area_Segmento(-(float)Math.Round(radio, 2) * 100); AreaComprimida1.Add(A1 - A2); Centroide_comp = new float[] { 0, (float)Centroide_Segmento(a_Variando[i], A1 - A2) }; CentroideAreaComprimida1.Add(Centroide_comp); } CentroideAreaComprimida.Add(new Tuple <List <float[]>, int>(CentroideAreaComprimida1, Angulo)); AreaComprimida.Add(new Tuple <List <float>, int>(AreaComprimida1, Angulo)); } PnMn2D = new List <Tuple <List <float[]>, int> >(); PuMu2D = new List <Tuple <List <float[]>, int> >(); for (int i = 0; i < AreaComprimida.Count; i++) { List <float[]> PnMnAux = new List <float[]>(); List <float[]> PuMuAux = new List <float[]>(); for (int j = 0; j < AreaComprimida[i].Item1.Count; j++) { float Cc = 0.85f * fc * AreaComprimida[i].Item1[j]; float Fs = 0; float Ms = 0; float Ast = 0; Ast = (float)Refuerzos.Select(x => x.As_Long).Sum(); foreach (CRefuerzo cRefuerzo in Refuerzos) { Fs += cRefuerzo.Fuerzas_PorCadaCPorCadaAngulo[i].Item1[j]; Ms += cRefuerzo.Momento_PorCadaCPorCadaAngulo[i].Item1[j]; } float Pmax = 0.75f * (0.85f * fc * ((float)Area * 10000 - Ast) + Fy * Ast); float Pn_ = Cc + Fs; float Mn_ = Cc * (-CentroideAreaComprimida[i].Item1[j][1]) + Ms; float maxY = Refuerzos.Max(x => x.Coordenadas_PorCadaAngulo[i].Item1[1]); float esi = Refuerzos.Find(x => x.Coordenadas_PorCadaAngulo[i].Item1[1] == maxY).Deformacion_PorCadaCPorCadaAngulo[i].Item1[j]; float et = Math.Abs(esi); float fi = DeterminarFi(et); float Pu = Pn_ * fi; float Mu = Mn_ * fi; if (Pn_ > Pmax) { Pn_ = Pmax; Pu = Pmax * 0.65f; } if (Pn_ < 0) { if (PnMnAux.Exists(x => x[0] == 0) == false) { PnMnAux.Add(new float[] { 0, (-Ast * Fy) }); PuMuAux.Add(new float[] { 0, (-Ast * Fy) }); } } else { PnMnAux.Add(new float[] { Mn_, Pn_ }); PuMuAux.Add(new float[] { Mu, Pu }); } if (j == AreaComprimida[i].Item1.Count - 1) { PnMnAux.Add(new float[] { 0, Pmax }); PuMuAux.Add(new float[] { 0, 0.65f * Pmax }); } } PnMn2D.Add(new Tuple <List <float[]>, int>(PnMnAux, AreaComprimida[i].Item2)); PuMu2D.Add(new Tuple <List <float[]>, int>(PuMuAux, AreaComprimida[i].Item2)); } MnPn3D = new List <Tuple <List <float[]>, int> >(); MuPu3D = new List <Tuple <List <float[]>, int> >(); for (int i = 0; i < PnMn2D.Count; i++) { int Angulo = PnMn2D[i].Item2; List <float[]> SeriePuntos = new List <float[]>(); List <float[]> SeriePuntosU = new List <float[]>(); for (int j = 0; j < PnMn2D[i].Item1.Count; j++) { float X1 = (float)(PnMn2D[i].Item1[j][0] * Math.Cos((Angulo * Math.PI / 180))); float Y2 = (float)(PnMn2D[i].Item1[j][0] * Math.Sin((Angulo * Math.PI / 180))); float Z2 = PnMn2D[i].Item1[j][1]; float[] PuntosDescompuestos = new float[] { X1, Y2, Z2 }; SeriePuntos.Add(PuntosDescompuestos); float X1U = (float)(PuMu2D[i].Item1[j][0] * Math.Cos((Angulo * Math.PI / 180))); float Y2U = (float)(PuMu2D[i].Item1[j][0] * Math.Sin((Angulo * Math.PI / 180))); float Z2U = PuMu2D[i].Item1[j][1]; float[] PuntosDescompuestosUltimos = new float[] { X1U, Y2U, Z2U }; SeriePuntosU.Add(PuntosDescompuestosUltimos); } MnPn3D.Add(new Tuple <List <float[]>, int>(SeriePuntos, PnMn2D[i].Item2)); MuPu3D.Add(new Tuple <List <float[]>, int>(SeriePuntosU, PnMn2D[i].Item2)); } }