Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабы / ООП.Builder / Lab5C++.doc
Скачиваний:
14
Добавлен:
17.04.2013
Размер:
972.29 Кб
Скачать

2. Компонент tChart для отображения графиков.

– Добавьте на форму компонент TChart с панели «Additional». Щелкните дважды по компоненту. Добавьте кривую FastLine (кнопка «Add») График может содержать несколько кривых. Рассмотрите также вариант кривой Point. На вкладке «Legend» отключите легенду, на вкладке «3D» – откл. трехмерное представление. В конструктор формы добавьте строки:

Chart1->Series[0]->AddXY(0,10,””,clRed);

Chart1->Series[0]->AddXY(1,15,””,clRed);

Chart1->Series[0]->AddXY(2,12,””,clRed);

Chart1->Series[0]->AddXY(3,17,””,clRed);

Здесь: Chart1– имя компонента, Series[0] – кривая в компоненте с номером 0, первый и второй аргументы функции AddXY – декартовы координаты X,Y, третий, четвертый – название точки и ее цвет.

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

– доступ к точке графика по ее номеру:

Chart1->Series[0]->XValue[n] – доступ к Х-составляющей точке графика по ее номеру n

Chart1->Series[0]->YValue[n] – доступ к Y-составляющей точке графика по ее номеру n

Chart1->Series[0]->Delete(n) – удалить из графика точку с номером n

Chart1->Series[0]->Clear () – удалить из графика все точки

Chart1->Series[0]->Count() – вычислить количество точек в графике

– по умолчанию при добавлении новой точки/удалении существующей происходит автоматическое масштабирование по осям (Automatic==true для левой LeftAxis и нижней BottomAxis). Для отключения автомасштабирования задаются конкретные макс. и мин. значения:

Chart1->LeftAxis->Automatic = false ;

Chart1->LeftAxis->Maximum = 1000 ;

Chart1->LeftAxis->Minimum = 0 ;

Свойство Visible устанавливает видимость соответствующей оси на графике.

Блок 1.

Рис. 2. Движение синусоиды по Chart1

Отключите автомасштаб графика Chart1 по обеим осям. Обеспечьте продвижение одного периода синусоиды по графику согласно рис. 2. При этом каждом такте таймера TTimer в кривую добавляется новый отсчет (точка), а уже существующие отсчеты перемещаются вправо. В один из тактов на графике должен быть отображен весь период синусоиды целиком. Пусть один период будет представлен 100 отсчетами. Эффект работы сравним с проезжающим поездом слева направо, если смотреть на него через окно.

Разместите на форме график Chart2, являющийся копией Chart1 (копирование: выделить график, Ctrl+C, щелкнуть по форме, Ctrl+V). Отобразите на нем один период синусоиды. Во время работы программы он должен быть неподвижен.

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

Вычисление результата. Пусть имеются 2 одномерных массива Mas1 и Mas2 размером N. Требуется вычислить операцию «свертка» во временной области. Результат записать в массив Mas3 размером 2*N–1. Принцип вычисления сводится к суммированию попарных произведений перекрывающихся отсчетов Mas1 (светло-серый) и Mas2 (темно-серый). Из рис. 2 видно, что при свертке двух массивов длиной по 5 отсчетов получится 9 отсчетов выходного массива Mas3. При этом Mas2 неподвижен, а Mas1 сдвигается 9 раз по одному отсчету слева направо.

В лабораторной работе необходимо создать функцию свертки (англ. Convolution), которая оперирует двумя входными массивами и помещает результат в отдельный массив. Тип чисел задать double.

1

2

3

4

5

6

7

8

9

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

  1. Первый график оставить пустым.

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

  3. Отобразить на третьем графике результат свертки двух первых графиков.

  4. В первом графике постепенно отображать перемещение функции слева направо. При этом дискретность перемещения может превышать 1 точку (например, перемещение идет на 10 отсчетов за один раз). Каждое перемещение сопровождается подсветкой отдельной круглой точки на результирующем графике. Для ускорения работы программы можно использовать уже заранее рассчитанные точки.

Соседние файлы в папке ООП.Builder