Разработка программного модуля визулизации орбит ИСЗ с помощью библиотеки OpenSceneGraph

Библиотека OpenSceneGraph: операции над графом сцены и пересылка. Визуализация базовых фигур. Математические расчеты элементов орбиты спутника. Создание сферы и наложение текстуры Земли. Создание основного класса программы. Режим слежения за спутником.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 07.08.2018
Размер файла 3,7 M

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

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

Как известно, эллипсом (рис. 3.1) называется геометрическое место точек, сумма расстояний от которых до двух заданных точек F1 и F2, называемых фокусами эллипса, есть величина постоянная [10].

Рис. 3.1 - Эллипс

На рис. 3.1.1 отрезок называется большой полуосью эллипса, отрезок - малой полуосью. Отрезок , где , называется фокусным расстоянием. Число называется эксцентриситетом эллипса. Значение эксцентриситета показывает степень вытянутости эллипса (рис. 3.1.2). Причем, это значение для эллипса всегда меньше единицы.

Рис. 3.2 - Зависимость формы эллипса от эксцентриситета

Форма орбиты спутника зависит от начальной скорости спутника (рис. 3.3). Теоретически, спутник, движущийся по окружности у самой поверхности земли, должен иметь круговую скорость v1k = 7,91 км/сек. Эта скорость называется первой космической скоростью. Если его начальная скорость больше первой космической, то орбита будет иметь форму эллипса, в одном из фокусов которого находится Земля. При такой скорости точка запуска спутника будет являться перигеем орбиты, то есть ближайшей точкой орбиты к поверхности Земли. При (v2k = 11,2 км/сек) спутник преодолеет силу притяжения Земли и покинет ее по параболической траектории, а при - по гиперболической траектории. При скорости спутника меньше первой космической, он будет двигаться по эллиптической орбите, но точка запуска спутника будет являться апогеем орбиты (самая удаленная точка орбиты от центра Земли), а при скорости, намного меньше первой космической, спутник упадет на Землю и сгорит в атмосфере.

Рис. 3.3 - Зависимость формы орбиты от начальной скорости спутника

Однако, из-за наличия у поверхности Земли атмосферы в реальности такой спутник существовать не может[9]. Поэтому спутник запускается на некоторой высоте h > 150 км. Круговая скорость на некотором расстоянии от поверхности Земли будет меньше первой космической и вычисляется по формуле (3.4):

,(3.4)

где R - радиус Земли [5].

Большая полуось орбиты вычисляется по формуле (3.5):

,(3.5)

где G - гравитационная постоянная;

M - масса Земли.

Эксцентриситет - по формуле 3.5:

,(3.6)

где q - расстояние до перигея от центра Земли;

Q - расстояние до апогея (самая удаленная точка орбиты) от центра Земли.

Малая полуось орбиты находится из формулы 3.6:

(3.7)

Таким образом, расчет большой полуоси орбиты и круговой скорости на заданной высоте будет выглядеть в программе следующим образом:

major=(10*Gm*h_start) / (20*Gm-pow(v_start,2)*h_start);

vc=v1k*sqrt(R_Earth / h_start);

Расчет пергигея, эксцентриситета, апогея и малой полуоси при скорости спутника, большей круговой:

perigee=h_start;

eccentricity=1-perigee/major;

apogee=major*(1+eccentricity);

minor = major*sqrt(1-pow(eccentricity, 2));

При скорости спутника, меньшей круговой:

apogee = h_start;

eccentricity = apogee/major - 1;

perigee=major * (1 - eccentricity);

minor = major * sqrt(1 - pow(eccentricity, 2));

3.2 Создание сферы и наложение текстуры Земли

Чтобы создать сферу, можно воспользоваться классом osg::ShapeDrawable. Этот класс содержит функцию setShape(), которая позволяет создавать простые 3D объекты, такие, например, как сфера, конус или куб. Для наложения текстуры воспользуемся методом getOrCreateStateSet(), который возвращает указатель на набор состояний, который, в свою очередь, предоставляет набор функций, с помощью которых можно изменять свойства объекта. Одна из таких функций - setTextureAttributeAndModes, которой в качестве параметра передается указатель на объект типа Texture2D.

Класс osg::Texture2D содержит функции OpenGL для создания 2D текстур. Функция setImage() устанавливает текстуру, которую она принимает в качестве параметра. Класс osg::Image служит местом для хранения данных о текстуре. Для визуализации планеты Земля требуется найти текстуру достаточно высокого разрешения.

Таким образом, функция создания планеты будет содержать следующий код:

Geode* createPlanet(string path, double radius)

{

ref_ptr<Texture2D> texture1 = new osg::Texture2D;

ref_ptr<osg::Image> image = osgDB::readImageFile(path);

texture1->setImage(image.get());

ShapeDrawable *sphere = new ShapeDrawable();

sphere->setShape(new osg::Sphere(osg::Vec3(0.0f, 0.0f, 0.0f), radius));

Geode *planet = new Geode();

planet->addDrawable(sphere);

planet->getOrCreateStateSet()->setTextureAttributeAndModes(0, texture1.get());

return planet;

}

Результат наложения текстуры на сферу показан на рис. 3.7.

Рис. 3.8 - Наложение текстуры на сферу

Полностью текст программных процедур приведен в приложении А.

3.3 Создание основного класса программы

Для хранения данных, необходимых для работы программы, удобно создать класс, содержащий такие переменные, как путь к текстуре планеты Земля, высота запуска спутника, гравитационная постоянная, масса и радиус Земли, эксцентриситет, большая и малая полуоси, апогей и перигей орбиты, время прохода спутника по орбите и его скорость и т.д. А также функции для расчета элементов орбиты, создания, отображения и сокрытия орбиты, создания модели спутника, создание 2D-виджета и т.д.

class SolSystem

{

public:

/*Объект класса Node для хранения модели спутника*/

Node* satellite;

Group* lineOrbit;

MatrixTransform* transSat;

AnimationPathCallback *satTraj;

float time;

double Gm, h_start, minor, major, v_start, eccentricity, apogee, perigee, distFoc, vc, v1k,

radiusOfTheEarth, R_Earth;

string _textureEarth;

osgWidget::Label* dataSat;

osgWidget::Window* win;

osgWidget::WindowManager *wm;

Vec3Array *pointsOfOrbit;

/*Функция для создания траектории движения спутника*/

void createTrajectory();

/*Функция для расчета элементов орбиты*/

void calculateElementsOfOrbit();

/*отобразить/скрыть орбиту спутника*/

void showHideLineOfOrbit(bool show);

/*Создание модели спутника*/

void createStl();

/*Создание виджета для отображения данных о спутнике и о клавишах управления*/

void createWid( float winX, float winY );

/*Функция создания пути анимации спутника*/

AnimationPath* createAnimationPathSat( float ap, float bp, float time);

/*Создание планеты*/

Geode *createPlanet(string path, double radius);

}

Кроме того, следует объявить конструктор класса SolSystem:

/*Конструктор класса*/

SolSystem()

{

radiusOfTheEarth = 1.0;// Радиус земли = 6371 тыс. км

pointsOfOrbit = new Vec3Array;

time = 10;

Gm=39.8;

h_start = 6.8;

v_start = 7.9;

R_Earth = 6.371;

v1k = 7.91;

lineOrbit = new Group;

_textureEarth = "D://OSG340//Data//Images//earth.jpg";

}

3.4 Модель спутника

Выбор модели спутника зависит, прежде всего, от затрачиваемых на ее загрузку ресурсов. Можно взять модель спутника с официального сайта NASA nasa.gov. Результат визуализации модели, загруженной с этого сайта изображен на рисунке 3.9.

Рис. 3.9 - Результат визуализации модели спутника

Однако, при визуализация данной модели приложение довольно долго загружается, поэтому было принято решение написать функцию, которая будет создавать модель спутника, используя простые фигуры типа конус и куб. Она будет иметь следующий вид:

void SolSystem::createStl()

{

Geode* geode = new Geode;

Group* root = new Group;

ShapeDrawable *corp = new ShapeDrawable;

ShapeDrawable *wing = new ShapeDrawable;

ShapeDrawable *conus = new ShapeDrawable;

ShapeDrawable *stick = new ShapeDrawable;

MatrixTransform *wing1 = new MatrixTransform;

MatrixTransform *wing2 = new MatrixTransform;

MatrixTransform *con = new MatrixTransform;

MatrixTransform *stl = new MatrixTransform;

corp->setShape( new osg::Box(osg::Vec3(-0.01f, 0.0f, 0.0f), 0.06f, 0.02f, 0.02) );

corp->setColor(Vec4(0.8, 0.8, 0.6, 1));

wing->setShape( new osg::Box(osg::Vec3(0.0f, 0, 0.0f), 0.02, 0.05, 0.001) );

wing->setColor(Vec4(0.3, 0.3, 0.6, 1));

conus->setShape( new osg::Cone(osg::Vec3(0.0f, 0.0f, 0.0f), 0.01, 0.015) );

stick->setShape( new osg::Box(osg::Vec3(0.0f, -0.03, 0.0f), 0.005, 0.01, 0.001) );

wing1->addChild(wing);

wing1->addChild(stick);

wing1->setMatrix(Matrix::translate(Vec3(-0.01, 0.04, 0)) * Matrix::rotate(0.5, Y_AXIS));

wing2->addChild(wing);

wing2->addChild(stick);

wing2->setMatrix(Matrix::translate(Vec3(-0.01, 0.045, 0)) * Matrix::rotate(3.14159, X_AXIS, 0.5, Y_AXIS, 0, Z_AXIS));

con->addChild(conus);

con->setMatrix(Matrix::rotate(-1.5708, Y_AXIS)*Matrix::translate(Vec3(0.02, 0, 0)));

geode->addDrawable(corp);

root->addChild(wing1);

root->addChild(wing2);

root->addChild(con);

root->addChild(geode);

stl->addChild(root);

stl->setMatrix(Matrix::translate(Vec3(0,0,0)) * Matrix::scale(3,3,3) * Matrix::rotate(3.14159, Y_AXIS));

satellite=stl;

}

Результат выполнения функции createStl() показан на рисунке 3.10.

Рис. 3.10 - Результат выполнения функции createStl()

3.5 Траектория движения спутника и отображение орбиты

Чтобы создать путь анимации спутника, нужно найти координаты нескольких контрольных точек на эллипсе. Учитывая, что центр Земли должен находиться в одном из фокусов эллипса, одну из координат контрольных точек следует находить со смещением, равным половине фокусного расстояния. Для этого воспользуемся параметрическими уравнениями эллипса (3.11).

, (3.11)

Координаты контрольных точек для последующей работы с ними можно запоминать с помощью экземпляра класса osg::Vec3Array, который предоставляет массив экземпляров класса osg::Vec3, который, в свою очередь, позволяет запоминать три координаты x, y и z.

Таким образом, функция расчета траектории движения спутника будет иметь следующий вид:

AnimationPath* SolSystem::createAnimationPathSat( float ap, float bp, float time)

{

osg::ref_ptr<osg::AnimationPath> path = new osg::AnimationPath;

path->setLoopMode( osg::AnimationPath::LOOP);

unsigned int numSamples = 256;

float delta_yaw = 2.0f * osg::PI / ((float)numSamples - 1.0f);

float delta_time = time / (float)numSamples;

pointsOfOrbit->clear();

for ( unsigned int i=0; i<numSamples; ++i )

{

float yaw = delta_yaw * (float)i;

double x, y, z;

x=sinf(yaw)*bp;

y=cosf(yaw)*ap + halfDistFoc;

osg::Vec3 pos( x, y, 0.0f);

osg::Quat rot( -yaw, osg::Z_AXIS );

path->insert( delta_time * (float)i, osg::AnimationPath::ControlPoint(pos, rot));

pointsOfOrbit->push_back(Vec3(x, y, 0));

}

return path.release();

}

Для отображения орбиты можно создать одну сферу класса osg::ShapeDrawable и расположить ее копии так, чтобы получилась линия. Модель сферы можно добавлять в качестве дочернего узла экземплярам класса osg::MatrixTransform, чтобы таким образом отображать одну и ту же модель в нескольких местах одновременно. Такой метод клонирования модели полезен для уменьшения памяти сцены, так как приложение будет хранить только одну копию данных и просто будет вызывать метод реализации несколько раз. Первую сферу следует выделить большим размером и цветом, чтобы отличать ее от остальных сфер, как точку начала движения спутника. Она также будет являться точкой перигея или апогея орбиты, в зависимости от начальной скорости.

Для того, чтобы пользователь мог скрывать или отображать орбиту спутника, можно создать экземпляр класса osg::Switch, который позволяет задавать параметр видимости своим потомкам с помощью функции setValue(), и присоединить к нему матрицы трансформации в качестве дочерних узлов. Однако, параметр видимости можно задавать только каждому ребенку в отдельности, поэтому следует создать какой-либо промежуточный узел, например, экземпляр класса osg::Group, в который поместить все матрицы трансформации, и после этого добавить его в экземпляр класса osg::Switch.

Метод расчета траектории движения спутника должен будет вызываться из функции создания орбиты. В следствии этого, последняя будет содержать следующий код:

void SolSystem::createOrbit()

{

calculateElementsOfOrbit();

satTraj->setAnimationPath( createAnimationPathSat(major, minor, time) );

if(lineOrbit->getNumChildren() != 0)

{

lineOrbit->removeChildren(0, lineOrbit->getNumChildren());

}

Group* temp = new Group;

ShapeDrawable *first = new ShapeDrawable;

first->setShape(new Sphere(pointsOfOrbit[0][0], 0.04));

first->setColor(Vec4(0.8, 0.1, 0.1, 1));

temp->addChild(first);

ShapeDrawable *shphr = new ShapeDrawable;

shphr->setShape(new Sphere(Vec3(0, 0, 0), 0.02));

for(int i =1; i < pointsOfOrbit->size(); i++)

{

MatrixTransform* sphereMatrix = new MatrixTransform;

sphereMatrix->addChild(shphr);

sphereMatrix->setMatrix(Matrix::translate(pointsOfOrbit[0][i]));

temp->addChild(sphereMatrix);

}

lineOrbit->addChild(temp);

}

Результат создания расчета траектории движения спутника и отображения орбиты показан на рисунке 3.12.

Рис. 3.12 - Результат расчета траектории движения спутника и отображения орбиты

Скрытие и отображение орбиты реализуется с помощью соответствующей функции. Она принимает значение типа bool в качестве параметра. Если значение параметра будет равно true, то орбита будет отображаться на сцене, если false - линия орбиты отображаться не будет.

void SolSystem::showHideOrbit(bool show)

{

if(lineOrbit->getNumChildren() != 0)

{

if(show)

lineOrbit->setValue(0, true);

else

lineOrbit->setValue(0, false);}}

3.6 Вращение Земли

Для того, чтобы задать вращение сферы, можно так же воспользоваться функционалом класса osg::AnimationPath, как в случае с траекторией движения спутника. Земля будет оставаться в одной точке, но будет поворачиваться в каждый момент времени. Для того, чтобы это сделать, нужно немного изменить предыдущую функцию создания пути анимации:

osg::AnimationPath* createAnimationPath(float time)

{

osg::ref_ptr<osg::AnimationPath> path = new osg::AnimationPath;

path->setLoopMode( osg::AnimationPath::LOOP );

unsigned int numSamples = 256;

float delta_yaw = 2.0f * osg::PI / ((float)numSamples - 1.0f);

float delta_time = time / (float)numSamples;

for ( unsigned int i=0; i<numSamples; ++i )

{

float yaw = delta_yaw * (float)i;

osg::Vec3 pos( 0, 0, 0.0f);

osg::Quat rot( -yaw, osg::Z_AXIS );

path->insert(delta_time*(float)i, osg::AnimationPath::ControlPoint(pos, rot));

}

return path.release();

}

3.7 Режим слежения за спутником

Переключение между режимами слежения за спутником и слежения за Землей осуществляется с помощью экземпляра класса osgGA::KeySwitchMatrixManipulator. При нажатии кнопки «2» камера перемещается к положению спутника и движется вместе с ним. При нажатии кнопки «2» камера возвращается к Земле. В режиме слежения за спутником камера перемещается и вращается вместе со спутником. Это реализовано с помощью экземпляра класса osgGA::NodeTrackerManipulator. Используя функцию setTrackNode() устанавлявается указатель на узел сцены, за которым будет происходить слежение.

osg::ref_ptr<osgGA::NodeTrackerManipulator> nodeTracker = new osgGA::NodeTrackerManipulator;

osg::ref_ptr<osgGA::NodeTrackerManipulator> nodeTracker2 = new osgGA::NodeTrackerManipulator;

nodeTracker->setHomePosition( osg::Vec3(0.0f, 0.2f, 0.0f), Vec3(), osg::Z_AXIS );

nodeTracker->setTrackerMode( osgGA::NodeTrackerManipulator::NODE_CENTER_AND_ROTATION);

nodeTracker->setRotationMode( osgGA::NodeTrackerManipulator::TRACKBALL );

nodeTracker->setTrackNode( solsys->satellite );

nodeTracker2->setHomePosition( osg::Vec3(0.0f, 0.2f, 0.0f), Vec3(), osg::Z_AXIS );

nodeTracker2->setTrackerMode( osgGA::NodeTrackerManipulator::NODE_CENTER);

nodeTracker2->setRotationMode( osgGA::NodeTrackerManipulator::TRACKBALL );

nodeTracker2->setTrackNode( earth );

osg::ref_ptr<osgGA::KeySwitchMatrixManipulator> keySwitch = new osgGA::KeySwitchMatrixManipulator;

keySwitch->addMatrixManipulator( '1', "NodeTracker2", nodeTracker2.get() );

keySwitch->addMatrixManipulator( '2', "NodeTracker", nodeTracker.get() );

Результат переключения в режим слежения за спутником показан на рисунке 3.13.

Рис. 3.13 - режим слежения за спутником

3.8 Изменение параметров орбиты с помощью клавиш управления

С помощью клавиш управления пользователь может изменять начальную скорость и высоту запуска спутника. Управление клавишами реализовано с помощью функции handle(), в качестве параметров которой выступают указатели на экземпляры классов osgGA::GUIEventAdapter и osgGA::GUIActionAdapter. Первый предоставляет полученное событие, а с помощью второго можно выполнять действия в ответ на полученное событие.

Создадим класс ModelController, который будет наследоваться от класса osg::GUIEventHandler. В конструктор класса в качестве параметров передадим указатель на класс SolSystem и указатель на корневой узел:

class ModelController : public osgGA::GUIEventHandler

{

public:

ModelController(SolSystem* sys, Group *root ): sols(sys), r(root)

{}

virtual bool handle( const osgGA::GUIEventAdapter& ea, osgGA::GUIActionAdapter& aa );

protected:

SolSystem* sols;

Group *r;

};

Таким образом, при нажатии, например, клавиши «H» на английской раскладке клавиатуры увеличивается значение начальной высоты запуска спутника и вызывается функция создания новой орбиты. Нажатие клавиши «J» приводит к уменьшению значения начальной высоты. Клавиша «V» увеличивает начальную скорость, клавиша «B» уменьшает ее. При нажатии клавиши «S» орбита становится видимой в сцене, а при нажатии «D» - невидимой.

Код функции handle():

bool ModelController::handle( const osgGA::GUIEventAdapter& ea, osgGA::GUIActionAdapter& aa )

{

switch ( ea.getEventType() )

{

case osgGA::GUIEventAdapter::KEYDOWN:

switch ( ea.getKey() )

{

case 'h': case 'H':

sols->h_start+=0.1;

sols->createOrbit();

sols->createWid(0, 0);

break;

case 'j': case 'J':

sols->h_start-=0.1;

sols->createOrbit();

sols->createWid(0, 0);

break;

case 'v': case 'V':

sols->v_start+=0.1;

sols->createOrbit();

sols->createWid(0, 0);

break;

case 'b': case 'B':

sols->v_start-=0.1;

sols->createOrbit();

sols->createWid(0, 0);

break;

case 's': case 'S':

sols->showHideOrbit(true);

break;

case 'd': case 'D':

sols->showHideOrbit(false);

break;

default:

break;

}

break;

default:

break;

}

return false;

}

3.9 Отображение текущих параметров орбиты

Библиотека osgWidget позволяет создавать 2D-виджеты в приложениях с 3D-графикой. Для отображения текущих параметров орбиты удобно использовать виджет, на котором данные об орбите будут меняться с каждым изменением значений начальной высоты или скорости спутника. Функция, создающая виджет, будет выглядеть следующим образом:

void SolSystem::createWid( float winX, float winY )

{

wm->removeChild(win);

osg::Vec4 color(0.1f, 0.2f, 0.3f, 1.0f);

std::stringstream ss, ss2;

ss << "Tab-" << 0;

ss2<<"H-Increase initial height" << endl

<<"J-Reduce initial height" << endl

<<"V-Increase initial speed" << endl

<<"B-Reduce initial speed" << endl

<<"S-Show line of Orbit" << endl

<<"D-Hide line of Orbit" << endl

<< endl << endl << "About satellite:\n\n"

<<"Start speed = " << v_start << "km/s" << endl << endl

<<"start height = " << h_start*1000 << "km" << endl << endl

<<"Eccentricity = " << eccentricity << endl << endl

<<"Semimajor axis = " << major * R_Earth * 1000 << "km" << endl << endl

<<"Semiminor axis = " << minor * R_Earth * 1000 << "km" << endl << endl

<< "Apogee = " << apogee*1000 << "km" << endl << endl

<<"Perigee = " << perigee*1000 << "km" << endl << endl

<< "Circular speed for\n this height = " << vc << "km/s";

osg::ref_ptr<osgWidget::Box> main = new osgWidget::Box("main", osgWidget::Box::VERTICAL);

main->setOrigin( winX, winY );

main->addWidget(createLabel(ss.str(), ss2.str(), 15, color));

main->resize(250, 500);

win = main.release();

wm->addChild(win);

}

Результат выполнения функции отображен на рисунке 3.14.

Рис. 3.14 - 2D-виджет, отображающий текущие данные об орбите, а так же памятку о клавишах управления

4 Результаты работы программы

4.1 Изменение параметров орбиты и изменение ракурса

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

Рис. 4.1 - Орбита при начальной скорости спутника, большей круговой для заданной начальной высоты

На рис. 4.2 орбита с того же ракурса, но с начальной скоростью . Изменение скорости запуска спутника привело к тому, что точка старта, которая была перигеем орбиты, теперь стала ее апогеем.

Рис. 4.2 - Орбита при начальной скорости спутника, меньшей круговой для заданной начальной высоты

На рис. 4.3 изображена та же орбита, что и на рис. 4.2, но с другого ракурса. С помощью смены ракурса можно узнать, над какой областью Земного шара будет пролетать спутник.

Рис. 4.3 - Орбита при начальной скорости спутника, меньшей круговой для заданной начальной высоты, смена ракурса

4.2 Режим слежения за спутником с отображенной и скрытой орбитой

На рис. 4.4 изображена программа в режиме слежения за спутником с отображенной орбитой.

Рис. 4.4 - Режим слежения за спутником, орбита отображается

На рис. 4.5 - программа в режиме слежения за спутником со скрытой орбитой.

Рис. 4.5 - Режим слежения за спутником, орбита скрыта

Полностью результаты работы программы показаны в приложении Б.

Заключение

Результатом выполнения дипломной работы явилось программное обеспечение на языке C++, позволяющее рассчитывать и отображать с помощью трехмерной библиотеки OpenSceneGraph 3.0 траекторию движения искусственного спутника Земли.

Разработка программного обеспечения и практическая работа с ним позволяют сделать следующие выводы:

- язык программирования C++ в сочетании с библиотекой OpenSceneGraph пригоден для создания ПО графической визуализации данных;

- библиотека OpenSceneGraph удобнее в использовании, чем OpenGL, так как OSG разработано с целью упростить создание графических приложения на основе OpenGL;

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

Желательна дальнейшая отработка методики интеграции языка C++ с новыми версиями графической библиотеки OpenSceneGraph, в частности, с версией 3.4. Также желательно проведение работ в области интеграции языка C++ с библиотекой OpenSceneGraph и библиотекой графического интерфейса Qt для создания более удобного интерфейса программы.

Результаты работы могут быть использованы на кафедре информационных систем и технологий ПГУТИ в дальнейших исследованиях в области применения языка C++ и компьютерной графики, а также при изучении студентами дисциплин кафедры.

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

...

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

  • Изучение моделирования и визуализации трехмерных динамических сцен в пакете 3Ds Max на примере создания анимированной сцены, содержащей мышь, стул, чашку, чайную ложку и море. Создание материалов, камер и анимации, постановка света и визуализация сцены.

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

  • Построение динамической трехмерной сцены, включающей заданные тело и поверхность определенного вида средствами графической библиотеки. Наложение текстур на тела, поверхности с помощью функции SetupTextures. Графическое представление тела с текстурой.

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

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

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

  • Реализация программы в виде класса, используя для хранения информации контейнеры стандартной библиотеки шаблонов (STL) языка C++. Создание новой базы данных. Вывод информации о всех компьютерах. Удаление элементов контейнера, их поиск по критериям.

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

  • Структурная диаграмма программного модуля. Нахождение суммы элементов, находящихся над главной диагональю. Реализация программного модуля: код программы; описание использованных операторов и функций. Особенности тестирования программного модуля.

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

  • Последовательность построения поверхностей, картографирования значений глубин и сравнения полученных моделей при помощи модуля Geostatistical Analyst. Визуализация рельефа и создание 3D-моделей местности в ArcGIS. Создание видео-обзора 3D-поверхностей.

    курсовая работа [5,5 M], добавлен 23.04.2012

  • Возможности библиотеки OpenGL, создание матрицы и эффекта тумана. Разработка процедуры визуализации трехмерной модели "Корабль", интерфейса пользователя и подсистемы управления событиями. Логическая структура и функциональная декомпозиция проекта.

    курсовая работа [507,2 K], добавлен 02.07.2011

  • Разработка программ средствами библиотеки tkinter на языке Python. Изучение основы работы в текстовом редакторе Word. Описание авторской идеи анимации. Использование базовых команд и конструкций. Процесс проектирования и алгоритм разработанной программы.

    контрольная работа [125,3 K], добавлен 11.11.2014

  • Создание программы, с помощью библиотеки OpenGL рисующей проволочный чайник с поворотом рисунка вокруг осей X, Y, Z. Построение отрографической проекции. Установка области отображения. Функция обработки сообщений с клавиатуры. Главный цикл приложения.

    контрольная работа [151,2 K], добавлен 21.01.2011

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

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

  • Информационные и коммуникационные технологии в школьном обучении, сравнительный анализ технических и программных средств; Maple - язык и его синтаксис. Создание библиотеки процедур с помощью программы Maple к уроку информатики по теме "Кодирование звука".

    дипломная работа [351,4 K], добавлен 26.04.2011

  • Определение программного модуля. Принципы использования dll-библиотеки. Преимущества и недостатки использования dll-библиотек. Описание коэффициентов моделей. Разработка структуры классов. Реализация библиотеки классов в среде разработки MS Visual Studio.

    дипломная работа [676,6 K], добавлен 16.06.2015

  • Особенности работы с библиотеками. Создание и удаление библиотек, страниц и элементов. Выбор размера чертежа и установка рамки, режим печати. Создание списка элементов. Экспорт чертежей в файлы других форматов. Клавиатурные комбинации программы sPIan 5.0.

    реферат [2,7 M], добавлен 30.10.2011

  • Создание программного модуля, выполненного на языке программирования VBA (Visual Basic for Applications) и позволяющего во введенном массиве символов удалить все повторные вхождения этих символов. Разработка пользовательского интерфейса. Код программы.

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

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

    дипломная работа [1,0 M], добавлен 09.08.2016

  • Структурная диаграмма программного модуля. Разработка схемы программного модуля и пользовательского интерфейса. Реализация программного модуля: код программы; описание использованных операторов и функций. Вид пользовательской формы с заполненной матрицей.

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

  • Описание разрабатываемой программы с точки зрения пользователя и программиста. Поэтапная разработка программной системы. Создание базы данных в Access. Разработка структуры классов. Создание структуры для хранения данных. Проектирование интерфейса.

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

  • Описание пакета прикладной программы Net Beans 8.1. Разработка пользовательского интерфейса апплета. Создание рамочных окон на базе фреймов библиотеки java.swing. Изменение цвета текстовых данных. Проектирование и создание инфологической модели апплета.

    контрольная работа [1,8 M], добавлен 11.07.2016

  • Создание приложения, которое на вход получает компьютерную структуру, обрабатывает ее и выводит на экран. Краткое описание используемых пространств имен и классов. Файлы программного модуля Beta. Пример его работы, порядок подключения к Веб-странице.

    дипломная работа [1,3 M], добавлен 06.07.2015

  • Написание программы вывода графика функции с помощью точек и линий, модификация программы. Программа вывода каркаса вращающегося тора относительно своей оси с одновременным движением по заданной траектории. Создание эффекта сползания текстуры с цилиндра.

    контрольная работа [433,2 K], добавлен 01.12.2009

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