ООП_ЛР_1_2012_Траектория

ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ
Лабораторная работа №1

Цель. Получение навыков разработки приложений на языке программирования С++ в системе программирования RAD (Rapid Application Development – быстрая разработка приложений) Studio for Microsoft Windows.
Тема. Программирование векторной графики.
Описание приложения. Приложение состоит из двух областей: рабочей области и области элементов управления (рис. 1).
В рабочей области приложения расположена геометрическая фигура. В последующих лабораторных работах эта геометрическая фигура будет рассматриваться как траектория движения другой геометрической фигуры, поэтому здесь и далее рассматриваемая фигура называется траекторией.

Общий вид приложения


Рис. 1

В области элементов управления расположен «движок». Пользователь имеет возможности:
с помощью «движка» «Размер траектории» изменить размер траектории;
путем захвата и перемещения мышью края формы изменить размер формы;
завершить работу приложения.
Задание. Разработать приложение на языке программирования С++ в системе программирования RAD Studio for Microsoft Windows.
Требования:
1. Геометрический центр траектории всегда должен совпадать с центром рабочей области формы.
2. Траектория не должна выходить за пределы рабочей области формы.
3. При уменьшении линейных размеров траектории масштаб не должен становиться отрицательным (траектория не должна «выворачиваться наизнанку»).
4. При изменении размеров формы масштаб прорисовки траектории должен пропорционально измениться.
5. Для моделирования траектории в программе предусмотреть отдельный класс, размещенный в отдельном программном модуле.
6. Необходимо использовать правила именования идентификаторов.
7. В разделе public описания класса «Траектория» должны находиться только описания свойств (property) и методов.
Необходимо точно выполнять задание, при сомнениях - консультироваться с преподавателем.
Дополнительные задания для любознательных студентов.
Предусмотреть возможность поворота траектории по часовой стрелке и (или) против часовой стрелки. Управление поворотом должен осуществлять пользователь с помощью дополнительного «движка».
Предусмотреть возможность произвольного изменения положения центра траектории внутри рабочей области приложения. Траектория не должна выходить за пределы рабочей области формы. Управление перемещением центра траектории можно реализовать с помощью «движков» (по оси «X» и оси «Y») или с помощью устройства «мышь».
Полагаясь на собственную фантазию предусмотреть любые другие приемы манипуляции с приложением.

Варианты заданий приведены в таблице 1.
Варианты траекторий Таблица 1

Номер варианта траектории
Вид траектории
Уравнение траектории
Примечание

1

x = x0 + r * cos((),
y = y0 - r * sin((),
где
x – координата точки по оси x,
y – координата точки по оси y,
( ([13 EMBED Equation.3 1415]– угол,
r – радиус окружности,
x0 – координата центра круга,
y0 – координата центра круга.
Траектория является полукругом

2

x = x0 + r * cos((),
y = y0 - r * sin((),
где
x – координата точки по оси x,
y – координата точки по оси y,
( ([13 EMBED Equation.3 1415]– угол,
r – радиус окружности,
x0 – координата центра круга,
y0 – координата центра круга.
Траектория является полукругом

3

x = x0 + r * cos((),
y = y0 - r * sin((),
где
x – координата точки по оси x,
y – координата точки по оси y,
( ([13 EMBED Equation.3 1415]– угол,
r – радиус окружности,
x0 – координата центра круга,
y0 – координата центра круга.
Траектория является полукругом

4

x = x0 + r * cos((),
y = y0 - r * sin((),
где
x – координата точки по оси x,
y – координата точки по оси y,
( ([13 EMBED Equation.3 1415]– угол,
r – радиус окружности,
x0 – координата центра круга,
y0 – координата центра круга.
Траектория является полукругом

5
13 EMBED Visio.Drawing.11 1415
x = x0 + a * cos((),
y = y0 - b * sin((),
где
x – координата точки по оси x,
y – координата точки по оси y,
( ([13 EMBED Equation.3 1415]– угол,
а – размер горизонтальной полуоси,
b – размер вертикальной полуоси,
а < b,
x0 – координата центра эллипса,
y0 – координата центра эллипса.
Траектория является полуэллипсом

6
13 EMBED Visio.Drawing.11 1415
x = x0 + a * cos((),
y = y0 - b * sin((),
где
x – координата точки по оси x,
y – координата точки по оси y,
( ([13 EMBED Equation.3 1415]– угол,
а – размер горизонтальной полуоси,
b – размер вертикальной полуоси,
а > b,
x0 – координата центра эллипса,
y0 – координата центра эллипса.
Траектория является полуэллипсом

7
13 EMBED Visio.Drawing.11 1415
x = x0 + a * cos((),
y = y0 - b * sin((),
где
x – координата точки по оси x,
y – координата точки по оси y,
( ([(-2(] – угол,
а – размер горизонтальной полуоси,
b – размер вертикальной полуоси,
а < b,
x0 – координата центра эллипса,
y0 – координата центра эллипса.
Траектория является полуэллипсом

8
13 EMBED Visio.Drawing.11 1415
x = x0 + a * cos((),
y = y0 - b * sin((),
где
x – координата точки по оси x,
y – координата точки по оси y,
( ([13 EMBED Equation.3 1415]– угол,
а – размер горизонтальной полуоси,
b – размер вертикальной полуоси,
а > b,
x0 – координата центра эллипса,
y0 – координата центра эллипса.
Траектория является полуэллипсом

9

x = x0 + r * cos((),
y = y0 - r * sin((),
где
( ([0 - 2(] – угол,
( = k*(,
k = 2,
r – радиус фигуры Лиссажу,
x0 – координата центра фигуры,
y0 – координата центра фигуры.
Траектория является фигурой Лиссажу

10
13 SHAPE \* MERGEFORMAT 1415
x = x0 + r * cos((),
y = y0 - r * sin((),
где
( ([0 - 2(] – угол,
( = k*(,
k = 3,
r – радиус фигуры Лиссажу,
x0 – координата центра фигуры,
y0 – координата центра фигуры.
Траектория является фигурой Лиссажу

11
13 EMBED Visio.Drawing.11 1415
x = x0 - 13 EMBED Equation.3 1415,
y = y0 - b * sin((),
где
a – период,
b – амплитуда,
( ([0 - 2(] – угол,
x0 – координата правого конца фигуры,
y0 – координата горизонтальной оси.
Траектория является синусоидой

12
13 EMBED Visio.Drawing.11 1415
x = x0 - a * sin((),
y = y0 + 13 EMBED Equation.3 1415,
где
a – амплитуда,
b – период,
( ( [0 - 2(] – угол,
x0 – координата вертикальной оси,
y0 – координата верхнего конца фигуры.
Траектория является синусоидой

13
13 EMBED Visio.Drawing.11 1415
x = x0 - 13 EMBED Equation.3 1415,
y = y0 + b * sin((),
где
a – период,
b – амплитуда,
( ( [13 EMBED Equation.3 1415 - 13 EMBED Equation.3 1415] – угол,
x0 – координата правого конца фигуры,
y0 – координата горизонтальной оси.
Траектория является косинусоидой

14
13 EMBED Visio.Drawing.11 1415
x = x0 + a * cos((),
y = y0 + 13 EMBED Equation.3 1415,
где
a – амплитуда,
b – период,
( ( [13 EMBED Equation.3 1415 - 13 EMBED Equation.3 1415] – угол,
x0 – координата вертикальной оси,
y0 – координата верхнего конца фигуры.
Траектория является косинусоидой

15
13 EMBED Visio.Drawing.11 1415
x = x0 + r * (k-1)(cos(()+13 EMBED Equation.3 1415),
y = y0 + r * (k-1)(sin(()-13 EMBED Equation.3 1415),
где
( ([0 - 2(] – угол,
k=13 EMBED Equation.3 1415=3,
R - радиус неподвижной окружности,
r – радиус катящейся окружности,
x0 – координата центра фигуры,
y0 – координата центра фигуры.
Траектория является гипоциклоидой

16
13 EMBED Visio.Drawing.11 1415
x = x0 + r * (k-1)(cos(()+13 EMBED Equation.3 1415),
y = y0 + r * (k-1)(sin(()-13 EMBED Equation.3 1415),
где
( ([0 - 2(] – угол,
k=13 EMBED Equation.3 1415= 4,
R - радиус неподвижной окружности,
r – радиус катящейся окружности,
x0 – координата центра фигуры,
y0 – координата центра фигуры.
Траектория является гипоциклоидой

17
13 EMBED Visio.Drawing.11 1415
x = x0 + r * (k-1)(cos(()+13 EMBED Equation.3 1415),
y = y0 + r * (k-1)(sin(()-13 EMBED Equation.3 1415),
где
( ([0 - 2(] – угол,
k=13 EMBED Equation.3 1415=5,
R - радиус неподвижной окружности,
r – радиус катящейся окружности,
x0 – координата центра фигуры,
y0 – координата центра фигуры.
Траектория является гипоциклоидой

18
13 EMBED Visio.Drawing.11 1415
x = x0 + r * (k-1)(cos(()+13 EMBED Equation.3 1415),
y = y0 + r * (k-1)(sin(()-13 EMBED Equation.3 1415),
где
( ([0 - 2(] – угол,
k=13 EMBED Equation.3 1415=6,
R - радиус неподвижной окружности,
r – радиус катящейся окружности,
x0 – координата центра фигуры,
y0 – координата центра фигуры.
Траектория является гипоциклоидой


Примечание. В приведенных уравнениях все углы измеряются в радианах, а все линейные размеры – в пикселах.
Содержание отчета.
Титульный лист.
Текст задания с описанием варианта задания.
Диаграмма классов.
Исходный текст программы.
Результаты работы программы (копия экранной формы приложения).
Отчет представляется в электронном виде. При защите лабораторной работы после зачетной недели отчет должен быть напечатан.
Защита лабораторной работы.
Студент демонстрирует созданный программный продукт. Необходимо заранее подготовить аргументы, показывающие лучшие особенности программы и качество разработки.
Студент демонстрирует степень выполнения задания.
Студент демонстрирует авторство путем ответов на вопросы по исходному тексту программы.
Оценка результатов.
В дисциплинах «Программирование» конечным результатом обучения является приобретение профессиональных навыков разработки программ. Поэтому результаты лабораторных работ напрямую формируют аттестационные баллы.
Отчет считается недействительным при отсутствии диаграммы классов и исходного текста программы, за остальные недочеты снижаются баллы путем применения корректировочных коэффициентов.

Критерии оценки программы

Задание
Оценка (балл)

Нарисована траектория
4

Траектория масштабируется от «движка»
3

Траектория масштабируется при изменении размеров формы
3

Всего
13 =SUM(ABOVE) 141015



Корректировочные коэффициенты при оценке программы

Степень выполнения
Полученные результаты
Коэффициент

1
Нет исходного текста программы
0,0

2
Задание сдается после соответствующей аттестации
0,0

3
Есть исходный текст программы, но нет чистой трансляции
0,2

4
Лабораторная работа сделана не самостоятельно
0,2

5
Имеются динамические ошибки
0,8

6
За каждое невыполненное требование к заданию
0,8

7
Имеются серьезные недоработки.
0,5-0,8

8
Имеются
·Љ°погрешности в работе программы
0,9

9
Программа работает верно, замечания по защите отсутствуют.
1,0

10
В программе реализованы не предусмотренные заданием возможности
1,1

11
Представлено оригинальное решение задачи
1,2


Рекомендуемый срок выполнения и защиты (для очного отделения). Конец сентября.
Обязательный срок выполнения и защиты (для очного отделения). До первой аттестации. Представленная позже этого срока работа аттестационные баллы не получает (см. Положение об аттестации). Представление лабораторной работы в любом виде и в любые сроки является обязательным условием получения зачета по дисциплине «Объектно-ориентированное программирование».


Методические указания
В соответствии с объектно-ориентированной технологией проектирования программных изделий рекомендуется сначала разработать диаграмму классов и только после этого приступать к написанию исходного текста программы.
Рекомендуемые компоненты:
TLabel (раздел Standard) – моделирование надписей,
TTrackBar (раздел Win32) – установка значения («движок»),
TPanel (раздел Standard) – оформление прямоугольной области на экранной форме для размещения объединенных тематически компонентов,
TPaintBox (раздел System) – оформление прямоугольной области на экранной форме преимущественно для целей рисования.
Компонент TForm используется автоматически.
Для моделирования траектории рекомендуется использовать метод базовой точки. Метод базовой точки удобно использовать в случае, когда необходимо обеспечить синхронное изменение положения и размеров изображения вслед за изменениями размеров рабочей области или перемещения рисунка по рабочей области. Изображение фигуры в данном случае всегда рисуется относительно некоторой точки, называемой базовой. Масштабирование траектории осуществляется использованием координатной сетки (рисуется на бумаге при проектировании изображения фигуры). Поясним сказанное на примере (рис. 2).
Пусть на рис. 2 кружок обозначает центр траектории с координатами (X0, Y0). Тогда координата точки 1 будет иметь значение (X0 - 4(, Y0 - 3(), где ( - размер клетки. Координата точки 2 будет вычисляться как (X0, Y0 + 2,5(). Если теперь изменить значение (, то изменится масштаб рисования траектории. Расположение центра фигуры (X0, Y0) задает положение траектории в рабочей области моделирования.
Замечание: расположение осей X, Y координатной сетки на рис.2 соответствует расположению осей X, Y в визуальных компонентах.


Метод базовой точки
13 EMBED Visio.Drawing.11 1415
Рис. 2

4) Любую кривую линию (траекторию) необходимо представить совокупностью отрезков вида
13 EMBED Visio.Drawing.11 1415

Размер и количество отрезков подбираются экспериментально, таким образом, чтобы дискретность линии сделать на экране незаметной. Если размер отрезка сделать очень маленьким, то время рисования может увеличиться до непреодолимых мощностью компьютера величин. Прорисовку линии в языке С++Builder удобно осуществлять методами Polygon(M, k) или Polyline(M, k) стандартного компонента TCanvas, где M – массив координат точек концов отрезков, k – количество используемых точек. В отличие от Polyline(M, k) метод Polygon(M, k) рисует замкнутую ломаную линию, соединяя дополнительным отрезком первую и последнюю точки в массиве M. Координаты точек в массиве M задаются стандартным типом данных TPoint, который определен в модуле Dialogs.hpp системы программирования и представляет собой пару целых чисел изображающих координаты точки X и Y.
5) Рабочую область задачи удобно моделировать компонентом TPaintBox (раздел System), так как замечено, что на этом компоненте прорисовка идет быстрее. В этом случае центром прорисовки траектории будет центр видимой на экране области рассматриваемого компонента.
6) Для реализации пользовательских действий по масштабированию траектории рекомендуется использовать компонент TTrackBar (раздел Win32).
7) Перерисовка клиентской области осуществляется в методе OnPaint класса TForm или класса TPaintBox, событие перерисовки вызывать в программе методом Invalidate() класса TWinControl (класс TForm и класс TPaintBox являются потомками класса TWinControl). В этом случае обработка события OnPaint автоматически начинается с очистки клиентской области формы. Во многих случаях перерисовка формы вызывается автоматически. Например, в последних версиях RAD Studio изменение положения «движка» приводит к возникновению события OnPaint и форма перерисовывается автоматически.
8) При изменении размеров экранной формы нужно синхронно изменять размеры компонентов TPaintBox и TPanel. Для этого удобно использовать событие OnResize класса TForm.

Рекомендуемая последовательность действий
Описание последовательности действий по выполнению лабораторной работы № 1 приводятся из соображений облегчить и ускорить освоение системы программирования RAD Studio. Любознательным студентам, стремящимся дойти до всего самостоятельно, этот раздел можно пропустить. В описании оставшихся лабораторных работ этот раздел отсутствует, однако повторное обращение к приведенному далее описанию может оказаться полезным.
Загрузить систему программирования.
Создать новый проект как приложение с экранной формой.
Создать папку для размещения приложения, название папки должно соответствовать выполняемой работе.
Сохранить проект и модули главной формы с приданием им названий, соответствующих их смыслу. Рекомендуемое правило именования: для имени проектного файла использовать префикс p (например, pOOP_Lab1_Trajectory), для имен программных файлов использовать префикс u (например, uOOP_Lab1_Trajectory).
Изменить свойство Name компонента «экранная форма», используя правила именования идентификаторов (например, frmMain). Запустить программу и добиться отсутствия ошибок.
Разместить на экранной форме компонент TPaintBox. Выделить компонент TPaintBox и изменить значение свойства Name используя правила именования идентификаторов (например, pboxWorkSpace). Запустить программу и добиться отсутствия ошибок.
Разместить на экранной форме компонент TPanel. Отрегулировать свойства Height (высота) и Width (ширина) для размещения на панели компонента TTrackBar. Выделить компонент TPanel и изменить значение свойства Name используя правила именования идентификаторов (например, pnlFControlSpace). Запустить программу и добиться отсутствия ошибок.
Разместить на панели компонент TTrackBar («движок»). С помощью мыши отрегулировать положение и размеры компонента. Изменить значение свойства Name используя правила именования идентификаторов (например, tbarFTrajectorySize). Установить значения свойств Min, Max и Position. Рекомендуется устанавливать значение Position как среднее значение свойств Min и Max (средний размер траектории). Запустить программу и добиться отсутствия ошибок.
Разместить на панели компонент TLabel (название – lblFTrajectorySize). Выделить компонент TLabel и с помощью свойства Caption ввести надпись «Размер траектории» . С помощью мыши отрегулировать положение и размеры компонента. Запустить программу и добиться отсутствия ошибок.
Создать новый программный модуль для моделирования траектории и сохранить его под понятным именем (например, uTrajectory).
Ввести в модуль uTrajectory описание класса «Траектория» (пусть его имя TTrajectory). Включить в него свойства: «Базовая точка», «Масштаб», и свойства, характеризующие выбранный вариант траектории. Включить также в класс метод рисования траектории. Удобно в заголовок метода рисования траектории включить параметр типа TCanvas – канва, на которой осуществляется рисование траектории. Запустить программу и добиться отсутствия ошибок.
Выделить экранную форму и ввести метод обработки события OnCreate - событие создания формы. Обработка события OnCreate должна содержать: создание объекта «Траектория», установку положения и размеров рабочей области (компонент TPaintBox) и панели элементов управления (компонент TPanel) в зависимости от текущих размеров клиентской области формы (свойства ClientHeight и ClientWidth), установку начальных значений параметров траектории (положение базовой точки, размеры, масштаб), установку диапазона значений и начальной позиции «движка». Запустить программу и добиться отсутствия ошибок.
Выделить экранную форму и ввести метод обработки события OnPaint – событие, свидетельствующее о том, что оформление формы на поверхности экрана стало недействительным. Перерисовка самой формы выполняется автоматически, поэтому в метод обработки события OnPaint нужно включить только вызов метода рисования траектории класса «Траектория», передав ему в качестве параметра канву рабочей области (компонента TPaintBox). Запустить программу и добиться отсутствия ошибок.
Выделить экранную форму и ввести метод обработки события OnResize – событие изменения размеров формы. Обработка события OnResize должна содержать: установку положения и размеров рабочей области (компонент TPaintBox) и панели элементов управления (компонент TPanel) в зависимости от новых размеров клиентской области формы (свойства ClientHeight и ClientWidth), установку значений параметров траектории (положение базовой точки, размеры, масштаб). Запустить программу и добиться отсутствия ошибок.
Выделить «движок» (компонент TTrackBar) и ввести метод обработки события OnChange – событие изменения позиции. Обработка события OnChange должна содержать: установку значений параметров траектории (положение базовой точки, масштаб). Заметим, что в более ранних версиях системы программирования при изменении позиции движка событие OnPaint не возникает, поэтому его нужно создать принудительно вызовом метода Invalidate(). Начиная с версии 2010 года событие недействительности изображения в этом случае создается автоматически. Запустить программу и добиться отсутствия ошибок.
Разработка программы закончена. Примите поздравление!











·
·
·
·
·nRoot EntryEquation NativeEquation NativeEquation NativeEquation Native

Приложенные файлы

  • doc 8215918
    Размер файла: 729 kB Загрузок: 0

Добавить комментарий