Бугреев ПЗ (1231492), страница 7

Файл №1231492 Бугреев ПЗ (Разработка тренажерного комплекса СЖАТ на базе имитационного моделирования. Построение железнодорожного участка с помощью сплайнов) 7 страницаБугреев ПЗ (1231492) страница 72020-10-06СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 7)

2.10.2 Особенности работы GLScene и ODE

2.10.2.1 Библиотека GLScene

В GLScene в отличии от технологии Delphi VCL некоторые объекты во время проектирования не отображаются в реальном масштабе времени. Согласно соглашениям об именах Delphi каждый класс GLScene начинается с префикса TGL. GLScene, как и другие библиотеки Delphi, имеет строгую иерархию. Каждый объект является потомком более общего объекта и содержит в себе некоторые новые свойства, по сравнению с родительским объектом. Этот более общий объект также является потомком еще более общего и т. д. Эти отношения называют parent <-> child отношениями (буквально – родитель <-> ребенок). Каждый объект может иметь бесконечное множество потомков и только одного родителя. Вершина дерева объектов – TGLScene, базовый класс, все остальные объекты – его потомки. В иерархии GLScene есть одна очень интересная деталь. Объект всегда имеет родителя и владельца. Причем родитель и владелец не то же самое. Владелец должен быть всегда TGLScene, потому, что регистрируется объект именно здесь. Родитель же может быть другим объектом или классом TGLScene.Objects. На базовом уровне в GLScene есть два объекта: компоненты (Components) и объекты сцены (Scene objects). Компоненты расположены в четырех вкладках компонентов. Могут быть помещены на форме и доступны только в инспекторе объектов (object inspector). Их можно рассмотреть как «сервисные компоненты», которые нужны для обслуживания сцены. Объекты сцены могут быть добавлены, отредактированы или удалены в редакторе сцены (Scene editor). Объекты сцены фактически представляют собой все содержание отрисовываемой (rendering) сцены. Объекты сцены также отображены в инспекторе объектов, но предпочтительнее работать с ними именно через редактор сцены. Редактор сцены – это сердце GLScene. Чтобы открыть его необходимо сначала поместить на форму объект TGLScene. По двойному щелчку на нем открывается редактор сцены. Здесь можно добавить, выбрать, переместить или удалить объекты сцены, которые представлены с помощью древовидной структуры. Здесь также можно видеть эффекты всех объектов и их поведение.

Рисунок 2.26 – Наборы компонентов GLScene

Библиотека GLScene поддерживает и работает с двумя типами движков. DCE движок является собственным движком библиотеки и позиционируется как наиболее простой и малофункциональный инструмент создания движущихся моделей. ODE движок более функции-онален и распространен. Рассмотрим некоторые особенности работы с движком ODE.

2.10.2.2 Физика жестких тел библиотеки ODE

В библиотеке ODE присутствуют возможность создания различных жестких тел и типов сочленений между ними. Создание жестких тел происходит по вызову функции:

dBodyID dBodyCreate (dWorldID);.

В данном случае создается тело в заданном мире с массой по умолчанию и в позиции (0,0,0). Функция возвращает ID тела. Удаление жесткого тела происходит по вызову функции:

void dBodyDestroy (dBodyID);.

В данном случае уничтожается тело. Все сочленения (joints), которые были присоединены к телу, переводятся в неопределенное состояние (т.е. отсоединяются и не принимают участия в дальнейшей симуляции, но не удаляются). Так же, различным жестким телам можно задать массу, скорость и начальную позицию.

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

-класс сфера;

-класс прямоугольный параллелепипед;

-класс плоскость;

-класс цилиндр с верхушкой;

-класс луч;

-класс набор треугольников;

-класс трансформации геометрии.

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

Создание различных геометрий описывается функциями:

1) dGeomID dCreateSphere (dSpaceID space, dReal radius);

Функция создает геометрию сфера (sphere) заданного радиуса и возвращает его ID. Если space не равен нулю, то сфера вставляется в это пространство. Точкой расположения (point of reference) является центр сферы.

2) dGeomID dCreateBox (dSpaceID space, dReal lx, dReal ly, dReal lz);

Функция создает геометрию прямоугольный параллелепипед (box) с длинами сторон (lx,ly,lz) и возвращает его ID. Если space не равен нулю, то происходит вставка в это пространство. Точкой расположения является центр прямоугольного параллелепипеда.

3) dGeomID dCreatePlane (dSpaceID space, dReal a, dReal b, dReal c, dReal d);

Функция, создающая геометрию плоскость (plane) с заданными параметрами и возвращает ее ID. Если space не равен нулю, то происходит вставка в это пространство.

4) dGeomID dCreateCCylinder (dSpaceID space, dReal radius, dReal length);

Данная функция создает геометрию цилиндр с верхушкой (capped cylinder) с заданными параметрами и возвращает его ID. Если space не равен нулю, то происходит вставка в это пространство.

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

5) dGeomID dCreateRay (dSpaceID space, dReal length);

Функция, создающая геометрию луч заданной длины и возвращает его ID. Если space не равен нулю, то происходит вставка в это пространство. Луч (ray) отличается от всех классов геометрий тем что он не представлен твердым объектом (solid object). Он представляет собой бесконечную тонкую линию, начинающеюся в точке расположения геометрии и имеющую направление вдоль локальной оси геометрии Z.

6) dTriMeshDataID dGeomTriMeshDataCreate();

void dGeomTriMeshDataDestroy (dTriMeshDataID g);

Данные функции создают и уничтожают dTriMeshData объект вместе с расположенными данными пользователя. Набор треугольников (triangle mesh) (TriMesh) представляет собой произвольный набор треугольников[5].

Класс трансформации геометрии значительно отличается от вышеописанных классов. Задача его применения заключается в возможности изменять стандартные классы, в соответствии с различными задачами. Так, например, с помощью данного класса можно легко изменить центр масс сферы, или повернуть цилиндр так, что бы его ось стала отличной от оси по умолчанию.

Зачастую, в программах создаются сложные объекты, которые состоят из нескольких стандартных геометрий ODE. Такие объекты именуются составными. Рассмотрим объект в виде железнодорожного вагона, имеющего колесные тележки, раму и кузов. Если предполагать, что данный объект жесткий, то необходимо создавать его из отдельных жестких тел стандартной геометрии. Такое представление может сказаться на скорости определения столкновений, потому что в ODE нет отдельного класса геометрии для представления сложных тел. Однако если объект создается как составной, то библиотека ODE позволяет управлять таким объектом так же просто, как и объектом стандартной геометрии.

Тем не менее, есть одно предостережение: при создании составных объектов необходимо учитывать все точки контакта объекта и следить за тем, что бы они не находились бы близко друг к другу. Например, рассмотрим стол, сделанный из прямоугольного параллеле-пипеда в качестве верхней части и прямоугольных параллелепипедов в качестве ножек. Если ножки соединены с верхом и стол лежит на боку, то точки контакта для прямоугольных параллелепипедов могут совпасть в том месте, где ножки соединены с верхом. ODE не содержит специальной обработки совпадающих точек контакта, поэтому такая ситуация может привести к многочисленным ошибкам и странному поведению.

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

2.10.2.3 Сочленения жестких тел в библиотеке ODE

Создание сочленений между телами происходит с помощью функции:

dJointID dJointCreate*** (dWorldID, dJointGroupID); ,

где вместо *** указывается тип сочленения. Присоединение сочленений осущствляется с помощью функции:

void dJointAttach (dJointID, dBodyID body1, dBodyID body2);.

Данная функция присоединяет сочленение к телам. Если сочленение уже куда-то присоединено, то сначала оно будет отсоединено от старых тел. Для того чтобы присоединить сочленение к одному телу надо установить body1 или body2 в ноль - ноль значит статическое окружение. Установка обоих этих параметров в ноль переведет сочленение в неопределенное состояние, и оно не будет принимать участия в симуляции. Типы сочленений представлены на рисунке 2.27.

Рисунок 2.27 – Типы сочленений ODE

За создание сочленение «шарик в разъеме» (ball-and-socket) отвечает функция:

void dJointSetBallAnchor (dJointID, dReal x, dReal y, dReal z);

Она устанавливает точку соединения (anchor) сочленения. Сочленение будет пытаться удержать два тела относительно этой точки. Входное значение дается в мировых координатах.

За сочленение «сгибание» (hinge) отвечают две функции:

void dJointSetHingeAnchor (dJointID, dReal x, dReal y, dReal z);

void dJointSetHingeAxis (dJointID, dReal x, dReal y, dReal z);

Первая устанавливает точку сгиба (hinge anchor), вторая ось сгиба (hinge axis).

Функция, устанавливающая ось скольжения (slider axis) в сочленении «скольжение»:

void dJointSetSliderAxis (dJointID, dReal x, dReal y, dReal z);.

«Универсальное» (universal) сочленение похоже на сочленение шарик в разъеме, y которого ограничена степень свободы вращения.

Определив ось 1 для тела 1 и ось 2 для тела 2 перпендикулярно друг другу, их перпендикулярность будет сохраняться. Другими словами можно сказать, что тела будут сохранять перпендикулярную ориентацию относительно своих осей. Функции универсального сочленения:

void dJointSetUniversalAnchor (dJointID, dReal x, dReal y, dReal z);

void dJointSetUniversalAxis1 (dJointID, dReal x, dReal y, dReal z);

void dJointSetUniversalAxis2 (dJointID, dReal x, dReal y, dReal z);

Они устанавливают универсальное соединение (universal anchor) и параметры осей. Оси 1 и 2 должны быть перпендикулярны друг другу.

Сочленение «сгибание-2» (hinge-2) похоже на два сочленения соединенных последовательно, с разными осями сгибания. Одна ось позволяет телу поворачиваться, а вторая вращаться.

Функции сочленения «сгибание-2»:

void dJointSetHinge2Anchor (dJointID, dReal x, dReal y, dReal z);

void dJointSetHinge2Axis1 (dJointID, dReal x, dReal y, dReal z);

void dJointSetHinge2Axis2 (dJointID, dReal x, dReal y, dReal z);

Они устанавливают параметры осей и точки соединения. Оси 1 и 2 не должны лежать на одной прямой.

Фиксированное сочленение (fixed joint) сохраняет фиксированную позицию и ориентацию тел, или тела и статического окружения. Функция такого сочленения: void dJointSetFixed (dJointID);

Вызов этой функции фиксирует сочленение в текущем положении и ориентации друг относительно друга.

Сочленение «контакт» (contact) предотвращает тело 1 и 2 от взаимного проникновения в точке контакта. Контактное сочленение может имитировать трение в точке контакта, прилагая специальные силы в двух направлениях: перпендикулярных нормали.

Когда создается контактное сочленение, должна быть заполнена структура dContact. Она определена следующим образом:

struct dContact {dSurfaceParameters surface; dContactGeom geom; dVector3 fdir1;}; ,

где geom - подструктура, которая устанавливается функцией определения столкновений;

fdir1 - вектор "первого направления трения" который определяет направление, вдоль которого должна быть приложена сила трения. Он должен быть в единицах масштаба(unit length) и перпендикулярен нормали контакта (т.е. быть касательной к поверхности контакта);

surface - подструктура, которая настраивается пользователем. Ее члены определяют свойства взаимодействующих поверхностей.

«Угловой двигатель» (AMotor) позволяет контролировать относительную угловую скорость двух тел. Угловая скорость может быть контролируема по трем осям, позволяя вращать и останавливать вращение вокруг этих осей. В основном это полезно в шариковом сочленении (которое имеет неограниченную степень свободы), когда надо ограничить степень свободы. Для использования AMotor в шариковом сочленении надо просто присоединить его к тем же телам что и шариковое сочленение[5].

Из представленных типов сочленений для сочленений вагонов наиболее предпочтительно совмещения двух соединений «шарик в разъеме». Оно наиболее точно описывает механизм автосцепки, которой применяется на железных дорогах Российской Федерации. Пример замещения механизма автосцепки таким сочленением представлен на рисунке 2.28.

Рисунок 2.28 – Механизм автосцепки в сочленении «шарик в разъеме»



2.10.2.4 Коллизионный аппарат ODE

ODE состоит из двух основных компонентов: движка симуляции физики (dynamics simulation engine) и движка определения столкновений (collision detection engine). Движок столкновений дает информацию о форме каждого тела. На каждом шаге симуляции происходит определение того, какие тела коснулись друг друга и информация о точках контакта (contact points) посылается пользователю. Пользователь должен на основании этих данных создать контактные сочленения (contact joints) между телами.

Если два тела коснулись друг друга или если тело коснулось статического окружения, контакт представляется одной или более “точками контакта” (contact points). Каждая точка контакта представлена соответствующей структурой dContactGeom:

struct dContactGeom {

Характеристики

Список файлов ВКР

Разработка тренажерного комплекса СЖАТ на базе имитационного моделирования
256-Бугреев Александр Сергеевич
Свежие статьи
Популярно сейчас
Зачем заказывать выполнение своего задания, если оно уже было выполнено много много раз? Его можно просто купить или даже скачать бесплатно на СтудИзбе. Найдите нужный учебный материал у нас!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
7033
Авторов
на СтудИзбе
260
Средний доход
с одного платного файла
Обучение Подробнее