Моделирование падения нити

Разработка программы, моделирующей провисание нити в двумерном пространстве под действием собственного веса с учетом взаимодействия растяжения-сжатия. Математическое описание модели. Блок схемы алгоритмов моделирования. Описание программных модулей.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 28.04.2011
Размер файла 677,1 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Содержание

  • Постановка задачи
  • Математическое описание модели
  • Описание структуры используемой в блок-схемах
  • Блок схемы алгоритмов моделирования
  • Описание программных модулей
  • Результаты моделирования
  • Листинг программы

Постановка задачи

Разработать программу, выполняющую моделирование провисания нити в двумерном пространстве под действием собственного веса, учитывая взаимодействия растяжения-сжатия. Решение задачи проводить на основе физической модели, использующей силы с применением прямого метода Эйлера для нахождения производных. Принять, что нить в начальный момент времени находиться перпендикулярно относительно оси, по которой сила тяжести действует.

Исходными данными считать: длину нити, шаг разбиения, коэффициент дискретизации, массу нити, коэффициент демпфирования, коэффициент растяжения-сжатия (коэффициент жесткости).

Математическое описание модели

Для решения задачи необходимо составить математическую модель процесса, основанную на физических законах.

Мы используем метод частиц.

Для моделирования разобьем нить на заданное количество точек по длине (kt). Зная массу ткани (massa), найдем массу, приходящуюся на каждый "элементарный" отрезок (t [i]. m), полученный в результате разбиения.

t [i]. m = massa/kt

Далее под нитью будем подразумевать совокупность точек с заданными массами.

В каждый момент времени на точку действуют внешние силы - силы упругости, сила тяжести, при этом необходимо учитывать потери энергии системой при движении - силу демпфирования.

Движение системы описывается обобщенными перемещениями, и в каждый момент времени ищутся положения частиц

Исходя из второго закона Ньютона можно записать:

,

где - результирующая сила внешних воздействий, - масса частицы, - константа, характеризующая потери энергии при движении системы, g - ускорение свободного падения; - результирующая сила внутренних взаимодействий, где j=i-1 и j=i+1 Расписав покомпонентно, получим:

где k - коэффициент жесткости связи

Для всей системы можно записать:

,

где M - матрица инерции, описывающая распределении масс в модели ткани; С - матрица демпфирования; .

Перегруппировав силы и выразив получим:

где - функция, описывающая действие внутренних и внешних сил на ткань.

Введя обозначение , получим:

Для решения системы дифференциальных уравнений использовался явный метод Эйлера.

Применение явного метода Эйлера приведет к следующей системе алгебраических соотношений:

Применение такого метода требует выбора настолько малых значений h, что количество итераций, необходимое для получения результата, зачастую возрастает до недопустимых значений.

Описание структуры используемой в блок-схемах

struct tochka.:

{

GLfloat x,y; // текущие координаты точки

GLfloat x0,y0; // начальные координаты точки

double vx,vy; // проекции скоростей в текущее время

double m; // масса точки

double Fx,Fy; // проекции сил в текущее время

}

Блок схемы алгоритмов моделирования

Описание алгоритма Start ():

Происходит ввод начальных параметров: длины нити, шага разбиения, шага дискретизации, массы нити, коеффициента демпфирования. Задаются начальные координаты и скорости точек, происходит вызов алгоритма Mass ().

Блок схема алгоритма Start ():

Описание алгоритма Massa_tochek ():

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

Блок схема алгоритма Massa_tochek ():

Описание алгоритма Sili ():

Происходит обнуление проекций всех сил для всех точек нити, затем вызываются последовательно функции Sila_RS (),Sila_Tiagesty () и Sila_Soprotivlenia (), которые вычисляют значение результирующей силы в каждой точке нити, после этого происходит обнуление сил действующих на закрепленные точки

Блок схема алгоритма Power ():

Описание алгоритма Sila_Tiagesty ():

Для каждой точки нити от проекции результирующей силы на ось z отнимают силу тяжести, равную произведению массы точки на ускорение свободного падения, равного 9,81м/с2.

Блок схема алгоритма Sila_Tiagesty ():

Блок схема алгоритма Sila_Soprotivlenia ():

Описание алгоритма Sila_RS ():

Происходит ввод коэффициента растяжения-сжатия, затем для каждой точки нити находится левая и правая соседние точки, номера которых записываются в переменные m1 и n1, после чего к проекциям результирующей силы на оси x, y прибавляют проекцию силы растяжения-сжатия, которая находится по соответствующей формуле:

программа алгоритм модуль моделирование

Блок схема алгоритма Sila_RS ():

Описание алгоритма New_Power ():

Используя Второй закон Ньютона и прямой метод Эйлера находим новые координаты и скорости в этих координатах для каждой точки нити

Блок схема алгоритма New_Power ():

Описание программных модулей

Для реализации поставленной задачи в программе были введена структура struct tochka.

Структура tochka.:

{

GLfloat x,y; // текущие координаты точки

GLfloat x0,y0; // начальные координаты точки

double vx,vy; // проекции скоростей в текущее время

double m; // масса точки

double Fx,Fy; // проекции сил в текущее время

};

class TForm1: public TForm

{

__published: // IDE-managed Components

TMemo *Memo1;

TButton *Button1;

TButton *Button2;

TEdit *Edit1;

TEdit *Edit3;

TEdit *Edit4;

TEdit *Edit5;

TEdit *Edit6;

TLabel *Label2;

TLabel *Label3;

TLabel *Label4;

TLabel *Label5;

TLabel *Label7;

TEdit *Edit2;

TLabel *Label6;

void __fastcall FormCreate (TObject *Sender); // создание формы

void __fastcall Start (TObject *Sender); // кнопка start

void __fastcall Stop (TObject *Sender); // кнопка stop

void __fastcall Edit1KeyPress (TObject *Sender,

char &key); // проверка ввода данных для вещественных чисел

void __fastcall Edit2KeyPress (TObject *Sender,

char &Key); // проверка ввода данных для целых чисел

private: // User declarations

int PixelFormat; //

HDC hdc; //

HGLRC hrc; // переменные для рисования

GLuint texture1; //

tochka *t; // массив точек

int dlina; // длина нити

int kt; // количество точек

float shag; // шаг разбиения

float massa; // масса нити

float dconst; // константа демпфирования

float h; // шаг дискретизации

float ugol; // угол наклона

public: // User declarations

__fastcall TForm1 (TComponent* Owner);

void __fastcall SetPixelFormatDescriptor (); // установка дескрипта

void __fastcall DrawFunc (TObject*, bool&); // функция рисования

void Sila_RS (); // сила растяжения - сжатия

void Sila_Tiagesty (); // сила тяжести

void Sila_Soprotivlenia (); // сила сопротивления среды

void Sili (); // силы в целом и закреление точек

void Massa_tochek (); // вычисление массы каждой точки

void Pereshagivanie (); // нахождение новых координат и скоростей

};

// ---------------------------------------------------------------------------

extern PACKAGE TForm1 *Form1;

// ---------------------------------------------------------------------------

#endif

Результаты моделирования

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

файл Unit1. h

// ---------------------------------------------------------------------------

#ifndef Unit1H

#define Unit1H

// ---------------------------------------------------------------------------

#include <Classes. hpp>

#include <Controls. hpp>

#include <StdCtrls. hpp>

#include <Forms. hpp>

#include <ComCtrls. hpp>

#include <gl\gl. h>

#include <gl\glu. h>

#include <gl\glaux. h>

// ---------------------------------------------------------------------------

struct tochka

{

GLfloat x,y; // текущие координаты точки

GLfloat x0,y0; // начальные координаты точки

double vx,vy; // проекции скоростей в текущее время

double m; // масса точки

double Fx,Fy; // проекции сил в текущее время

};

class TForm1: public TForm

{

__published: // IDE-managed Components

TMemo *Memo1;

TButton *Button1;

TButton *Button2;

TEdit *Edit1;

TEdit *Edit3;

TEdit *Edit4;

TEdit *Edit5;

TEdit *Edit6;

TLabel *Label2;

TLabel *Label3;

TLabel *Label4;

TLabel *Label5;

TLabel *Label7;

TEdit *Edit2;

TLabel *Label6;

void __fastcall FormCreate (TObject *Sender); // создание формы

void __fastcall Start (TObject *Sender); // кнопка start

void __fastcall Stop (TObject *Sender); // кнопка stop

void __fastcall Edit1KeyPress (TObject *Sender,

char &key); // проверка ввода данных для вещественных чисел

void __fastcall Edit2KeyPress (TObject *Sender,

char &Key); // проверка ввода данных для целых чисел

private: // User declarations

int PixelFormat; //

HDC hdc; //

HGLRC hrc; // переменные для рисования

GLuint texture1; //

tochka *t; // массив точек

int dlina; // длина нити

int kt; // количество точек

float shag; // шаг разбиения

float massa; // масса нити

float dconst; // константа демпфирования

float h; // шаг дискретизации

float ugol; // угол наклона

public: // User declarations

__fastcall TForm1 (TComponent* Owner);

void __fastcall SetPixelFormatDescriptor (); // установка дескрипта

void __fastcall DrawFunc (TObject*, bool&); // функция рисования

void Sila_RS (); // сила растяжения - сжатия

void Sila_Tiagesty (); // сила тяжести

void Sila_Soprotivlenia (); // сила сопротивления среды

void Sili (); // силы в целом и закреление точек

void Massa_tochek (); // вычисление массы каждой точки

void Pereshagivanie (); // нахождение новых координат и скоростей

};

// ---------------------------------------------------------------------------

extern PACKAGE TForm1 *Form1;

// ---------------------------------------------------------------------------

#endif

файл Unit1. cpp

// ---------------------------------------------------------------------------

#include <vcl. h>

#pragma hdrstop

#include "Unit1. h"

#include <math. h>

// ---------------------------------------------------------------------------

#pragma package (smart_init)

#pragma resource "*. dfm"

TForm1 *Form1;

bool stop = true;

// ---------------------------------------------------------------------------

__fastcall TForm1:: TForm1 (TComponent* Owner)

: TForm (Owner)

{

Application->OnIdle = DrawFunc; // по-умолчанию

}

// ---------------------------------------------------------------------------

void __fastcall TForm1:: DrawFunc (TObject *ob, bool &done) // функция рисования

{

int i;

GLfloat x,y;

done = false;

// gluLookAt (1,0,1,0,0,0,0,1,0);

if (! stop)

{

Sili ();

New_point ();

glClear (GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);

// рисование

glBegin (GL_LINE_STRIP);

glColor3d (0,0,0);

for (i = 0; i < kt; i++)

{

x = t [i]. x;

y = t [i]. y;

glVertex2f (x,y);

}

glEnd ();

glFlush ();

SwapBuffers (hdc);

}

}

// --------------------------------------------------------------------------

void __fastcall TForm1:: SetPixelFormatDescriptor () // установка дескрипта

{

PIXELFORMATDESCRIPTOR pfd = {

sizeof (PIXELFORMATDESCRIPTOR),

1,PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER,

PFD_TYPE_RGBA,

24,0,0,0,0,0,0,0,0,0,0,0,0,0,32,0,0,PFD_MAIN_PLANE,

0,0,0,};

PixelFormat = ChoosePixelFormat (hdc, &pfd);

SetPixelFormat (hdc, PixelFormat, &pfd);

}

// -----------------------------------------------------------------------------

void __fastcall TForm1:: FormCreate (TObject *Sender) // создание формы

{

hdc = GetDC (Memo1->Handle); // рисуем на объекте Мэмо

SetPixelFormatDescriptor ();

hrc = wglCreateContext (hdc);

if (hrc == NULL)

ShowMessage (": - ) ~ hrc == NULL");

if (wglMakeCurrent (hdc, hrc) == false)

ShowMessage ("Could not MakeCurrent");

glClearColor (1,1,1,0);

}

// -----------------------------------------------------------------------------

void TForm1:: Sili () // силы

{

int i;

for (i = 0; i < kt; i++)

{

t [i]. Fx = 0;

t [i]. Fy = 0;

}

Sila_RS ();

Sila_Tiagesty ();

Sila_Soprotivlenia ();

t [0]. Fx = 0;

t [0]. Fy = 0;

t [kt]. Fx = 0;

t [kt]. Fy = 0;

}

// -------------------------------------------------------------------------

void TForm1:: Sila_RS () // силы растяжения-сжатия между соседними точками

{

int i,k,l,p,ks;

double sqr;

ks = StrToInt (Edit2->Text);

for (i = 0; i < kt; i++)

{ if (i == 0) l = 0;

else l = i - 1;

if (i == kt-1) p = kt - 1;

else p = i + 1;

for (k = l; k <= p; k++)

{

if (k == i) continue;

sqr = sqrt ( (t [k]. x0-t [i]. x0) * (t [k]. x0-t [i]. x0) + (t [k]. y0-t [i]. y0) * (t [k]. y0-t [i]. y0)) /sqrt ( (t [k]. x-t [i]. x) * (t [k]. x-t [i]. x) + (t [k]. y-t [i]. y) * (t [k]. y-t [i]. y));

t [i]. Fx += ks* ( (t [k]. x - t [i]. x) - sqr * (t [k]. x - t [i]. x));

t [i]. Fy += ks* ( (t [k]. y - t [i]. y) - sqr * (t [k]. y - t [i]. y));

}

}

}

// ------------------------------------------------------------------------

void TForm1:: Sila_Tiagesty () // сила тяжести

{

int i;

for (i = 0; i < kt; i++)

t [i]. Fy - = 9.81*t [i]. m;

}

// ------------------------------------------------------------------------

void TForm1:: Sila_Soprotivlenia () // сила сопротивления среды

{

int i;

for (i = 0; i < kt; i++)

{

t [i]. Fx - = dconst*t [i]. vx;

t [i]. Fy - = dconst*t [i]. vy;

}

}

// ------------------------------------------------------------------------

void TForm1:: New_point () // Метод Эйлера

{

int i;

for (i = 0; i < kt; i++)

{

t [i]. x += t [i]. vx*h;

t [i]. y += t [i]. vy*h;

t [i]. vx += t [i]. Fx/t [i]. m*h;

t [i]. vy += t [i]. Fy/t [i]. m*h;

}

}

// ---------------------------------------------------------------------------

void TForm1:: Massa_tochek () // перераспределение массы

{

int i;

for (i = 0; i < kt; i++)

t [i]. m = massa/kt;

}

// --------------------------------------------------------

void __fastcall TForm1:: Start (TObject *Sender) // Начало моделирования

{

// gluLookAt (0,0,0,0,0,1,0,0,0);

int i;

dlina = StrToInt (Edit3->Text);

massa = StrToFloat (Edit4->Text);

shag = StrToFloat (Edit5->Text);

dconst = StrToFloat (Edit6->Text);

h = StrToFloat (Edit1->Text);

ugol = 90;

kt = dlina/shag;

t = new tochka [kt];

stop = false;

for (i = 0; i < kt; i++)

{

t [i]. x0 = t [i]. x = 1.2* ( (GLfloat) i + (GLfloat) kt/2) / (2*kt);

t [i]. y0 = t [i]. y = 0.07;

t [i]. vx = 0;

t [i]. vy = 0;

}

Massa_tochek ();

glColor3d (1,1,1);

Button1->Enabled = false;

Button2->Enabled = true;

}

// -------------------------------------------------------------------------------

void __fastcall TForm1:: Stop (TObject *Sender) // Окончание моделирования

{

stop = true;

Button1->Enabled = true;

Button2->Enabled = false;

delete t;

}

// -----------------------------------------------------------------------

void __fastcall TForm1:: Edit1KeyPress (TObject *Sender, char &Key)

{ // проверка дробных значений

if ( (Key >= '0') && (Key <= '9')) return;

if (Key == DecimalSeparator) return;

if (Key == VK_BACK) // клавиша <Backspace>

return;

Key=0;

}

// ---------------------------------------------------------------------------

void __fastcall TForm1:: Edit2KeyPress (TObject *Sender, char &Key)

{ // проверка целых значений

if ( (Key >= '0') && (Key <= '9')) return;

if (Key == VK_BACK)

return;

Key=0;

}

// ---------------------------------------------------------------------------

Размещено на Allbest.ru


Подобные документы

  • Математическое описание имитационной модели. Описание блок-схемы алгоритма. Анализ полученных результатов имитационного моделирования. Сопоставление полученных результатов для разработанных моделей. Математическое описание аналитического моделирования.

    курсовая работа [306,5 K], добавлен 25.03.2015

  • Понятие стратегического планирования, разработка схем программных блоков и основной программы. Структурная схема имитационной модели, создание модели на языке моделирования General Purpose Simulation System. Математическое описание моделируемой системы.

    дипломная работа [2,6 M], добавлен 12.08.2017

  • Разновидности конструктивных решений реализации весового оборудования. Разработка блок-схемы предустановок, блок-схемы измерения веса, блок-схемы вывода информации о весе в компьютер, блок-схемы устройства и программы работы микропроцессорного блока.

    курсовая работа [525,4 K], добавлен 13.02.2023

  • Процесс моделирования работы САПР: описание моделирующей системы, разработка структурной схемы и Q-схемы, построение временной диаграммы, построение укрупненного моделирующего алгоритма. Описание математической модели, машинной программы решения задачи.

    курсовая работа [291,6 K], добавлен 03.07.2011

  • Необходимость создания моделируемой системы. Описание моделируемой системы и задание моделирования. Структурная схема модели системы. Блок–диаграмма. Текст программы. Описание текста программы. Результаты моделирования. Эксперимент, его результаты.

    курсовая работа [35,9 K], добавлен 19.11.2007

  • Концептуальная модель процесса обслуживания покупателей в магазине. Описание системы моделирования GPSS. Разработка моделирующей программы на специализированном языке имитационного моделирования в среде AnyLogic. Результаты вычислительных экспериментов.

    курсовая работа [906,9 K], добавлен 12.07.2012

  • Разработка эскизного и технического проектов программы, моделирующей игру "Кости". Постановка задачи, описание алгоритма; написание программы, организация входных и выходных данных; выбор программных средств; спецификация, текст, условия выполнения.

    курсовая работа [93,8 K], добавлен 11.02.2012

  • Описание работы элементов программы в виде блок-схем. Анализ структурной схемы модели домофона. Блок-схема работы открытия двери ключом. Моделирование в Proteus: принцип динамического опроса и индикации, внешний вид жидкокристаллического дисплея.

    курсовая работа [1,4 M], добавлен 12.04.2019

  • Разработка программы с использованием GPSS, моделирующей процесс работы взлётно-посадочной полосы. Сравнение результатов имитационного моделирования и аналитического расчета характеристик. Блок-диаграмма модели. Возможные улучшения в работе системы.

    курсовая работа [393,3 K], добавлен 03.07.2011

  • Программное средство системного моделирования. Структурная схема модели системы, временная диаграмма и ее описание. Сравнение результатов имитационного моделирования и аналитического расчета характеристик. Описание машинной программы решения задачи.

    курсовая работа [146,5 K], добавлен 28.06.2011

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.