Дипломная работа





НазваниеДипломная работа
страница10/12
Дата публикации14.12.2014
Размер0.6 Mb.
ТипДиплом
100-bal.ru > Информатика > Диплом
1   ...   4   5   6   7   8   9   10   11   12

ЗАКЛЮЧЕНИЕ


В результате данной работы были получены следующие результаты:

  1. Создана специализированная среда трехмерной динамической визуализации.

  2. Разработана и реализована анимация для отображения решений задачи посадки самолета в условиях ветровых возмущений.

  3. Реализована трехмерная динамическая анимация явления микровзрыва.

Развитие данного проекта возможно в нескольких направлениях.

  1. Создание более общей оболочки, в которой будут представлена трехмерная анимация для различных задач оптимального управления, объединенных в логические группы.

  2. Оптимизация программного кода для улучшения быстродействия. Использование различных возможностей библиотеки OpenGL, например, уменьшение времени выполнения за счет загрузки в память видеоадаптера всех возможных структур, моделей.


СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ


  1. Miele A., Wang T., Melvin W.W., Optimal take-off trajectories in the presence of windshear // Journal of Optimization Theory and Applications, Vol.49, No.1, 1986, pp.1–45.

  2. Miele A., Wang T., Tzeng C.Y., Melvin W.W., Optimal abort landing trajectories in the presence of windshear // Journal of Optimization Theory and Applications, Vol.55, No.2, 1987, pp.165–202.

  3. Miele A., Wang T., Wang H., Melvin W.W., Optimal penetration landing trajectories in the presence of windshear // Journal of Optimization Theory and Applications, Vol.57, No.1, 1988, pp.1–40.

  4. Bulirsch R., Montrone F., Pesch H.J., Abort landing in the presence of windshear as a minimax optimal control problem, part 1: Necessary conditions // Journal of Optimization Theory and Applications, Vol.70, No.1, 1991, pp.1–23.

  5. Bulirsch R., Montrone R., Pesch H.J., Abort landing in the presence of windshear as a minimax optimal control problem, part 2: Multiple shooting and homotopy // Journal of Optimization Theory and Applications, Vol.70, No.2, 1991, pp.223–254.

  6. Кейн В.М., Париков А.Н., Смуров М.Ю., Об одном способе оптимального управления по методу экстремального прицеливания // Прикладная математика и механика, Т.44, №3, 1980, С.434–440.

  7. Кейн В.М., Оптимизация систем управления по минимаксному критерию. М.: Наука, 1985.

  8. Боткин Н.Д., Кейн В.М., Пацко В.С., Модельная задача об управлении боковым движением самолета на посадке // Прикладная математика и механика, Т.48, №4, 1984, С.560–567.

  9. Ganebny S.A., Kumkov S.S., Patsko V.S., Pyatko S.G., Constructing Robust Control in Differential Games. Application to Aircraft Control during Landing // Annals of the International Society of Dynamic Games, Vol.9: Advances in Dynamic Games and Applications, S.Jorgensen, M.Quincampoix, and T.L.Vincent (Eds.), Birkhauser, Boston, MA, 2007, pp.69–92.

  10. Ivan M., A ring-vortex downburst model for real-time flight simulation of severe windshear // AIAA Flight Simulation Technologies Conf., July 22–24, 1985, St.Louis, Miss., pp.57–61.

  11. Боткин Н.Д., Пацко В.С., Турова В.Л., Разработка численных методов построения экстремальных ветровых возмущений, действующих на самолет на этапе посадки. Разработка алгоритмов построения экстремальных ветровых возмущений. Отчет о научно-исследовательской работе (промежуточный). Свердловск, 1987, № ГР01880003467, Инв. № 02880054701. 58 стр.

  12. Ричард С. Райт-мл., Липчак Б., OpenGL. Суперкнига, издательство Вильямс, 2006 г., 1040 стр.

  13. Херн, Бейкер, Компьютерная графика и стандарт OpenGL, издательство Вильямс, 2005 г., 1168 стр.

  14. М. Ву, Т. Девис, Дж. Нейдер, Д. Шрайнер, OpenGL. Руководство по программированию, 4-е издание, издательство Питер, 2006 г., 624 стр.


ПРИЛОЖЕНИЕ А – Программный код


class CalcBurst

using System;

using System.Collections.Generic;

using System.Text;

namespace Самолет

{

class CalcBurst

{

float X;

float Y;

float Z;

float V0, H0, R0;

float Dx, Dy, Dz;

public float Wx, Wy, Wz;

public float WR;

public float Len;

float CIP;

public CalcBurst(float V0_, float H0_, float R0_, float Dx_, float Dy_, float Dz_)

{

V0 = V0_;

H0 = H0_;

R0 = R0_;

Dx = Dx_;

Dy = Dy_;

Dz = Dz_;

}

public float Sign(float A, float B)

{

if (B >= 0)

return (float)Math.Abs(A);

else

return (float)(-1) * Math.Abs(A);

}

public void VV(float Xg, float Yg, float Zg)

{

X = Xg - Dx;

Y = Yg - Dy;

Z = Zg - Dz;

float WR;

WR = 0.0f;

Wy = 0.0f;

CIP = 2 * V0 * R0 / (1.0f - 1.0f /(float) Math.Pow(1.0f + Math.Pow(2 * H0 / R0, 2), 1.5));

float RC, RD, R;

RC=0.8f*H0;

R = (float) Math.Sqrt( X * X + Z * Z );

RD = (float)Math.Sqrt((Math.Abs(R) - R0) * (Math.Abs(R) - R0) + (Math.Abs(Y) - H0) * (Math.Abs(Y) - H0));

if (RD - RC >= 0)

{

if (Math.Abs(R) <= 0.5)

R = 0.5f;

this.WAP(Y, R, out WR, out Wy);

}

else

{

float Q;

float WR1, WY1;

WR1 = 0.0f;

WY1 = 0.0f;

Q = RD / RC;

if (Q != 0)

{

float R1, Y1;

R1=R-Sign(R0,R);

Y1=Y-Sign(H0,Y);

this.WAP((Sign(H0, Y) + Y1 / Q), (Sign(R0, R) + R1 / Q),out WR, out Wy);

}

WR = Q * WR;

Wy = Q * Wy;

}

Wx = WR * X / R;

Wz = WR * Z / R;

Wy = -Wy;

Len = (float)Math.Sqrt(Wx * Wx + Wz * Wz + Wy * Wy);

}

public float STR(float Y_, float R_)

{

float R1, R2, R3, R4, RK1, RK2,AR,AM;

R1 = (float)Math.Sqrt((Y_ - H0) * (Y_ - H0) + (R_ - R0) * (R_ - R0));

R2 = (float)Math.Sqrt((Y_ + H0) * (Y_ + H0) + (R_ - R0) * (R_ - R0));

R3 = (float)Math.Sqrt((Y_ - H0) * (Y_ - H0) + (R_ + R0) * (R_ + R0));

R4 = (float)Math.Sqrt((Y_ + H0) * (Y_ + H0) + (R_ + R0) * (R_ + R0));

RK1 = ((R3 - R1) / (R3 + R1)) * ((R3 - R1) / (R3 + R1));

RK2 = ((R4 - R2) / (R4 + R2)) * ((R4 - R2) / (R4 + R2));

AR = 0.788f * RK1 / (0.25f + 0.75f * (float)Math.Sqrt(1.0 - RK1));

AM = 0.788f * RK2 / (0.25f + 0.75f * (float)Math.Sqrt(1.0 - RK2));

return -CIP * ((R1 + R3) * AR - (R2 + R4) * AM) / 6.2831852f;

}

public void WAP(float Y_, float R_, out float WR_, out float WY_)

{

float D = 0.2f;

float STR1 = STR(Y_,R_);

WY_ = (STR1 - STR(Y_, R_ + D)) / (R_ * D);

WR_ = (STR(Y_ - D, R_) - STR1) / (R_ * D);

}

}

}
class Deviation

using System;

using System.Collections.Generic;

using System.Text;

using Tao.OpenGl;

using Tao.FreeGlut;

namespace Самолет

{

class Deviation

{

private List data;

private bool flag = false;

private float[] x;

private float[] y;

private float[] z;

private float[] deviation;

private int length;

private int DisplayListNomGlide;

private int DisplayListNomDev;

private float maxDeviation = 0.0f;

private CVertex3f beginGlide;

private CVertex3f endGlide;
public Deviation(List m_data, CVertex3f begin, CVertex3f end)

{

data = m_data;

length = data.Count;

x = new float[length];

y = new float[length];

z = new float[length];

deviation = new float[length];

beginGlide = begin;

endGlide = end;

}
public void Calculate()

{

float tempDeviation = 0.0f;

for (int i = 0; i < length; i++)

{

x[i] = (float)data[i].x;

y[i] = (x[i] - beginGlide.x) * (endGlide.y - beginGlide.y) / (endGlide.x - beginGlide.x) + beginGlide.y;

z[i] = (x[i] - beginGlide.x) * (endGlide.z - beginGlide.z) / (endGlide.x - beginGlide.x) + beginGlide.z;

tempDeviation = (float)Math.Sqrt(data[i].z * data[i].z + (data[i].y - y[i]) * (data[i].y - y[i]));

deviation[i] = tempDeviation;

if (tempDeviation > maxDeviation)

{

maxDeviation = tempDeviation;

}

}

//глиссада

DisplayListNomGlide = Gl.glGenLists(1);

Gl.glNewList(DisplayListNomGlide, Gl.GL_COMPILE);

Gl.glColor3f(1.0f, 0.0f, 0.0f);

Gl.glLineWidth(5.0f);

Gl.glBegin(Gl.GL_LINE_STRIP);

for (int i = 0; i < length; i++)

{

Gl.glVertex3f(x[i] , y[i], z[i]);

}

Gl.glEnd();

Gl.glEndList();

//отклонение

DisplayListNomDev = Gl.glGenLists(1);

Gl.glNewList(DisplayListNomDev, Gl.GL_COMPILE);

Gl.glLineWidth(3.0f);

Gl.glBegin(Gl.GL_LINES);

for (int i = 0; i < length; i++)

{

Gl.glColor3f(deviation[i] / maxDeviation, deviation[i] / maxDeviation, deviation[i] / maxDeviation);

Gl.glVertex3f((float)data[i].x , (float)data[i].y - 1, (float)data[i].z);

Gl.glColor3f(0.0f, 0.0f, 0.0f);

Gl.glVertex3f(x[i], y[i], z[i]);

}

Gl.glEnd();

Gl.glEndList();

flag = true;

}
public void Render(bool blGLide, bool blDev, bool blScale, float transparency)

{

if (flag == false)

{

this.Calculate();

flag = true;

}

if (blGLide)

{

Gl.glCallList(DisplayListNomGlide);

}

if (blDev)

{

Gl.glCallList(DisplayListNomDev);

}

if (blScale)

{

Gl.glBlendFunc(Gl.GL_SRC_ALPHA, Gl.GL_ONE_MINUS_SRC_ALPHA);

Gl.glEnable(Gl.GL_ALPHA_TEST);

Gl.glEnable(Gl.GL_BLEND);

Gl.glFrontFace(Gl.GL_CW);

Gl.glBegin(Gl.GL_TRIANGLES);

Gl.glColor4f(0.0f, 0.5f, 0, transparency);

Gl.glVertex3f(x[0], y[0], -500.0f);

Gl.glVertex3f(x[0], y[0], 500.0f);

Gl.glVertex3f(0, y[length - 1], 0.0f);

Gl.glColor4f(0.0f, 0.0f, 0.5f, transparency);

Gl.glVertex3f(x[0] , y[0] + 400.0f, 0.0f);

Gl.glVertex3f(x[0] , y[0] - 400.0f, 0.0f);

Gl.glVertex3f(0, y[length - 1], 0.0f);

Gl.glEnd();

Gl.glFrontFace(Gl.GL_CCW);

Gl.glBegin(Gl.GL_TRIANGLES);

Gl.glColor4f(0.0f, 0.5f, 0, transparency);

Gl.glVertex3f(x[0] , y[0], -500.0f);

Gl.glVertex3f(x[0] , y[0], 500.0f);

Gl.glVertex3f(0, y[length - 1], 0.0f);

Gl.glColor4f(0.0f, 0.0f, 0.5f, transparency);

Gl.glVertex3f(x[0], y[0] + 400.0f, 0.0f);

Gl.glVertex3f(x[0], y[0] - 400.0f, 0.0f);

Gl.glVertex3f(0, y[length - 1], 0.0f);

Gl.glEnd();

Gl.glDisable(Gl.GL_BLEND);

Gl.glDisable(Gl.GL_ALPHA_TEST);

}

}

}

}
class Entity

using System;

using System.Collections.Generic;

using Tao.OpenGl;

namespace Самолет

{

public class MaterialFaces

{

public Material Material;

public ushort[] Faces;

}

public class Entity : IRenderable

{

int glListNo = -1;

List materialFaces = new List();

public Vector[] vertices;

public Vector[] normals;

public Triangle[] indices;

public TexCoord[] texcoords;

bool normalized = false;

public List MaterialFaces {

get {

return materialFaces;

}

}
public void CalculateNormals ()

{

if ( indices == null ) return;

normals = new Vector [vertices.Length];

Vector[] temps = new Vector [ indices.Length ];

for ( int ii=0 ; ii < indices.Length ; ii++ )

{

Triangle tr = indices [ii];

Vector v1 = vertices [ tr.Vertex1 ] - vertices [ tr.Vertex2 ];

Vector v2 = vertices [ tr.Vertex2 ] - vertices [ tr.Vertex3 ];

temps [ii] = v1.CrossProduct ( v2 );

}

for ( int ii = 0; ii < vertices.Length ; ii++ )

{

Vector v = new Vector ();

for ( int jj = 0; jj < indices.Length ; jj++ )

{

Triangle tr = indices [jj];

if ( tr.Vertex1 == ii || tr.Vertex2 == ii || tr.Vertex3 == ii )

{

v += temps [jj];

}

}

normals [ii] = v.Normalize ();

}

normalized = true;

}
public void Render ()

{

if ( indices == null ) return;

if (glListNo >= 0)

{

Gl.glCallList(glListNo);

return;

}

glListNo = Gl.glGenLists(1);

System.Console.WriteLine(glListNo);

Gl.glNewList(glListNo, Gl.GL_COMPILE);

bool noMaterials = materialFaces.Count == 0;

if (noMaterials)

{

MaterialFaces m = new MaterialFaces();

m.Material = new Material();

materialFaces.Add(m);

}

foreach (MaterialFaces m in materialFaces)

{

Material material = m.Material;

Gl.glMaterialfv (Gl.GL_FRONT_AND_BACK, Gl.GL_AMBIENT, material.Ambient);

Gl.glMaterialfv (Gl.GL_FRONT_AND_BACK, Gl.GL_DIFFUSE, material.Diffuse);

Gl.glMaterialfv (Gl.GL_FRONT_AND_BACK, Gl.GL_SPECULAR, material.Specular);

Gl.glMaterialf (Gl.GL_FRONT_AND_BACK, Gl.GL_SHININESS, material.Shininess);

if (material.TextureId >= 0 )

{

Gl.glBindTexture ( Gl.GL_TEXTURE_2D, material.TextureId );

Gl.glEnable( Gl.GL_TEXTURE_2D );

}

Gl.glBegin ( Gl.GL_TRIANGLES);

for (int ii = 0; ii < (noMaterials ? indices.Length : m.Faces.Length); ii++)

{

Triangle tri = noMaterials ? indices[ii] : indices[m.Faces[ii]];

if (normalized) Gl.glNormal3d ( normals[tri.Vertex1].X, normals[tri.Vertex1].Y, normals[tri.Vertex1].Z );

if ( material.TextureId >= 0 ) Gl.glTexCoord2f ( texcoords [ tri.Vertex1 ].U, texcoords [ tri.Vertex1 ].V);

Gl.glVertex3d ( vertices[tri.Vertex1].X, vertices[tri.Vertex1].Y, vertices[tri.Vertex1].Z );
if (normalized) Gl.glNormal3d ( normals[tri.Vertex2].X, normals[tri.Vertex2].Y, normals[tri.Vertex2].Z );

if ( material.TextureId >= 0 ) Gl.glTexCoord2f ( texcoords [ tri.Vertex2 ].U, texcoords [ tri.Vertex2 ].V);

Gl.glVertex3d ( vertices[tri.Vertex2].X, vertices[tri.Vertex2].Y, vertices[tri.Vertex2].Z );

if (normalized) Gl.glNormal3d ( normals[tri.Vertex3].X, normals[tri.Vertex3].Y, normals[tri.Vertex3].Z );

if ( material.TextureId >= 0 ) Gl.glTexCoord2f( texcoords [ tri.Vertex3 ].U, texcoords [ tri.Vertex3 ].V);

Gl.glVertex3d ( vertices[tri.Vertex3].X, vertices[tri.Vertex3].Y, vertices[tri.Vertex3].Z );

}

Gl.glEnd();

}

Gl.glDisable( Gl.GL_TEXTURE_2D );

Gl.glEndList();

}

}

}
1   ...   4   5   6   7   8   9   10   11   12

Похожие:

Дипломная работа iconДипломная работа
Мамзеров Д. В., навигация и интерфейс в средах виртуальной реальности, дипломная работа
Дипломная работа iconДипломная работа по теме: “ Интерактивная база данных по дендроклиматологии” Работу
Моя дипломная работа очень актуальна, потому что дендроклиматология – малоизученная и малоизвестная область биологии. Дендроклиматология...
Дипломная работа iconДипломная работа содержит 104 листа, 6 таблиц, 35 рисунков. Тема:...
Данная дипломная работа посвящена проблемам разработки и внедрения устройств связи высокочастотного и сверхвысокочастотного диапазона....
Дипломная работа iconНазвание организации
Заголовок «Дипломная работа» или «Курсовая работа»: Times New Roman, 14 (вопреки П. 113), по центру. Затем – 2 пустые строки
Дипломная работа iconРеферат. Содержание
Дипломная работа (далее просто работа) выполняется на листах формата А4 с размерами полей: сверху – 20 мм, снизу – 20мм, справа –...
Дипломная работа icon2 требования к содержанию работы
Дипломная работа (далее просто работа) выполняется на листах формата А4 с соблюдением следующих размеров полей: правое – 10 мм, верхнее...
Дипломная работа iconДипломная работа

Дипломная работа iconРеферат. Содержание
Дипломная работа (далее просто работа) выполняется на листах формата А4 с размерами полей: сверху – 20 мм, снизу –20мм, справа- 15мм,...
Дипломная работа iconДипломная работа пгу 030501

Дипломная работа iconКнига 1
Объем работы – реферат от 12 до 25 печатных листов, курсовая работа – от 20 до 30 страниц, дипломная работа 60-70 страниц компьютерного...
Дипломная работа iconТребования к дипломной работе учащихся 10 11-х классов
Дипломная работа заключительная работа учебно-исследовательского характера, выполняемая оканчивающими университеты, экономические,...
Дипломная работа iconЛатинские заимствования в современном русском литературном языке (дипломная работа)

Дипломная работа iconДипломная работа Создание программы помогающей изучать английский язык

Дипломная работа iconДипломная работа на тему: «Совершенствование организации поддержки...
Дипломная работа «Совершенствование организации поддержки и развития малого предпринимательства в муниципальном районе на примере...
Дипломная работа iconДипломная работа
Соответствие современной интернет-рекламы психологическим особенностям подростков
Дипломная работа iconДипломная работа не менее 65 страниц без приложения
Курсовая работа выполняется на одной стороне листа белой бумаги формата А4 (210 Х 297 мм). Иллюстрированный материал (таблицы, схемы,...


Школьные материалы


При копировании материала укажите ссылку © 2013
контакты
100-bal.ru
Поиск