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

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

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

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

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

Рисунок 2.15 – Варианты сплайнов, когда нет необходимости поиска точек-маркеров на прямых участках

2.4.4 Аппроксимация кривой векторами

Суть данного алгоритма заключается в отыскании и построении на кривой векторов, начало и конец которых, совпадают с точками на кривой Безье. Для построения векторов в количество N, достаточно лишь знать координаты точек на кривой Безье в количестве N+1. Используя простые математические формулы достаточно просто найти приращение координат по оси X - deltX и по оси Y- deltY, длину вектора- L и угол его наклона - . Пример аппроксимации кривой десятью векторами представлен на рисунке 2.16.

Рисунок 2.16 – Аппроксимация векторами

На рисунке 2.16 видно, что мы не избавились от разной длины полученных векторов. И разбив каждый вектор на десять равных отрезков, мы не получим сто равных между собой отрезков. Это позволяет думать, что данный метод ничем не отличается от метода аппроксимации с использованием алгоритма де Кастельжо. Однако данный метод имеет отличительное достоинство. Используя длину векторов и угол их наклона, можно использовать их, в качестве направ-ления для движения точек по сплайну и отказаться от аппроксимации кривой отрезками равной длины.

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

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

Для этого произведем нумерацию векторов, учитывая количество сегментов сплайна. Таким образом, имея сплайн, состоящий из трех сегментов, получим тридцать векторов с нумерацией от 1 до 29. Причём вектора 1-9 будут принадлежать первому сегменту, 10-19 второму сег-менту и 20-29 третьему сегменту. За назначения векторам соответ-ствующих им порядковых номеров отвечает следующие строчки:

var i:integer;

begin

for i:=1 to (10*strtoint(Edit1.Text)) do begin //1*

Vec[i].X:=PromDat[i].RealX; //2*

Vec[i].Y:=PromDat[i].RealY;

Vec[i].L:=PromDat[i].L;

Vec[i].F:=PromDat[i].arc;

Vec[i].Dx:=PromDat[i].DeltX;

If i<>(10*strtoint(Edit1.Text)) then begin //3*

Vec[i].Next:=i+1; //4*

end

else Vec[i].Next:=0; //5*

end;

//1*Для счетчика i от 1 до (10 * количество кривых)

//2*присваиваем векторам рассчитанные ранее данные из массива PromDat типа TDat.

//3*Если счётчик i не дошел до конца, то..

//4*каждому вектору присваиваем номер следующего вектора,

//5*иначе следующим вектором присваивается несуществующий вектор 0 т.е пустой вектор.

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

if Vec[S[ii].NVec].Next<>0 then begin //1*

S[ii].NVec:=S[ii].NVec+1; //2*

S[ii].L:=Vec[S[ii].NVec].L; //3*

S[ii].X:=0; //4*

S[ii].Y:=0;

end;

//1*Если номер следующего вектора не равен 0, то…

// 2*увеличиваем номер вектора для текущей точки на единицу,

//3*присваиваем значение длины следующего вектора,

//4*обнуляем переменные смещения по оси Х и Y соответственно.

В дальнейшем нам потребуется остановиться подробнее на векторах при движении модели по сплайну, поэтому введем такое поня-тие как опорные вектора. Опорными считаются вектора, на которых в определенный момент времени находятся передняя и задняя тележки.

2.5 Использование баз данных

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

Предполагается, что пользователь, который построил план станции или перегона с помощью программного продукта Autodesk AutoCAD, должен импортировать данные о каждом сплайне в базу данных. Затем, для работы имитационной модели, необходимо извлечь данные из базы, подключив их непосредственно к среде разработки Borland Delphi.

Для создания баз данных используется программа IBExpert, кото-рая позволяет пользователю легко создавать таблицы, расставлять свя-зи между ними, не имея практических навыков работы с языком SQL.

Рисунок 2.17 – Структура базы данных

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

Рисунок 2.18 – Таблица OPOR_POINT базы данных

В данной таблице X0-X3, Y0-Y3 координаты опорных точек кубических сплайнов по оси X и Y соответственно. Поле ID служит для нумерации сплайнов. Для создания автоматической нумерации данному полю присваивается первичный ключ (Primary key) PK_OPOR_POINT, используя который, к этому полю добавляется триггер OPOR_POINT_BI и генератор GEN_OPORA_POINT_ID.

Для хранения данных об аппроксимации сплайнов используется таблица POINT, которая представлена на рисунке 2.19.

Рисунок 2.19 – Таблица POINT базы данных

В таблице POINT в полях X и Y хранятся координаты начала векторов, в поле L хранится длина соответствующего вектора, а в поле NUM содержится номер сплайна, к которому данный вектор принадле-жит. Поле ARC содержит арктангенс угла наклона вектора. Поле ID, так же как и в случае с первой таблицей, служит для нумерации всех векторов по порядку. Данному полю соответствует первичный ключ PK_POINT, триггер POINT_BI и генератор GEN_POINT_ID.

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

Рисунок 2.20 – Заголовок таблицы VAGON базы данных

В полях PER_T_X и PER_T_Y таблицы VAGON содержится информация о координатах передней тележки вагона. В полях ZAD_T_X и ZAD_T_Y хранятся данные о координатах задней тележки вагона. Поля VAG_C_X и VAG_C_Y необходимы для хранения координат центра подвижной единицы. Поле YGOL содержит арктангенс угла поворота подвижной единицы. Поле ID отвечает за нумерацию подвижных единиц. Для данного поля создан триггер VAGON_BI и генератор GEN_VAGON_ID. В поле VECTOR заносятся данные о векторе, на котором находится подвижная единица. Для этого поля создан внешний ключ (Foreign key). С помощью данного ключа поле VECTOR таблицы VAGON связано с полем ID таблицы POINT.

Модель базы данных приведена на рисунке 2.21.

Рисунок 2.21 – Модель базы данных

2.6 Учёт соединений сплайнов

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

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

Для избегания возникновения подобных ситуаций предлагается помечать узловые точки (места соединения сплайнов) непосредственно в базе данных. Если пользователь захочет поменять положение узловой опорной точки, которая будет являться последней в предыдущем сплай-не и первой в следующем, то будет проверяться условие возможности постановки точки в заданное место. Если исходящие и входящие векто-ра в узловую точку будут лежать на одной прямой, т.е угол между ними будет равен нулю, то пользователь может поставить в данном месте эту узловую точки. В противном случае программа будет выдавать преду-преждение о невозможности нахождения узловой точки там, где захотел поставить её пользователь, и будет предлагать переместить точку в другое место.

2.7 Сплайны в стрелочных переводах

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

При моделировании железнодорожных путей сплайнами необхо-димо учесть возможность построения стрелочных переводов. Пример такого построения представлен на рисунке 2.21.

Рисунок 2.21 – Пример модели стрелочного перевода сплайнами

Как видно из рисунка 2.21 стрелка состоит из трех сплайнов: AS, SB, SC. Узловой точкой для трех этих сплайнов является точка S. Данную точку необходимо помечать в базе данных, как узловую точку стрелочного перевода. Отличие от простой точки соединения сплайнов будет состоять в том, что для заданного соединения будут создана отдельная структура данных, описывающая порядок соединения сплай-нов в данной точке и движения по заданному стрелочному переводу.

Очевидно, что в если стрелка в нормальном (плюсовом) положении, то движение модели поезда будет осуществляться по сплай-нам AS и SC с соединением в точке S. Если же стрелка находится в переведенном положении (минусовом), то в точке S необходимо соединить сплайны AS и SB. Движение поезда по кривой, состоящей только из сплайнов SC и SB невозможно. Следовательно, необходимо учитывать это и не допускать соединения сплайнов SC и SB между собой.

Для того, что бы описать соединение сплайнов в стрелочных переводах необходимо взять узел перевода и описать все возможные пути движения через него. На рисунке 2.21 эти пути представлены стрелками и названиями. Каждое направление имеет обозначение: вле-во – Left, вправо – Right, вверх – Up. Существует так же направление вниз – Down, которое на рисунке 2.21 не указанно. Для различных вариантов стрелочных переводов могут использоваться различные наборы направлений. Движения по заданному стрелочному переводу возможны только в направлениях: Left-Up и Left-Right. Представив эти направления множествами, и объединив их, получим, что направление Left (или сплайн AS) является общим для заданных направлений. Это означает, что по направлению Left будут ориентированы остряки стрелочного перевода. Следовательно, сплайн, соединяющийся со сплайном AS и имеющий оптимальное соединение, будет являться по-ложительным направлением по стрелке, а сплайн, имеющий неоптима-льное соединение со сплайном AS будет сориентирован по отрицатель-ному направлению движения.

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

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

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