Скачать 0.6 Mb.
|
ЗАКЛЮЧЕНИЕВ результате данной работы были получены следующие результаты:
Развитие данного проекта возможно в нескольких направлениях.
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
ПРИЛОЖЕНИЕ А – Программный код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 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 { 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 public Vector[] vertices; public Vector[] normals; public Triangle[] indices; public TexCoord[] texcoords; bool normalized = false; public List 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(); } } } |
Дипломная работа Мамзеров Д. В., навигация и интерфейс в средах виртуальной реальности, дипломная работа | Дипломная работа по теме: “ Интерактивная база данных по дендроклиматологии” Работу Моя дипломная работа очень актуальна, потому что дендроклиматология – малоизученная и малоизвестная область биологии. Дендроклиматология... | ||
Дипломная работа содержит 104 листа, 6 таблиц, 35 рисунков. Тема:... Данная дипломная работа посвящена проблемам разработки и внедрения устройств связи высокочастотного и сверхвысокочастотного диапазона.... | Название организации Заголовок «Дипломная работа» или «Курсовая работа»: Times New Roman, 14 (вопреки П. 113), по центру. Затем – 2 пустые строки | ||
Реферат. Содержание Дипломная работа (далее просто работа) выполняется на листах формата А4 с размерами полей: сверху – 20 мм, снизу – 20мм, справа –... | 2 требования к содержанию работы Дипломная работа (далее просто работа) выполняется на листах формата А4 с соблюдением следующих размеров полей: правое – 10 мм, верхнее... | ||
Дипломная работа | Реферат. Содержание Дипломная работа (далее просто работа) выполняется на листах формата А4 с размерами полей: сверху – 20 мм, снизу –20мм, справа- 15мм,... | ||
Дипломная работа пгу 030501 | Книга 1 Объем работы – реферат от 12 до 25 печатных листов, курсовая работа – от 20 до 30 страниц, дипломная работа 60-70 страниц компьютерного... | ||
Требования к дипломной работе учащихся 10 11-х классов Дипломная работа заключительная работа учебно-исследовательского характера, выполняемая оканчивающими университеты, экономические,... | Латинские заимствования в современном русском литературном языке (дипломная работа) | ||
Дипломная работа Создание программы помогающей изучать английский язык | Дипломная работа на тему: «Совершенствование организации поддержки... Дипломная работа «Совершенствование организации поддержки и развития малого предпринимательства в муниципальном районе на примере... | ||
Дипломная работа Соответствие современной интернет-рекламы психологическим особенностям подростков | Дипломная работа не менее 65 страниц без приложения Курсовая работа выполняется на одной стороне листа белой бумаги формата А4 (210 Х 297 мм). Иллюстрированный материал (таблицы, схемы,... |