АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Форма 3

Читайте также:
  1. bending strain (майысу деформациясы)
  2. Bending strain (майысу деформациясы)
  3. CASE-технология создания информационных систем
  4. I. ВВЕДЕНИЕ В ИНФОРМАТИКУ
  5. I. Определите, какое из этих высказываний несет психологическую информацию.
  6. I. Основная форма: помешательство.
  7. I. При каких условиях эта психологическая информация может стать психодиагностической?
  8. II. ОСНОВНОЕ ПОНЯТИЕ ИНФОРМАТИКИ – ИНФОРМАЦИЯ
  9. II. Соціальні відносини як форма прояву соціальних взаємодій.
  10. II. Тип организации верховной власти в государстве (форма государственного правления).
  11. III. ИЗМЕРЕНИЕ ИНФОРМАЦИИ
  12. III. Опорная информация

using 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;

}

}

}

 


1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |

Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.021 сек.)