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 точку (например, перемещение идет на 10 отсчетов за один раз). Каждое перемещение сопровождается подсветкой отдельной круглой точки на результирующем графике. Для ускорения работы программы можно использовать уже заранее рассчитанные точки.