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





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

class Explosion

using System;

using System.Collections.Generic;

using System.Text;

using Tao.OpenGl;

using Tao.FreeGlut;

using Tao.Platform.Windows;
namespace Самолет

{

class Explosion

{

private float[] position = new float[3];

private int MAX_PARTICLES = 50000;

private int _particles_now;

private bool isStart = false;

private Particle[] ParticleArray;

private bool isDisplayList = false;

private int DisplayListNom = 0;

private static int[] k = { -1, 1 };

private CalcBurst test;

private Random rnd = new Random();

public Explosion(float x, float y, float z, float V0, float H0, float R0, int particle_count)

{

position[0] = x;

position[1] = y;

position[2] = z;

test = new CalcBurst(V0, H0, R0, position[0], position[1], position[2]);

_particles_now = particle_count;

if (_particles_now > MAX_PARTICLES)

{

_particles_now = MAX_PARTICLES;

}

System.Console.WriteLine(_particles_now);

ParticleArray = new Particle[_particles_now];

}

public void SetNewPosition(float x, float y, float z)

{

position[0] = x;

position[1] = y;

position[2] = z;

}

private void CreateDisplayList()

{

DisplayListNom = Gl.glGenLists(1);

Gl.glNewList(DisplayListNom, Gl.GL_COMPILE);

Gl.glColor4f(0.1f, 0.1f, 0.1f, 1.0f);

Glut.glutSolidSphere(1.2, 10, 10);

Gl.glEndList();

isDisplayList = true;

}

public void Boooom()

{

if (!isDisplayList)

{

CreateDisplayList();

}

for (int ax = 0; ax < _particles_now; ax++)

{

ParticleArray[ax] = CreateNewParticle();

ParticleArray[ax].Calculate();

}

isStart = true;

}

public Particle CreateNewParticle()

{

Particle returnParticle = new Particle(position[0], position[1], position[2], test, rnd);

return returnParticle;

}

public void Render()

{

if (isStart)

{

for (int ax = 0; ax < _particles_now; ax++)

{

int i ;

i=ParticleArray[ax].index;

Gl.glPushMatrix();

Gl.glTranslated(ParticleArray[ax].points[i].x, ParticleArray[ax].points[i].y, ParticleArray[ax].points[i].z);

Gl.glCallList(DisplayListNom);

Gl.glPopMatrix();

ParticleArray[ax].index++;

if (ParticleArray[ax].index==ParticleArray[ax].maxIndex)

{

ParticleArray[ax].index = 0;

}

}

}

}

}

}

class ForXML, class InstantData

using System;

using System.Collections.Generic;

using System.Text;

using System.Xml.Serialization;

using System.IO;
[XmlRootAttribute("InstantData")]

public class InstantData

{

// Time mark

public double t;
/*

* Coordinates of the aircraft mass center:

* x - longitudinal coordinate

* y - height

* z - lateral deviation

*/

public double x;

public double y;

public double z;

// Respective geometric velocities

public double vx;

public double vy;

public double vz;


// Angular coordinates:

// theta (pitch) - angle of rotation around z-axis

//psi (yaw) - angle of rotation around y-axis

// gamma (bank) - angle of rotation around x-axis

public double theta;

public double psi;

public double gamma;
// Respective angular velocities

public double wtheta;

public double wpsi;

public double wgamma;

}
[XmlRootAttribute("Trajectory")]

public class ForXML

{

[XmlArrayAttribute("data")]

public List data;
public ForXML()

{

data = new List();

}

}
interface IRenderable

using System;

namespace Самолет

{

public interface IRenderable

{

void Render();

}

}
Class Lib

using System;

using System.Collections.Generic;

using System.Text;
namespace Самолет

{

public struct CVertex3f

{

public float x;

public float y;

public float z;

public CVertex3f(float v1, float v2, float v3)

{

x = v1;

y = v2;

z = v3;

}

public override string ToString()

{

return String.Format("v1: {0} v2: {1} v3: {2}", x, y, z);

}

}
public struct Triangle

{

public int Vertex1;

public int Vertex2;

public int Vertex3;
public Triangle(int v1, int v2, int v3)

{

Vertex1 = v1;

Vertex2 = v2;

Vertex3 = v3;

}
public override string ToString()

{

return String.Format("v1: {0} v2: {1} v3: {2}", Vertex1, Vertex2, Vertex3);

}

}

public struct CFace

{

public int Vertex1;

public int Vertex2;

public int Vertex3;

public CFace(int v1, int v2, int v3)

{

Vertex1 = v1;

Vertex2 = v2;

Vertex3 = v3;

}

public override string ToString()

{

return String.Format("v1: {0} v2: {1} v3: {2}", Vertex1, Vertex2, Vertex3);

}

}

public struct TexCoord

{

public float U;

public float V;
public TexCoord(float u, float v)

{

U = u;

V = v;

}

}

public struct Vector

{

public double X;

public double Y;

public double Z;

public Vector(double x, double y, double z)

{

X = x;

Y = y;

Z = z;

}
public Vector CrossProduct(Vector v)

{

return new Vector(Y * v.Z - Z * v.Y,

Z * v.X - X * v.Z,

X * v.Y - Y * v.X);

}

public double DotProduct(Vector v)

{

return X * v.X + Y * v.Y + Z * v.Z;

}

public Vector Normalize()

{

double d = Length();
if (d == 0) d = 1;
return this / d;

}

public double Length()

{

return Math.Sqrt(DotProduct(this));

}

public override string ToString()

{

return String.Format("X: {0} Y: {1} Z: {2}", X, Y, Z);

}
public static Vector operator +(Vector v1, Vector v2)

{

Vector vr;
vr.X = v1.X + v2.X;

vr.Y = v1.Y + v2.Y;

vr.Z = v1.Z + v2.Z;
return vr;

}
public static Vector operator /(Vector v1, double s)

{

Vector vr;
vr.X = v1.X / s;

vr.Y = v1.Y / s;

vr.Z = v1.Z / s;
return vr;

}
public static Vector operator -(Vector v1, Vector v2)

{

Vector vr;
vr.X = v1.X - v2.X;

vr.Y = v1.Y - v2.Y;

vr.Z = v1.Z - v2.Z;
return vr;

}
}

public class Lib

{


public Lib()

{
}
public void gltGetNormalVector(float[] vP1, float[] vP2, float[] vP3, float[] vNormal)

{

float[] vV1, vV2;
vV1 = new float[3];

vV2 = new float[3];

gltSubtractVectors(vP2, vP1, vV1);

gltSubtractVectors(vP3, vP1, vV2);

gltVectorCrossProduct(vV1, vV2, vNormal);

gltNormalizeVector(vNormal);

}
//**********************************************************

// Вычесть один вектор из другого

public void gltSubtractVectors(float[] vFirst, float[] vSecond, float[] vResult)

{
vResult[0] = vFirst[0] - vSecond[0];

vResult[1] = vFirst[1] - vSecond[1];

vResult[2] = vFirst[2] - vSecond[2];

}
//**********************************************************

// Вычислить векторное произведение двух векторов

public void gltVectorCrossProduct(float[] vU, float[] vV, float[] vResult)

{

vResult[0] = vU[1] * vV[2] - vV[1] * vU[2];

vResult[1] = -vU[0] * vV[2] + vV[0] * vU[2];

vResult[2] = vU[0] * vV[1] - vV[0] * vU[1];

}
//**********************************************************

// Привести вектор к единичной длине (нормировать)

public void gltNormalizeVector(float[] vNormal)

{

float fLength = 1.0f / (float)Math.Sqrt(vNormal[0] * vNormal[0] + vNormal[1] * vNormal[1] + vNormal[2] * vNormal[2]);

gltScaleVector(vNormal, fLength);

}
//**********************************************************

// Умножить вектор на скаляр

public void gltScaleVector(float[] vVector, float fScale)

{

vVector[0] = fScale; vVector[1] *= fScale; vVector[2] *= fScale;

}

public void gltMakeShadowMatrix(float[] Point1, float[] Point2, float[] Point3, float[] vLightPos, float[] destMat)

{

float[] vPlaneEquation = new float[4];

float dot;
gltGetPlaneEquation(Point1, Point2, Point3, vPlaneEquation);
// Вычисляет скалярное произведение направляющего вектора плоскости

// и вектора положения источника света

dot = vPlaneEquation[0] * vLightPos[0] +

vPlaneEquation[1] * vLightPos[1] +

vPlaneEquation[2] * vLightPos[2] +

vPlaneEquation[3] * vLightPos[3];
// Формируем матрицу проекции

// Первый столбец

destMat[0] = dot - vLightPos[0] * vPlaneEquation[0];

destMat[4] = 0.0f - vLightPos[0] * vPlaneEquation[1];

destMat[8] = 0.0f - vLightPos[0] * vPlaneEquation[2];

destMat[12] = 0.0f - vLightPos[0] * vPlaneEquation[3];
// Второй столбец

destMat[1] = 0.0f - vLightPos[1] * vPlaneEquation[0];

destMat[5] = dot - vLightPos[1] * vPlaneEquation[1];

destMat[9] = 0.0f - vLightPos[1] * vPlaneEquation[2];

destMat[13] = 0.0f - vLightPos[1] * vPlaneEquation[3];
// Третий столбец

destMat[2] = 0.0f - vLightPos[2] * vPlaneEquation[0];

destMat[6] = 0.0f - vLightPos[2] * vPlaneEquation[1];

destMat[10] = dot - vLightPos[2] * vPlaneEquation[2];

destMat[14] = 0.0f - vLightPos[2] * vPlaneEquation[3];
// Четвертый столбец

destMat[3] = 0.0f - vLightPos[3] * vPlaneEquation[0];

destMat[7] = 0.0f - vLightPos[3] * vPlaneEquation[1];

destMat[11] = 0.0f - vLightPos[3] * vPlaneEquation[2];

destMat[15] = dot - vLightPos[3] * vPlaneEquation[3];

}
// Возвращает коэффициенты уравнения плоскости по трем точкам

public void gltGetPlaneEquation(float[] vPoint1, float[] vPoint2, float[] vPoint3, float[] vPlane)

{

// Вычислить вектор нормали

gltGetNormalVector(vPoint1, vPoint2, vPoint3, vPlane);

vPlane[3] = -(vPlane[0] * vPoint3[0] + vPlane[1] * vPoint3[1] + vPlane[2] * vPoint3[2]);

}

}

}
class LoadData

using System;

using System.Collections.Generic;

using System.Text;

using System.Xml.Serialization;

using System.IO;
public class LoadData

{

public ForXML forXML;

public LoadData()

{

}

private void CreateData(string filename)

{

XmlSerializer serializer =

new XmlSerializer(typeof(ForXML));

TextWriter writer = new StreamWriter(filename);

ForXML Data = new ForXML();

int i = 0;

InstantData instData = new InstantData();

instData.x = i++;

instData.y = i++;

instData.z = i++;

Data.data.Add(instData);

serializer.Serialize(writer, Data);

writer.Close();

}

public void ReadPO(string filename)

{

XmlSerializer serializer = new XmlSerializer(typeof(ForXML));

serializer.UnknownNode += new

XmlNodeEventHandler(serializer_UnknownNode);

serializer.UnknownAttribute += new

XmlAttributeEventHandler(serializer_UnknownAttribute);

FileStream fs = new FileStream(filename, FileMode.Open);

forXML = (ForXML)serializer.Deserialize(fs);

fs.Close();

}

private void serializer_UnknownNode(object sender, XmlNodeEventArgs e)

{

Console.WriteLine("Unknown Node:" + e.Name + "\t" + e.Text);

}
private void serializer_UnknownAttribute(object sender, XmlAttributeEventArgs e)

{

System.Xml.XmlAttribute attr = e.Attr;

Console.WriteLine("Unknown attribute " +

attr.Name + "='" + attr.Value + "'");

}

}
class Property

using System;

using System.Collections.Generic;

using System.Text;

using System.Data;

using System.IO;

using System.Xml.Serialization;

using System.Runtime.Serialization;

using System.Windows.Forms;
namespace Самолет

{

public class Property

{

public string dataFile;

public string modelFile;

public int particleNumber;

public bool particleState;

public bool glideState;

public bool deviationState;

public bool planeState;

public CVertex3f explosion;

public float transparency;

public float V0;

public float H0;

public float R0;

public CVertex3f beginGlide;

public CVertex3f endGlide;

}

class LoadProperty

{

public Property property;

public Property defProperty;

public LoadProperty()

{

defProperty = new Property();

defProperty.dataFile = "default.xml";

defProperty.modelFile = "tu154.3DS";

defProperty.particleNumber = 15000;

defProperty.particleState = true;

defProperty.glideState = false;

defProperty.deviationState = false;

defProperty.planeState = false;

defProperty.explosion = new CVertex3f(0.0f, 0.0f, 0.0f);
defProperty.V0 = 20.0f;

defProperty.H0 = 600.0f;

defProperty.R0 = 1000.0f;

defProperty.transparency = 0.3f;

defProperty.beginGlide = new CVertex3f(0.0f, 0.0f, 0.0f);

defProperty.endGlide = new CVertex3f(-1000.0f, 46.44f, 0.0f);

}

public Property Load()

{

XmlSerializer xmlser = new XmlSerializer(typeof(Property));

string filename = System.Environment.CurrentDirectory + "\\applicationSettings.xml";

FileStream filestream= null;

property = defProperty;

try

{

filestream = new FileStream(filename, FileMode.Open);

property = (Property)xmlser.Deserialize(filestream);

if (!File.Exists(property.dataFile))

{

MessageBox.Show("Файла" + property.dataFile + " не существует");

property.dataFile = defProperty.dataFile;

}

if (!File.Exists(property.modelFile))

{

MessageBox.Show("Файла" + property.modelFile + " не существует");

property.modelFile = defProperty.modelFile;
}
}

catch (FileNotFoundException ae)

{
MessageBox.Show("Файл конфигурации не найден");
WriteProperty(defProperty);

}

catch (InvalidOperationException ae)

{

MessageBox.Show("Неправильный формат данных");

WriteProperty(defProperty);

}

finally

{

if (filestream != null)

filestream.Close();

}

return property;

}

public void WriteProperty(Property pr)

{

XmlSerializer serializer = new XmlSerializer(typeof(Property));

TextWriter writer = new StreamWriter("applicationSettings.xml");

serializer.Serialize(writer,pr);

writer.Close();

}

private void serializer_UnknownNode(object sender, XmlNodeEventArgs e)

{

Console.WriteLine("Unknown Node:" + e.Name + "\t" + e.Text);

}
private void serializer_UnknownAttribute(object sender, XmlAttributeEventArgs e)

{

System.Xml.XmlAttribute attr = e.Attr;

Console.WriteLine("Unknown attribute " +

attr.Name + "='" + attr.Value + "'");

}

}

}
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
Поиск