Анимация кривошипно-шатунного механизма с присоединенной кулисой

  • Вид работы:
    Курсовая работа (т)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    612,96 Кб
  • Опубликовано:
    2013-06-27
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Анимация кривошипно-шатунного механизма с присоединенной кулисой

Федеральное агентство по образованию

МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ МАШИНОСТРОИТЕЛЬНЫЙ УНИВЕРСИТЕТ

Факультет: машиностроительный

Кафедра: САПР








КУРСОВАЯ РАБОТА

ДИСЦИПЛИНА: “Лингвистическое и программное обеспечение

САПР”

ТЕМА РАБОТЫ: “Анимация кривошипно-шатунного механизма с

присоединенной кулисой”

Вариант №3-9

Выполнил:

Студент

группы М27-4к

Копылов О.В.


Москва - 2013

Содержание

Задание к курсовой работе

Содержание

Введение

. Этапы выполнения курсовой работы

. Этапы разработки программы

.1 Блок-схема работы программы

.2 Создание проекта «Kopylov_Mechanics» в MS Visual C#

.3 Создаем меню

.4 Описание использованных в программе функций

.5 Принцип работы Движущихся элементов

.6 Void Picture

Заключение

Листинг программы

Main.cs

Options.cs

Задание к курсовой работе

по дисциплине «Программное обеспечение САПР»

ДАНО

1. Кинематическая схема плоского рычажного механизма согласно номеру задания.

. Ведущее звено АВ совершает полный оборот относительно начала системы координат XY (кинематическая пара А на схеме механизма).

. Некоторые размеры рычажного механизма согласно варианту задания.

ЗАДАНИЕ

Разработать многооконное программное обеспечение. Главное окно должно иметь стандартную панель падающих меню, панель инструментов и клиентскую область.

Программное обеспечение должно обеспечивать:

. Ввод незаданных исходных данных, выполненный в виде отдельного диалогового окна:

.1 скорости вращения ведущего звена в зависимости от времени;

.2 размеров и длин звеньев механизма в мм;

.3 координат размещения кинематических пар, связанных с неподвижным основанием, в мм;

.4 число положений механизма;

.5 масштаб отображения кинематической схемы механизма.

. Вывод в клиентской области исходных данных механизма.

. Проверку условий проворачиваемости механизма.

. Графическое построение в клиентской области минимум 12 положений механизма в зависимости от угла поворота ведущего звена АВ, выполненных в мм согласно выбранному масштабу.

. Анимацию движения механизма, построенному в мм согласно выбранному масштабу, в зависимости от величины угловой скорости ведущего звена АВ.

. Сохранение и восстановление заданных исходных данных в пункте 1.

. Сохранение и восстановление графического отображения механизма и заданных исходных данных в клиентской области.


Длина звена АВ = 150 мм

Т. D-Lx = -270

Т. D-Ly = -40

Т.D-Le = 150

Введение

Данная курсовая работа посвящена разработке программы, которая выводит на экран заданный механизм. Механизм анимирован, пользователь может изменять длины звеньев, не нарушая при этом целостность механизма, так же в программе предусмотрена возможность изменения скорости вращения входного звена. Есть возможность изменения масштаба.

Предусмотрена возможность сохранения и считывания входных данных из файла.

1. Этапы выполнения курсовой работы

• Анализ задания

• Проверка механизма

• Аналитический расчет механизма

• Создание программы на языке C#

2. Этапы разработки программы

.1 Блок-схема работы программы


.2 Создание проекта «Kopylov_Mechanics» в MS Visual C#

.        Запускаем Visual С#. Нажимаем Файл -> Создать -> Проект

В графе имя вводим название проекта, в графе Расположение выбираем путь где будет хранится исходные файлы программы.

3.      Нажимаем ОК чтобы создать проект


.3 Создаем меню

Для меню нам понадобятся:

Открываем «Панель инструментов» на форме размещаем 5(Старт, Стоп, Параметры, Save, Load) кнопок , 1 NumericUpDown (для контроливания скорости вращения) и PictureBox

Далее расположим все элементы на форме должным образом

.4 Описание использованных в программе функций

.cs:

.1  Создание точек на экране вывода (шарниры)

 

void Hinge

.2 Создание «треугоников» для шарниров


void Pillar

.3 Маштабирование:

void NewSizes

.4 Создание Прямоугольников:


void Plunger

.5 Создание плоскости, которая ограничивает движение «точки» E :

void Base

.6 Расчет и построение точек и дальнейшее построение по ним необходимым линий для окна вывода:

void Picture()

.7 Действия происходящие после нажатия на кнопку «Старт»:

private void pysk_Click

.8 Таймер для контролирования выполнений операций за опр. Кол-во времени(скорость движения)(осуществляется после того как мы изменили данные в NumericUpDown с Name DgUD) :

private void DgUD_ValueChanged

.9 Вызов второго окна для изменения данных:

private void btPrm_Click.cs:

1.10 Выполняется при первом отображении формы:

private void PrmForm_Shown

.11 Выполняется при закрытии формы:

private void PrmForm_FormClosing

.12 Выполняется при изменении TextBox с name “mash”:void mash_TextChanged

.13 Выполняется по нажатию кнопки ОК:void ok_Click

.14 Выполняется по нажатию кнопки cancel void cancel_Click

Для создания второй формы необходимо:

Кликнуть правой клавишей мыши на наименование проекта в «обозревателе решений». Далее кнопка «добавить», а после «Форма Windows…». И у нас создастся новая форма с именем «FormN.cs» где N порядковый номер формы (если не менять её название)

.5 Принцип работы движущихся элементов

Для осуществления передвижения всех необходимых элементов используем следующие формулы:

.1 точка B

Находим угол:

Ang = Math.Acos(CyA / AB) + Math.PI / 2;

Находим точку B по 2 осям x и y:

Bx = Ax + AB * Scl * (float)Math.Cos(Ang);= Ay - AB * Scl * (float)Math.Sin(Ang);

1.2 точка D

Находим угол:

a = Math.Atan2(Cy - By, Bx - Cx)

Находим точку D по 2 осям x и y:

Dx = Cx + CD * (float)Math.Cos(a) * Scl;= Cy - CD * (float)Math.Sin(a) * Scl;

1.3 Точка E

Находим угол:

a = Math.Asin((Dx - Ex) / DE / Scl);

Находим точку E по 2 осям x и y:

Ey = Dy + DE * (float)Math.Cos(a) * Scl; - нам дана по условию

.6 Viod Picture именно в нем происходят расчеты тотрисовка всех элементов на pirtureBox

void Picture()

{(Graphics Gr = Graphics.FromImage(PB.Image))

{.SmoothingMode = SmoothingMode.HighQuality;.Clear(Color.White);Fn = new Font("Bodoni MT", 10, FontStyle.Bold);.DrawString("AB = " + AB.ToString() + " mm", Fn, Brushes.Black, 0, 0);.DrawString("CD = " + CD.ToString() + " mm", Fn, Brushes.Black, 0, 20);.DrawString("DE = " + DE.ToString() + " mm", Fn, Brushes.Black, 0, 40);.DrawString("CyA = " + CyA.ToString() + " mm", Fn, Brushes.Black, 0, 60);.DrawString("Масштаб = " + Scl.ToString() + " pix/mm", Fn, Brushes.Black, 0, 80);(Gr, Ax, Ay, "A");(Gr);= Ax + AB * Scl * (float)Math.Cos(Ang);= Ay - AB * Scl * (float)Math.Sin(Ang);.DrawLine(Pens.Black, Bx, By, Ax, Ay);a = Math.Atan2(Cy - By, Bx - Cx);= Cx + CD * (float)Math.Cos(a) * Scl ;= Cy - CD * (float)Math.Sin(a) * Scl;.DrawLine(Pens.Black, Dx, Dy, Cx, Cy);(Gr, Ax, Ay, "A");(Gr, Cx, Cy, "C");(Gr, Bx, By, a, "B");= Math.Asin((Dx - Ex) / DE / Scl);= Dy + DE * (float)Math.Cos(a) * Scl;.DrawLine(Pens.Black, Dx, Dy, Ex, Ey);(Gr, Dx, Dy, "D");(Gr, Ex, Ey, Math.PI / 2, "E");

PB.Refresh();

}

}

механизм программа visual файл

Заключение

В ходе выполнения данной курсовой работы были освоены основные приемы создания приложений и распространенные функции для работы с графикой в среде разработки MS Visual C#.

Листинг программы

Main.cs:System;System.Collections.Generic;System.Drawing;System.Drawing.Drawing2D;System.Text;System.IO;System.Windows.Forms;Kopylov_Mechanics

{Ax = 400;Ay = 200;float AB = 80;float CD = 450 + 40; // Cx ->float DE = 200;float DxEx = -130; //dfloat CyA = 0;float CyB = 130;AxD;CAx;Ang, dAng;Bx, By, Cx, Cy, Dx, Dy, Ex, Ey;float Scl = 1;int Clockwise = -1;bool PrmClose;bExit, bStop;lPause;MyForm()

{();(false);

}

void MyForm_Resize(object sender, EventArgs e)

{(PB.Width > 0 && PB.Height > 0)

{(PB.Image != null) PB.Image.Dispose();.Image = new Bitmap(PB.Width, PB.Height);();

}

}Hinge(Graphics Gr, float x,float y,string ch)

{.FillEllipse(Brushes.Gray, x - 5, y - 5, 10, 10);.DrawEllipse(Pens.Black, x - 5, y - 5, 10, 10);.DrawString(ch, new Font("Bodoni MT", 10, FontStyle.Bold), Brushes.Black, x + 5, y - 20);

}Pillar(Graphics Gr,float x, float y,string ch)

{[] Tr = { new PointF(0, 0), new PointF(10, 20), new PointF(-10, 20 ) };(int i = 0; i < 3; i++)

{[i].X += x;[i].Y += y;

}.DrawPolygon(Pens.Black, Tr);(Gr, x, y,ch);Pnt1=PointF.Add(Tr[2], new SizeF(-7, 0));Pnt2=PointF.Add(Tr[1], new SizeF( 7, 0));.FillRectangle(new HatchBrush(HatchStyle.BackwardDiagonal, Color.Black, Color.White),

new RectangleF(Pnt1, new SizeF(Pnt2.X - Pnt1.X, 10)));.DrawLine(Pens.Black, Pnt1, Pnt2);

}NewSizes(bool bNewPrm)

{

{= (CD - 130) / 2;= CD - AxD ;(!bStop && !bNewPrm) Ang = Math.Acos(CyA / AB) + Math.PI / 2;= 50* Scl ; // CxAC = (float)Math.Sqrt((Ax - Cx) * (Ax - Cx) + CyA * Scl * CyA * Scl);(Cx >= 30)

{

Cy = Ay - CyA * Scl ;

Ex = 670 * Scl ;

DgUD_ValueChanged(DgUD, new EventArgs());

}Ax += 31 - Cx;(Cy < 130) Ay += 131 - Cy;a = Math.Asin(AB * Scl / AC);-= Math.Asin(CyA * Scl / AC);= Ay - CyA * Scl - CD * Scl * (float)Math.Sin(a);(Dy < 30) Ay += 31 - Dy;

} while (Cx < 30 || Cy < 130 || Dy < 30);

}Plunger(Graphics Gr, float x, float y, double a,string ch)

{HalfW = 15;HalfH = 8;an = Math.Atan(HalfH / HalfW);HalfD = HalfW / (float)Math.Cos(an);[] Rc = new PointF[4];[0] = new PointF(x + HalfD * (float)Math.Cos(a + an), y - HalfD * (float)Math.Sin(a + an));[1] = new PointF(x + HalfD * (float)Math.Cos(a - an), y - HalfD * (float)Math.Sin(a - an));aa = a + Math.PI + an;[2] = new PointF(x + HalfD * (float)Math.Cos(aa), y - HalfD * (float)Math.Sin(aa));= a + Math.PI - an;[3] = new PointF(x + HalfD * (float)Math.Cos(aa), y - HalfD * (float)Math.Sin(aa));.FillPolygon(Brushes.White, Rc);.DrawPolygon(Pens.Black, Rc);(Gr, x, y, ch);

}Base(Graphics Gr)

{.FillRectangle(new HatchBrush(HatchStyle.BackwardDiagonal, Color.Black, Color.White),- 20, Ay, 10, DE * 2 * Scl);.DrawLine(Pens.Black, Ex - 10, Ay, Ex - 10, Ay + DE * 2 * Scl);

}Way()

{(Graphics Gr = Graphics.FromImage(PB.Image))

{.Drawing.Drawing2D.GraphicsPath path = new System.Drawing.Drawing2D.GraphicsPath();

}

}Picture()

{(Graphics Gr = Graphics.FromImage(PB.Image))

{.SmoothingMode = SmoothingMode.HighQuality;.Clear(Color.White);Fn = new Font("Bodoni MT", 10, FontStyle.Bold);.DrawString("AB = " + AB.ToString() + " mm", Fn, Brushes.Black, 0, 0);.DrawString("CD = " + CD.ToString() + " mm", Fn, Brushes.Black, 0, 20);.DrawString("DE = " + DE.ToString() + " mm", Fn, Brushes.Black, 0, 40);.DrawString("CyA = " + CyA.ToString() + " mm", Fn, Brushes.Black, 0, 60);.DrawString("Масштаб = " + Scl.ToString() + " pix/mm", Fn, Brushes.Black, 0, 80);(Gr, Ax, Ay, "A");(Gr);= Ax + AB * Scl * (float)Math.Cos(Ang);= Ay - AB * Scl * (float)Math.Sin(Ang);.DrawLine(Pens.Black, Bx, By, Ax, Ay);a = Math.Atan2(Cy - By, Bx - Cx);= Cx + CD * (float)Math.Cos(a) * Scl ;= Cy - CD * (float)Math.Sin(a) * Scl;.DrawLine(Pens.Black, Dx, Dy, Cx, Cy);(Gr, Ax, Ay, "A");(Gr, Cx, Cy, "C");(Gr, Bx, By, a, "B");= Math.Asin((Dx - Ex) / DE / Scl);= Dy + DE * (float)Math.Cos(a) * Scl;.DrawLine(Pens.Black, Dx, Dy, Ex, Ey);(Gr, Dx, Dy, "D");(Gr, Ex, Ey, Math.PI / 2, "E");.Refresh();

}

}void pysk_Click(object sender, EventArgs e)

{(true);Pi2 = Math.PI * 2;= false;= false;lOldTicks;.Focus();

{= DateTime.Now.Ticks;();();(!bStop)

{

Ang += dAng;

if (Ang >= Pi2) Ang -= Pi2;

else if (Ang <= -Pi2) Ang += Pi2;

}

{

Application.DoEvents();

} while (DateTime.Now.Ticks - lOldTicks < lPause);

} while (!bExit);

}void DgUD_ValueChanged(object sender, EventArgs e)

{= 625000; //1/16= (double)DgUD.Value / 180 * Math.PI * Clockwise / (10000000 / lPause);.Focus();

}void MyForm_FormClosing(object sender, FormClosingEventArgs e)

{= true;

}void btStop_Click(object sender, EventArgs e)

{= true;

}void btPrm_Click(object sender, EventArgs e)

{Prm = new Options(this);.ShowDialog();(true);();

}void btSave_Click(object sender, EventArgs e)

{

}fRead(StreamReader SR, out float fres)

{str = SR.ReadLine().Replace(".", ",");[] arr = str.Split('=');float.TryParse(arr[1], out fres);

}iRead(StreamReader SR, out int ires)

{str = SR.ReadLine();[] arr = str.Split('=');int.TryParse(arr[1], out ires);

}void btLoad_Click(object sender, EventArgs e)

{

}void btSave_Click_1(object sender, EventArgs e)

{.InitialDirectory = Application.StartupPath;(SD.ShowDialog() == DialogResult.OK)

{SW = new StreamWriter(SD.FileName);(int i = 0; i < 8; i++)

{

switch (i)

{

case 0: SW.WriteLine("AB=" + AB.ToString()); break;

case 2: SW.WriteLine("DE=" + DE.ToString()); break;

case 3: SW.WriteLine("CyA=" + CyA.ToString()); break;

case 4: SW.WriteLine("Масштаб=" + Scl.ToString()); break;

case 5: SW.WriteLine("Угол=" + Ang.ToString()); break;

case 6: SW.WriteLine("Clockwise=" + Clockwise.ToString()); break;

default: SW.WriteLine("w=" + DgUD.Value.ToString()); break;

}

}.Close();

}

}void btLoad_Click_1(object sender, EventArgs e)

{.InitialDirectory = Application.StartupPath;(OD.ShowDialog() == DialogResult.OK)

{ires;fres;SR = new StreamReader(OD.FileName);(int i = 0; SR.Peek() >= 0; i++)

{

switch (i)

{

case 0: if (fRead(SR, out fres)) AB = fres; break;

case 1: if (fRead(SR, out fres)) CD = fres; break;

case 2: if (fRead(SR, out fres)) DE = fres; break;

case 3: if (fRead(SR, out fres)) CyA = fres; break;

case 4: if (fRead(SR, out fres)) Scl = fres; break;

case 5: if (fRead(SR, out fres)) Ang = fres; break;

case 6: if (iRead(SR, out ires)) Clockwise = ires; break;

default: if (iRead(SR, out ires)) DgUD.Value = ires; break; ;

}

}.Close();= true;_Click(param, new EventArgs());= false;

}

}void CBChange_CheckedChanged(object sender, EventArgs e)

{

}

}

}.cs:System;System.Collections.Generic;System.ComponentModel;System.Data;System.Drawing;System.Linq;System.Text;System.Windows.Forms;Kopylov_Mechanics

{partial class Options : Form

{MF;Scl;bSave;Options(MyForm Owner)

{();= Owner;

}void PrmForm_Shown(object sender, EventArgs e)

{.Value = (decimal)MF.AB;.Value = (decimal)MF.CD;.Value = (decimal)MF.DE;.Value = (decimal)MF.CyA;= MF.Scl;.Text = Scl.ToString();(MF.Clockwise == -1) RB1.Checked = true;RB2.Checked = true;(MF.PrmClose) ok_Click(ok, new EventArgs());

}void PrmForm_FormClosing(object sender, FormClosingEventArgs e)

{(bSave)

{.AB = (float)AB.Value;.CD = (float)CD.Value;.DE = (float)DE.Value;.CyA = (float)CyA.Value;.Scl = Scl;.Clockwise = RB1.Checked ? -1 : 1;

}

}void mash_TextChanged(object sender, EventArgs e)

{res;.Text = Mash.Text.Replace(".", ",");(float.TryParse(Mash.Text, out res)) Scl = res;Mash.Text = Scl.ToString();

}void ok_Click(object sender, EventArgs e)

{(AB.Value < CyA.Value) MessageBox.Show("Звено AB меньше расстояния CyA!");

{AxD = ((float)CD.Value - 150) / 2;CAx = (float)CD.Value - AxD;CA = (float)Math.Sqrt(CAx * CAx + (float)CyA.Value * (float)CyA.Value);((float)AB.Value > CA) MessageBox.Show("Звено AB больше расстояния CA !");

{

float AD = (float)CD.Value - CA;

if (AD < (float)AB.Value) MessageBox.Show("Расстояние AD может быть меньше звена AB !");

else

{

float CE = (float)CD.Value - MF.DxEx;

float cos = CE / (float)(CD.Value - DE.Value);

if (cos < 1) MessageBox.Show("Звена DE может быть не достаточно для достижения опорной поверхности !");

else bSave = true;

}

}

}(bSave) Close();

}void cancel_Click(object sender, EventArgs e)

{();

}

}

}

Похожие работы на - Анимация кривошипно-шатунного механизма с присоединенной кулисой

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!