Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаба №2 МОЭВМ.doc
Скачиваний:
14
Добавлен:
01.05.2014
Размер:
293.38 Кб
Скачать

Кафедра МОЭВМ

Дисциплина «Объектно-ориентированное программирование»

Отчет

по лабораторной работе № 2 часть 1

Основные проектные решения

Выполнил

Факультет КТИ

Группа № 5351

Руководитель Смольянинов А.В

Санкт-Петербург

2017

1.1 Постановка задачи: № задания: 5.48

1.2. Объектно-ориентированный анализ задания

Основным объектом, о котором идет речь в задании является изображение шурупа с полукруглой головкой и узким шлицем (см. рис. 1.2.1). Данные изображения, согласно заданию, представляются в виде головки (см. рис. 1.2.2), тела с резьбой, представленной набором отрезков (см. рис. 1.2.3), шлица, представленного отрезком прямой, который находится внутри полукруга и на оси винта, и острия (см. рис. 1.2.4). «Шлиц» задается в виде отрезка и для его представления будем использовать объект «Шлиц», как атрибут объекта головка. Такое представление целесообразно, т.к. «Шлиц» непосредственно связан с головкой.

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

Тело представляет собой прямоугольник. Так как этот прямоугольник (тело) в дальнейшем нам придётся двигать и стыковать его с остальными частями шурупа, его представление удобно задать точкой середины верхней стороны и двумя его измерениями. Так как тело содержит и резьбу, заданную (по заданию) в виде отрезков, с концами на соответствующих сторонах прямоугольника (тела), то её удобно представить как атрибут тела, в виде линейного однонаправленного списка, в котором будет храниться каждый отрезок резьбы. Шаг резьбы будет задаваться количеством резьбовых рисок на теле. Наклон резьбы будет зависеть от шага. Т.е. наклон отрезков резьбы будет таков, что шуруп будет вкручен за число оборотов, равное числу резьбовых рисок. Следовательно, необходимы объекты «линейный список» и «элемент списка».

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

Шлиц представляет собой отрезок, заданный 2-мя точками (начало и конец).

Головка, тело, остриё, последовательность резьбовых отрезков и шлиц определяет объект “изображение”. Также объект изображения Шурупа представим линейным однонаправленным списком характерных точек (см. 1.2.1) Pxn(n=1..8), задающих габариты шурупа и точки соединения его частей. Представление шурупа при помощи списка характерных точек позволяет легко: отследить положение шурупа, выполнить над ним соответствующие (описаны ниже) операции и перемещать его в пространстве, контролируя непересекаемость с другими объектами(шурупами) на плоскости.

Набор изображений шурупа должен быть представлен также в виде списка. Так как нам необходимо предусмотреть возможность вхождение любого изображения набора в различные поднаборы целесообразно использовать мультисписок для его представления. Шаблонный объект «Мультисписок» был разработан в предыдущей лабораторной работе. Отличия мультисписка будет заключатся в том, что он будет состоять из основного списка – это набор всех шурупов и поднаборов: первый – выкрученные шурупы, второй – закрученные шурупы. При изменении состояния (вкручен/выкручен) «Шуруп» будет переходить в соответствующее поднаборы. Таким образом «Мультисписок» будет содержать исходный набор шурупов и поднаборы закрученных и незакрученных шурупов. Такое представление нам позволит легко понять какие шурупы мы уже использовали, какие ещё нет, и какие у нас вообще есть и удовлетворить требованиям задания.

Основные действия, которые должны выполнятся с объектом «изображение» согласно заданию, - это формирование поднаборов из заданных наборов (закрученные и незакрученные шурупы), перемещение шурупа, и «вкрутить» и «выкрутить» шуруп.

Функция переместить шуруп тривиальна и заключается в перемещении характерных точек и выполнении аналогичных функций у объектов «Тело», «Головка», «Шлиц» и «Остриё»

Рассмотрим семантику функций «вкрутить» и «выкрутить» шуруп и связь этих функций с функциями объектов «Тело», «Головка» и «Остриё». Во-первых, при вкручивании или выкручивании изменяется признак того, вкручен или выкручен шуруп на противоположный. Шуруп будет вкручиваться или выкручиваться полностью и, так как у нас резьба устроена таким образом, что при полном вкручивании/выкручивании шуруп сделает целое количество полуоборотов, то внешне ничего не изменится, а, во-вторых, изменятся только координаты характерных точек(т.е. они соответствующей функцией объекта «Изображения» передвинутся вверх/вниз на высоту «Тела» шурупа. В-третьих, изменятся координаты «Головки», «Шлица», «Тела» и «Острия» - эти изменения будут производиться так же соответствующими функциями перемещения (на высоту «Тела») у каждого этого объекта.

Опишем алгоритмы этих функций:

Суть функций выкрутить и вкрутить заключается в изменении координат объекта «Шурп» по вертикальной оси. Итак, при вкручивании шурупа происходит смещение координат всех его частей вниз на длину тела и высоту острия, т.е. на Ht+Ho(см. рис. 1.2.1), а при выкручивании все эти координаты смещаются в противоположном направлении на аналогичное расстояние. Смещение происходит при помощи функций перемещения, существующих для каждой части объекта «Шуруп», целью которых является перемещение на плоскости всех точек соответствующим образом.

Основные действия, которые должны выполнятся с объектом «набор изображений»,согласно заданию, - это включение/исключение определённого шурупа в соответствующий поднабор и перемещение всех шурупов.

Алгоритм включения/исключения определённого шурупа в соответствующий поднабор: при формировании набора шурупов (на основе мультисписка) будет происходить автоматическое включение каждого из них в соответствующий поднабор (вкрученных либо выкрученных шурупов) При вкручивании шурупа в наборе будет произведено извлечение его из поднабора выкрученных шурупов и помещение в поднабор вкрученных шурупов. А, соответственно, при выкручивании шурупа в наборе будет произведено извлечение его из поднабора вкрученных шурупов и помещение в поднабор выкрученных шурупов.

Таким образом, мы можем выделить следующие объекты:

1) Точка;

2) Отрезок;

3) Головка;

4) Шлиц;

5) Тело;

6) Остриё

7) Элемент списка;

8) Линейный список;

9) Изображение;

10) Набор изображений;

Математические модели объектов

Для построения модели используется декартова система координат.

О

Hs – длина шлица

бозначения:

W – ширина прямоугольника (тела)

R – радиус полукруга (головки)

P1 (x1, y1) – координаты центра полукруга (головки)

P2 (x2, y2) – координаты середины верхней стороны шурупа

P3 (x3, y3)

Ht – высота прямоугольника (тела)

P4 (x4, y4) – координаты основания равнобедренного треугольника (острия)

)

P5 (x5, y5) – координата вершины равнобедренного треугольника (острия)

)

Ho – высота равнобедренного треугольника(острия)

Ps1(xs1, ys1), Ps2(xs2, ys2) – координаты концов отрезка (шлица)

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

  • х1=х2 и у1=у2.

  • 2*R>W>0

Так как основание равнобедренного треугольника острия совпадает с нижним основанием прямоугольника тела, то:

  • х2=(х4-x3)/2 и у2=(y4-y3)/2 +Ht

Соотношение для вершины треугольника (острия) будет выглядеть следующим образом:

  • x5 = (x3+x4)/2 иy5 = (y3+y4)/2

Так как все составные части симметричны в шурупе должны быть симметричны относительно центральной оси, то:

  • х1=х2=(х4-x3)/2 и у1=у2=(y4-у3)+Ht

Так как шлиц расположен внутри полукруга и находится на оси винта, то координаты шлица должны быть:

  • хs1=xs2=x1 иys1=y2+R;ys2=y2+Hs-R

Длина шлица не может превысить радиус головки:

  • Hs<=R,

И этот шлиц должен находиться на оси шурупа

  • xs1=xs2=x1; ys1=y1+R; ys2=ys1-Hs

Математические модели действий вкрутить и выкрутить:

Состояние объектов после вкручивания (изменения касаются только координат):

  • xs1 = xs2; ys1 = ys1 – Ht – Ho; ys2 = ys2 – Ht – Ho;

  • x1 = x1; y1 = y1 – Ht – Ho;

  • x2 = x2; y2 = y2 – Ht – Ho;

  • x3 = x3; y3 = y3 – Ht – Ho;

  • x4 = x4; y4 = y4 – Ht – Ho; y4 = y4 – Ht – Ho;

  • x5 = x5; y5 = y5 – Ht – Ho; y5 = y5 – Ht – Ho;

Состояние объектов после выкручивания(изменения касаются только координат):

  • xs1 = xs2; ys1 = ys1 + Ht + Ho; ys2 = ys2 + Ht + Ho;

  • x1 = x1; y1 = y1 + Ht + Ho;

  • x2 = x2; y2 = y2 + Ht + Ho;

  • x3 = x3; y3 = y3 + Ht + Ho;

  • x4 = x4; y4 = y4 + Ht + Ho; y4 = y4 + Ht + Ho;

  • x5 = x5; y5 = y5 + Ht + Ho; y5 = y5 + Ht + Ho;