|
|||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Форма 3using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Drawing.Drawing2D;
namespace Рама { public partial class Form3: Form { Form1 f1; public Form2 f2; double[,] NQMM;
public Form3(Form1 f1) { InitializeComponent(); this.f1 = f1; f2 = f1.f2; NQMM=new double[f1.m,5]; NQM(); } void NQM() { if (f2 == null) return; // массивы косинусов double[] CA = new double[f1.m]; double[] CB = new double[f1.m]; //dataGridView1.Rows.Add(); //dataGridView1.Rows[0].Cells[0].Value = f2.K[1,1]; for (int ii = 0; ii < f1.m; ii++) { NQMM[ii, 0] = ii + 1; double[] qe = new double[6]; double[] qe1 = new double[6]; double[] u = new double[3]; for (int i=0;i<6;i++) { qe1[i]=f1.q[f2.A[ii,i+1]-1];
}
double [,] Ke = new double[3, 3]; // double[,] Ke1 = new double[6, 6]; // double[,] Me = new double[6, 6]; // double[,] Me1 = new double[6, 6]; double[,] T = new double[6, 6]; // double[,] Tt = new double[6, 6]; // double[,] TtK = new double[6, 6]; // double[,] TtM = new double[6, 6];
double x1 = f1.MatrCoor[Convert.ToInt32(f1.MatrTop[ii, 1]) - 1, 1]; double y1 = f1.MatrCoor[Convert.ToInt32(f1.MatrTop[ii, 1]) - 1, 2]; double x2 = f1.MatrCoor[Convert.ToInt32(f1.MatrTop[ii, 2]) - 1, 1]; double y2 = f1.MatrCoor[Convert.ToInt32(f1.MatrTop[ii, 2]) - 1, 2]; double h = Math.Sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1)); double cosA = (x2 - x1) / h; double cosB = (y2 - y1) / h; double EF = f1.MatrTop[ii, 7]; double EI = f1.MatrTop[ii, 8]; double mm = f1.MatrTop[ii, 9];
CA [ii]=cosA; CB[ii] = cosB; //Матрица преобразования координат T[0, 0] = cosA; T[0, 1] = cosB; T[0, 2] = 0; T[0, 3] = 0; T[0, 4] = 0; T[0, 5] = 0;
T[1, 0] = -cosB; T[1, 1] = cosA; T[1, 2] = 0; T[1, 3] = 0; T[1, 4] = 0; T[1, 5] = 0;
T[2, 0] = 0; T[2, 1] = 0; T[2, 2] = 1; T[2, 3] = 0; T[2, 4] = 0; T[2, 5] = 0;
T[3, 0] = 0; T[3, 1] = 0; T[3, 2] = 0; T[3, 3] = cosA; T[3, 4] = cosB; T[3, 5] = 0;
T[4, 0] = 0; T[4, 1] = 0; T[4, 2] = 0; T[4, 3] = -cosB; T[4, 4] = cosA; T[4, 5] = 0;
T[5, 0] = 0; T[5, 1] = 0; T[5, 2] = 0; T[5, 3] = 0; T[5, 4] = 0; T[5, 5] = 1; //Локальная матрица жесткости 3*3 Ke[0, 0] = EF / h; Ke[0, 1] = 0; Ke[0, 2] = 0;
Ke[1, 0] = 0; Ke[1, 1] = 12 * EI / Math.Pow(h, 3); Ke[1, 2] = 6 * EI / Math.Pow(h, 2);
Ke[2, 0] = 0; Ke[2, 1] = 6 * EI / Math.Pow(h, 2); Ke[2, 2] = 4 * EI / Math.Pow(h, 1);
// вычисление перемещений в локальной системе отсчета for (int i = 0; i < 6; i++) { qe[i] = 0; for (int k = 0; k < 6; k++) qe[i] = qe[i] + T[i, k] * qe1[k]; } // Вычисление относительных локальных перемещений double[] deltau = new double[3]; deltau[0]=qe[3]-qe[0]; deltau[1]=qe[5]*h-(qe[4]-qe[1]); deltau[2]=qe[2]-qe[5]; for (int i = 0; i < 3; i++) { NQMM[ii,i+1]=0; for (int k = 0; k < 3; k++) NQMM[ii, i + 1] = NQMM[ii, i + 1] + Ke[i, k] * deltau[k]; } //Изменение знака внутреннего усилия в первом узле //в соответствие срастяжением нижних волокон при M>0 NQMM[ii, 3] = -NQMM[ii, 3]; dataGridView1.Rows.Add(); //Определение момента во втором узле элемента NQMM[ii, 4] = NQMM[ii, 3] + NQMM[ii, 2] * h; for (int i = 0; i < 5; i++) { dataGridView1.Rows[ii].Cells[i].Value = NQMM[ii, i]; } } //Построение double[] x, y; Double My = 0, MaxY = 0, Mx = 0, MaxX = 0; int[] yint, xint;
Bitmap myBmp;
x = new double[f1.n]; y = new double[f1.n]; for (int i = 0; i < f1.n; i++) { x[i] = f1.MatrCoor[i, 1]; y[i] = f1.MatrCoor[i, 2]; }
if (x == null || y == null) return; MaxY = 0.001;
MaxX = 0.001;
for (int i = 0; i < f1.n; i++) { if (System.Math.Abs(y[i]) > MaxY) { MaxY = System.Math.Abs(y[i]);; } if (System.Math.Abs(x[i]) > MaxX) { MaxX = System.Math.Abs(x[i]); }
} if (MaxY >= MaxX) MaxX = MaxY; else MaxY = MaxX; My = (pictureBox1.Height) / 1.2 / MaxY;
Mx = (pictureBox1.Width) / 1.2 / MaxX;
yint = new int[f1.n];
xint = new int[f1.n]; for (int i = 0; i < f1.n; i++) { yint[i] = Convert.ToInt32(pictureBox1.Height / 1.1) - Convert.ToInt32(y[i] * My);
xint[i] = Convert.ToInt32(pictureBox1.Width / 10) + Convert.ToInt32(x[i] * Mx);
}
myBmp = new Bitmap(pictureBox1.Width, pictureBox1.Height); Graphics gr1 = Graphics.FromImage(myBmp); Pen P1 = new Pen(Color.Red, 2); gr1.DrawRectangle(P1, 1, 1, pictureBox1.Width - 2, pictureBox1.Height - 2);
Pen P2 = new Pen(Color.Green, 2); Pen P5 = new Pen(Color.Green, 12); Brush B2 = new SolidBrush(Color.Azure); Brush B3 = new SolidBrush(Color.Brown);
int[] Zakx = new int[f1.n]; int[] Zaky = new int[f1.n]; int[] ZakFi = new int[f1.n]; for (int i = 0; i < f1.n; i++) { Zakx[i] = Convert.ToInt32(f1.MatrCoor[i, 6]); Zaky[i] = Convert.ToInt32(f1.MatrCoor[i, 7]); ZakFi[i] = Convert.ToInt32(f1.MatrCoor[i, 8]);
}
Pen P3 = new Pen(Color.Brown, 4); Pen P6 = new Pen(Color.Aqua, 18);
for (int i = 0; i < f1.m; i++) { //Построение распределенной нагрузки if ((f1.MatrTop[i, 3]!= 0) || (f1.MatrTop[i, 4]!= 0) || (f1.MatrTop[i, 5]!= 0) || (f1.MatrTop[i, 6]!= 0)) { gr1.DrawLine(P6, xint[(int)f1.MatrTop[i, 1] - 1], yint[(int)f1.MatrTop[i, 1] - 1], xint[(int)f1.MatrTop[i, 2] - 1], yint[(int)f1.MatrTop[i, 2] - 1]); } //Построение линий конечных элементов gr1.DrawLine(P3, xint[(int)f1.MatrTop[i, 1] - 1], yint[(int)f1.MatrTop[i, 1] - 1], xint[(int)f1.MatrTop[i, 2] - 1], yint[(int)f1.MatrTop[i, 2] - 1]);
} //Нанесение прямоугольников на расположение узлов for (int i = 0; i < f1.n; i++) {
gr1.FillRectangle(B3, xint[i] - 4, yint[i] - 4, 8, 8); gr1.DrawRectangle(P2, xint[i] - 4, yint[i] - 4, 8, 8);
} // Линии шириной 12 п. в точках закрепления for (int i = 0; i < f1.n; i++) {
if (Zakx[i] < 0 || Zaky[i] < 0) { gr1.DrawLine(P5, xint[i] - 24, yint[i] + 10, xint[i] + 24, yint[i] + 10); } //Нанесение окружностей на расположение шарниров if ((Zakx[i]!= 0 || Zaky[i]!= 0) & (ZakFi[i] == 0)) {
gr1.FillEllipse(B2, xint[i] - 6, yint[i] - 6, 12, 12); gr1.DrawEllipse(P2, xint[i] - 6, yint[i] - 6, 12, 12);
}
} double Mp = 0, MaxP = 0.001, P = 0; double[] Px = new double[f1.n]; double[] Py = new double[f1.n]; double[] PM = new double[f1.n]; int[] intPx = new int[f1.n]; int[] intPy = new int[f1.n]; Pen P4 = new Pen(Color.Indigo, 6); // Стиль пера с наконечниками P4.SetLineCap(LineCap.Flat, LineCap.ArrowAnchor, DashCap.Flat); //Изображение сил и моментов for (int i = 0; i < f1.n; i++) { Px[i] = f1.MatrCoor[i, 3]; Py[i] = f1.MatrCoor[i, 4]; PM[i] = f1.MatrCoor[i, 5]; P = Math.Sqrt(Px[i] * Px[i] + Py[i] * Py[i]); if (MaxP <= P) MaxP = P; } Mp = pictureBox1.Width / 8 / MaxP; for (int i = 0; i < f1.n; i++) { intPy[i] = Convert.ToInt32(Py[i] * Mp); intPx[i] = Convert.ToInt32(Px[i] * Mp);
} for (int i = 0; i < f1.n; i++) { if (intPx[i]!= 0 || intPy[i]!= 0) { gr1.DrawLine(P4, xint[i], yint[i], xint[i] + intPx[i], yint[i] - intPy[i]); } if (PM[i] > 0) { gr1.DrawArc(P4, xint[i] - 20, yint[i] - 20, 40, 40, 0, -150); } if (PM[i] < 0) { gr1.DrawArc(P4, xint[i] - 20, yint[i] - 20, 40, 40, 0, 150); } } //Построение эпюры моментов double[] M1, M2; M1 = new double[f1.m]; M2 = new double[f1.m]; int[] intM1 = new int[f1.m]; int[] intM2 = new int[f1.m]; double MashtabM = 0, MaxM=0;
for (int i = 0; i < f1.m; i++) { M1[i] = NQMM[i, 3]; M2[i] = NQMM[i, 4]; } for (int i = 0; i < f1.m; i++) { if (System.Math.Abs(M1[i]) > MaxM) { MaxM = System.Math.Abs(M1[i]);; } if (System.Math.Abs(M2[i]) > MaxM) { MaxM = System.Math.Abs(M2[i]); }
} // 50 пиксклей - максимальное значение на эпюре моментов MashtabM = 50.0 / MaxM; for (int i = 0; i < f1.m; i++) {// Относительная ось моментов направлена вниз, противоположно оси Q intM1[i] = -Convert.ToInt32(NQMM[i, 3] * MashtabM); intM2[i] = -Convert.ToInt32(NQMM[i, 4] * MashtabM); } Pen P13 = new Pen(Color.Brown, 2); for (int i = 0; i < f1.m; i++) { int xM1=-Convert.ToInt32(intM1[i]*CB[i]); int xM2 = -Convert.ToInt32(intM2[i] * CB[i]); int yM1 = -Convert.ToInt32(intM1[i] * CA[i]); int yM2 = -Convert.ToInt32(intM2[i] * CA[i]); gr1.DrawLine(P1, xint[(int)f1.MatrTop[i, 1] - 1], yint[(int)f1.MatrTop[i, 1] - 1], xint[(int)f1.MatrTop[i, 1] - 1] +xM1, yint[(int)f1.MatrTop[i, 1] - 1]+yM1); gr1.DrawLine(P1, xint[(int)f1.MatrTop[i, 2] - 1], yint[(int)f1.MatrTop[i, 2] - 1], xint[(int)f1.MatrTop[i, 2] - 1]+xM2, yint[(int)f1.MatrTop[i, 2] - 1] +yM2); gr1.DrawLine(P1, xint[(int)f1.MatrTop[i, 1] - 1] + xM1, yint[(int)f1.MatrTop[i, 1] - 1] + yM1, xint[(int)f1.MatrTop[i, 2] - 1] + xM2, yint[(int)f1.MatrTop[i, 2] - 1] + yM2); } Pen P21 = new Pen(Color.Plum, 2); Brush B12 = new SolidBrush(Color.Black); System.Drawing.Font E = new Font("time new roman", 14); int Cx=0; int Cy=0; for (int i = 0; i < f1.m; i++) {// Нумерация элементов
Cx = (xint[(int)f1.MatrTop[i, 1] - 1] + xint[(int)f1.MatrTop[i, 2] - 1]) / 2; Cy = (yint[(int)f1.MatrTop[i, 1] - 1] + yint[(int)f1.MatrTop[i, 2] - 1]) / 2; gr1.DrawString(f1.MatrTop[i, 0].ToString(), E, B12, Cx+6, Cy+6); gr1.DrawRectangle(P21, Cx+6, Cy+6, 23, 23); } pictureBox1.Image = myBmp; } } }
Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.023 сек.) |