Главная Случайная страница


Полезное:

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

Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Практическое занятие 9, 10





Компонент Chart: его свойства. Построение и сохранение графиков

Цель занятия

Знакомство студентов со свойствами и методами класса TChart (канва). Построением и сохранением графиков функций.

Задание 1

ЗапуститеДельфи. Создайте заголовок формы «Работа графиками в компоненте Chart». Сохраните программу в папке практика 9. Проверьте число сохранённых файлов (должно быть не менее 6).

Положите на форму компонент Panel, удалите её заголовок и измените цвет на clSkyBlue.

Положите на панель следующие компоненты: а) одну из трёх типов кнопок запуска Button и измените её заголовок на «Старт»; б) три компонента LabeledEdit из дополнительной палитры компонентов и измените их заголовки на следующие: «начальное х», «конечное х» и «число шагов по х». В поля Text компонентов впишите 0, 10 и 1000, соответственно. Измените размеры панели так, чтобы компоненты занимали большую часть площади панели, а саму панель с компонентами переместите в верхний левый угол формы. Положите на форму под панелью отладочное поле вывода Memo, выровняйте его по ширине с панелью, измените вертикальный размер до края формы и вставьте линейки прокрутки.

Положите на форму справа от панели компонент Chart из дополнительного набора и измените его размер так, чтобы он занимал всю оставшуюся часть формы.

Задание 2. Подготовка компонента Chart

Двойным щелчком на компоненте Chart войдите в окно его настройки. Нажмите кнопку Add для резервирования возможности вывода одного графика. Во вкладке Standart диалогового окна TeeChartGallery выберите тип графика FastLine. Этот тип графика следует выбирать, если нужен только вывод линий, соединяющих расчётные точки. Подтвердите выбор типа графика нажатием кнопки ОК. Перейдите на закладку Series. Для графика FastLine - нажмите кнопку Border (граница) и перейдите в окно (Border Color Editor) выбора цвета графика, его стиля и толщины линии. При толщине линии 1 (Width = 1) можно задать стиль рисования линии, подобно присвоению значения стиля пера (pen.style) в предыдущей работе. Если толщина выбрана 2 или больше, линия будет рисоваться сплошной (Solid). Выберите ширину линии равной 3 и цвет чёрный. Подтвердите выбор нажатием кнопки ОК.



Перейдите на закладку Chart. Добавьте график типа Line. Этот тип графика следует выбирать, если нужно предусмотреть возможность рисования в расчётных точках каких либо фигур (кружки, треугольники, прямоугольники и т.п.). График Line лучше всего подходит для представления экспериментальных результатов, а размер фигур определяется ошибками эксперимента. Перейдите на закладку Series и выберите серию, соответствующую этому типу графика. Кнопка Border (граница) как и графике FastLine задаёт цвет, стиль и толщину границы (контура) соединяющей точки линии. Удалите галочку в CheckBox с заголовком Visible. Линии, соединяющие экспериментальные точки будут не видны. Во вкладке Poin поставьте галочку в CheckBox с заголовком Visible. Выберите размер фигур 8, тип фигур - круг, цвет заполнения (BackGround…) сделайте белым, а цвет контура фигур чёрным толщиной 3. Перейдите на закладку Chart и потом на 3D и уберите галочку в окне CheckBox с заголовком 3Dimentions. Перейдите на закладку Legend и сделайте надписи легенды невидимыми (удалите галочку в CheckBox с заголовком Visible). Перейдите на закладку Panel и сделайте цвет панели белым, а градиент цвета отключите. В группах выбора варианта (RadioGroup) Внутренний скос (Bevel Inner) и наружный скос (Bevel Outer) поставьте отметку в положениях None, а значения ширины (Width) установите равным 0. Фоновый рисунок (Back Image) не загружать.

Перейдите на закладку общих заголовков (Titles). Шрифтом Arian черного цвета размера 14 создайте заголовок «Зависимость токовой погрешности трансформатора тока от первичного тока». Остальные установки оставьте неизменными.

Перейдите на закладку установки параметров осей (Axis). Выберите установку параметров для нижней оси (Bottom) и закладку заголовка оси (Title). Шрифтом Arian черного цвета размера 14 создайте заголовок оси «Относительное значение первичного тока (I/Iном)». В закладке масштабирования оси (Scales) отмените режим автоматического выбора масштаба. Установите минимальное значение равное 0, а максимальное 1,3. Установите значение расстояния между вертикальными линиями сетки (Grid) (свойство Desired Increment) равным 0,2. На закладке основных меток оси (Ticks) установите границу оси (Axis Border…) толщиной 1 (начальное значение по умолчанию равно 2), а стиль черчения оси - сплошной линией (Solid), цвет - чёрный. Параметры сетки (Grids Border…) -сетка видима, толщина 1, стиль линии - точки (Dot), цвет - чёрный или другой тёмного оттенка. Длина меток - 5. На закладке мелких меток оси (Minor) - установка параметров мелких отметок оси, в окне длины метки (Len:) поставьте 2, а в окне количества (Count:) поставьте 4. Мелкая сетка (Minor Grid…) должна быть отключена (начальная установка).

Выберите установку параметров для левой оси (Left). Назовите ось «Токовая погрешность ТТ, %», начало оси - -0,9; конец оси - +0,6; инкремент оси - 0,25. Остальные установки основных и мелких меток и сеток сделайте так же, как и для горизонтальной оси.



Задание 3

Представить результаты экспериментальной поверки измерительного трансформатора тока (ТТ) в графическом виде.

В результате поверки ТТ с помощью эталонного ТТ по схеме рис. 9.1, были получены экспериментальные данные приведённые в табл. 9.1.

Таблица 9.1. Результаты поверки ТТ Т - 0,66 У3 150/5

I/Iном 0.02 0.07 0.12 0.2 0.4 0.5 0.6 0.8 1.2
DI, % -0.88 -0.67 -0.59 -0.52 -0.37 -0.34 -0.3 -0.27 -0.22 -0.17

 

Рис. 8.1. Схема поверки ТТ: 1 - прибор сравнения КТ 0,1; 2 - регулируемый источник тока «РИТ-3000»; 3 - эталонный двухступенчатый ТТ «ИТТ-3000.5»; 4 - нагрузочное устройство «НТТ50.5» № 31-02; 5 - поверяемый ТТ

 

Токовая погрешность DI, % определяется по формуле (1),

(1)

где - коэффициент трансформации ТТ, I1ном - номинальный первичный ток ТТ (для поверяемого ТТ I1ном = 150 А), I2ном - номинальный вторичный ток ТТ (для поверяемого ТТ I2ном = 5 А, как и для большинства ТТ), I1 - ток в первичной цепи, измеренный эталонным ТТ, I2 - ток во вторичной цепи поверяемого ТТ. При отсутствии ошибок измерений DI = 0.

Токовая погрешность DI < 0 - означает, что измеренное ТТ значение первичного тока меньше фактического значения тока, протекающего в первичной цепи. Возникает недоучёт электроэнергии (ЭЭ), который приводит к существенным денежным потерям поставщиков ЭЭ и экономии средств потребителей ЭЭ. При DI > 0 - ситуация противоположная.

Создайте новый текстовый файл последовательностью команд File/New/Other и из появившегося окна выберите Text. Сохраните его в папке практика 9. Убедитесь, что файл с именем File1.txt появился в указанной папке. В этом файле запишите три строки со следующим содержанием:

2006.04.23. Метрологическая лаборатория ТатЭнерго. Отв. – Мулин Ф.Ф.

Результаты поверки ТТ Т - 0,66 У3 150/5

I/Iном deltaI, %

Далее в два столбика введите данные табл. 9.1. На каждой строке должно быть по одному значению тока и погрешности с одним или несколькими пробелами между значениями. Разделитель целой и десятичной части чисел – точка. После ввода чисел последней 10 строки нажмите несколько раз клавишу Delete. Попытайтесь переместиться на следующую 14-ую строку навигационными клавишами. Перемещения не должно быть, а 13-ая строка должна оказаться последней в файле. Если перемещение возможно, то следует удалять пустые строки до тех пор, пока 13-ая строка не окажется последней. В конце последней строки файла ставится непечатаемый знак конца файла (end of file), а в Дельфи имеется логическая функции eof(). В скобках функции указывается, к какому файлу она относится. Эта функция принимает значение ложь (false), если курсор находится в файле и не дошёл до конца файла и значение истина (true), если дошёл до конца файла. Знак ставится при закрытии и сохранении файла. Сохраните файл.

Двойным щелчком на кнопке старт создайте заготовку файла Button1Сlick. В разделе описания переменных опишите следующие переменные: x, y: real; i: integer; f1, f2: TextFile; str: string;.

В теле процедуры припишите абстрактному текстовому файлу f1 имя 'File1.txt', а файлу f2 имя 'Result.txt'. Эта операция связи абстрактного файла с конкретным файлом осуществляется командой AssignFile. Например, команда AssignFile(f1, 'File1.txt') приписывает текстовому файлу f1 имя 'File1.txt'. При дальнейшем упоминании файловой переменной f1 компилятор будет понимать, что обращение должно происходить к файлу 'File1.txt', который находится в папке с программой. Чтобы обратиться к файлу, находящемуся в другой папке следует указывать полный путь к этой папке или использовать компонент OpenDialog из набора компонентов Dialogs. Этот компонент должен быть положен куда-нибудь на форму. Пример использования компонента OpenDialog для связки абстрактного и конкретного файлов:

if OpenDialog1.Execute then AssignFile(f1, OpenDialog1.FileName);.

Откройте файл f1 для чтения из него информации командой Reset(f1) (переустановить), а файл f2 – для записи в него информации командой Rewrite(f2). Команда Rewrite(f2) – переписать –всю существующую в файле f2 информацию уничтожает и создать пустой файл с таким именем. Альтернативой команде Rewrite(f2) является команда AppEnd(f2), которая открывает уже существующий файл f2, перемещает курсор до знака конца файла и удаляет этот знак конца файла. Файл оказывается подготовлен для записи информации начиная с конца предыдущей записи. Такая команда удобна для ведения протоколов расчётов, когда результаты предыдущих расчётов не уничтожаются, а только дополняются. Приведите из своего жизненного опыта по нескольку примеров сохранения информации по этим двум способам.

Введите несколько пустых строк, а затем команды закрытия обоих файлов: CloseFile(f1);CloseFile(f2);.

После команд открытия файлов прочитайте первые три строки файла данных и запишите их в файл результатов следующими командами:

Readln(f1,str); Writeln(f2,str); //чтение и запись одной строки

Скопируйте эти команды ещё два раза. Запустите программу на исполнение и после нажатия Старт выйдите из этого режима. Откройте файл result.txt и убедитесь, что первые строки прочитаны правильно. Закройте файл result.txt.

После чтения первых трёх строк создайте заготовку цикла из 10 шагов:

for i:=1 to 10 do

begin

 

end; {for}

В тело цикла вставьте (с отступом на 1 пробел от уровня начала цикла) команды чтения данных результатов поверки и контрольный вывод прочитанных данных в файл результатов. Команда чтения из файла данных имеет вид:

Readln(f1, x, y);

а команда вывода в файл результатов в научном (общем) формате:

Writeln(f2, x, ' ',y);.

Запустите программу на исполнение и после нажатия Старт выйдите из этого режима. Откройте файл result.txt и убедитесь, что в нём информация такая же, как и в исходном файле данных. Закройте файл result.txt. Если информация в файлах различается, исправьте ошибки и добейтесь совпадения информации. Для того, чтобы информация в файле result.txt выглядела более привычно, можно воспользоваться командой записи чисел в фиксированном формате Writeln(f2, x:3:3, ' ':5, y:3:3); где запись x:3:3 означает, что для вывода числа х предусмотрено 3 знака до запятой и 3 знака после запятой, а ' ':5 означает, что между числами х и у выводится 5 пробелов. Замените команду вывода и подберите требуемое число знаков в целой и дробной частях чисел так, чтобы в файле result.txt экспериментальные значения выглядели в привычном виде.

После команд чтения-записи в тело цикла for вставьте команду вывода прочитанных данных в компонент Chart в серию со значками без соединительных линий series[1]:

Chart1.Series[1].AddXY(x, y);.

Запустите программу на исполнение и убедитесь, что на графике появились экспериментальные результаты в виде кружков. Поскольку график занимает малую часть Chart1, измените верхнее значение оси у на -0,1. При этом придётся поменять расстояние между горизонтальными линиями сетки с 0,25 до 0,1, а число мелких делений шкалы с 4 до 1, чтобы между ними были интервалы кратные 0,05. Запустите программу и убедитесь, что график занимает большую часть Chart1.

Закомментируйте все команды вывода данных в файл result.txt.

Вставьте вывод прямой, соответствующей значению y = -0,5:

Chart1.Series[0].AddXY(x, -0.5);.

Убедитесь, что линия рисуется.

Приведите в соответствие размеры фигур на экспериментальном графике и погрешности измерений. В данном эксперименте погрешность по оси х определяется погрешностью измерений первичного тока эталонным ТТ «ИТТ-3000.5» класса точности 0,01. Это означает, что погрешность измерений составляет ±0,01%∙I1ном = ±150 А/10000 = ±0,015. Тогда размер фигуры должен быть по ширине равен 0,03.

Погрешность по оси «у» определяется погрешностью измерений прибора сравнения КТ, имеющего класс точности 0,05. Тогда размер фигуры должен быть по высоте равен ±0,05 % = 0,1 % . Очевидно, что размеры фигур графика не соответствуют погрешностям измерений, что может привести к неправильным заключениям при анализе экспериментальных результатов. Если по оси х размеры нужно лишь немного увеличить, то по оси у увеличение должно быть почти в 6 раз. В связи с этим, нижнюю границу оси у следует немного изменить и сделать равной -0,95. При таких больших различиях размеров фигур по осям, лучше заменить фигуру circle (круг, эллипс) на square (квадрат, прямоугольник).

Измените границу оси, тип и размер фигур. Цвет внутренней закраски фигур сделайте белым.

Добавьте график типа Line в компонент Chart. Установите чёрный цвет закраски, выберите режим рисования кружков (без соединительных линий), установите их размер равным 3. В тело цикла чтения данных и рисования экспериментальных областей вставьте команду вывода дополнительных кружков в центр экспериментальных областей: chart2.Series[3].AddXY(x,y);.

Проверьте размеры. Сохраните построенный график в растровый файл типа '*.bmp'. Для этого после закрывающей скобки end цикла for до или после команд закрытия файлов вставьте строку:

Chart1.SaveToBitmapFile('График.bmp');.

Проверьте, возникает ли файл «График.bmp» в папке программы.

Задание 3

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

Добавьте в компонент Chart возможность построить график типа «быстрая линия» (после добавки можно будет строить 5 графиков). Установите цвет линии синий и ширину 3.

Добавьте в раздел описания переменных следующие переменные с плавающей запятой: a1, b1, c1, X0, Xend, stepX и целочисленную переменную NStep.

Замените команду Rewrite(f2); (переписать файл f2) на команду Append(f2); (дописать в конец файла f2).

Положите на панель 7 компонент LabeledEdit и измените их заголовки на следующие: «a», «b», «c», «x0» (начальное значение переменной х), «xend» (конечное значение переменной х), «число точек графика», «сумма квадратов отклонений». В поля текст компонентов запишите числа: «-0,2163», «-0,18», «0,0055», «0,02», «1,2», «500», соответственно. Поле текст последнего компонента LabeledEdit7 оставьте пустым. Выберите размер шрифта так, чтобы текст не выглядел слишком мелким. Числовые значения первых трёх компонент получены в результате подборки по методу «наименьших квадратов» теоретической функции вида , которая наилучшим образом описывает экспериментальные данные.

Сразу после начальной операторной скобки процедуры Button1Click введите значения a1, b1, c1, X0, Xend, NStep по примеру:

a1:=StrToFloat(LabeledEdit1.Text); {преобразование строковой переменной, записанной в поле Text компонента LabeledEdit1 в переменную с плавающей запятой и присвоение полученного значения переменной a1}

Nstep:=StrToInt(LabeledEdit6.Text); {преобразование строковой переменной, записанной в поле Text компонента LabeledEdit6 в целочисленную переменную и присвоение полученного значения переменной Nstep }.

Определите размер шага по оси х:

stepX:=(Xend - X0)/Nstep;

Создайте цикл рисования теоретической функции:

for i:=0 to Nstep do

begin

x:=X0+i* stepX; {Определение значения х}

y:=a1-b1*ln(x+c1); {Определение значения у}

chart2.Series[0].AddXY(x,y+0.01); {вывод точки с координатами х,у}

chart2.Series[4].AddXY(x,y); {вывод точки с координатами х,у}

end; {for}

Запустите программу на исполнение. Исправьте ошибки. Обратите внимание на прорисовку теоретических линий. Чёрная линия смещена вверх на 0.01 для того, чтобы она не сливалась с синей линией. Чёрная линия не должна быть видна под экспериментальными фигурами, а синяя должна проходить поверх этих фигур. Убедитесь в этом. В этом проявляется слоистый характер вывода информации в компонент Chart. Каждый из графиков выводится в своём слое, а последовательность слоёв совпадает с последовательностью графиков. Каждый последующий график рисуется поверх предыдущего. Такой принцип построения сложных рисунков часто применяется в различных графических редакторах. Можно запретить изменения во всех слоях кроме одного, где производится рисование. Тогда изменения в одном слое не приводят к нарушению рисунков в других слоях. Ясно, что слои располагаются по типу графиков - один поверх другого.

Задание 4

Подсчёт суммы квадратов отклонений теоретических и экспериментальных значений.

Дополните раздел описания переменных переменной с плавающей запятой Summa. Обнулите значение переменной: Summa:=0; (этот оператор может быть записан в любом месте программы, но раньше входа в цикл рисования экспериментальных фигур, например до или после чтения из компонент LabeledEdit).

В тело цикла рисования экспериментальных фигур после команд чтения вставьте команду накопления суммы квадратов разностей (отклонений) экспериментальных и теоретических величин у:

Summa:= Summa+sqr(y-(a1-b1*ln(x+c1));.

Эта команда работает так: при I = 1 (первая экспериментальная точка) а) вычисляется теоретическое значение в этой точке (a1-b1*ln(x+c1); б) полученное значение вычитается из экспериментального значения у и возводится в квадрат; в) добавляется к текущему значению переменной Summa, которое на первом шаге равно 0. На втором шаге к значению переменной Summa добавляется квадрат разности между теоретическим и экспериментальным значением во второй точке. Так происходит для всех точек графика и после выхода из цикла эта переменная содержит сумму квадратов отклонений для всех точек графика. Задача в методе наименьших квадратов заключается в нахождении такой теоретической функции, для которой переменная Summa имела бы самое малое значение.

После команды выхода из цикла запишите команду вывода значение суммы в компонент LabeledEdit на форме и в поле memo. Далее запишите команды вывода в файл result.txt:

Writeln(f2, ' аппроксимация эксперимента функцией y = a-b*ln(x+c)');

Writeln(f2, 'a = ', LabeledEdit1.text, ' b = ', LabeledEdit2.text, ' c = ', LabeledEdit3.text);

Writeln(f2, 'сумма квадратов отклонений = ', Summa);

Writeln(f2); {выводит пустую строку в файл f2}.

Запустите программу, устраните ошибки и меняя значения a, b, c убедитесь, что их первоначальные значения действительно соответствуют наименьшей сумме квадратов отклонений. Откройте файл result.txt и убедитесь, что протокол расчётов ведётся правильно.

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

chart1.Series[0].Clear; (для каждой серии отдельная команда).

Запустите программу и убедитесь, что искажений графиков больше не происходит.

Вопросы для самопроверки

1. Для чего служит компонент Chart?

2. Сколько графиков можно вывести в компонент Chart?

3. Что нужно сделать, чтобы можно было вывести два графика?

4. Как убрать вывод значени1 переменной (легенду)?

5. Как сделать график двумерным?

6. Как убрать/изменить масштаб сетки (Grid)?

7. Как изменить фоновый цвет графика?

8. Как изменить/создать заголовки осей нужным цветом, размером символов и типом шрифта?

9. Как создать/убрать название графика?

10. Каков должен быть размер фигур в позиции вывода экспериментальных значений?

11. Как изменить толщину линии графика?

12. Какой тип графика следует выбрать в случае необходимости вывода экспериментальных значений?

13. Какой тип графика следует выбрать в случае, если выводятся только расчётные значения функции?

14. Какими соображениями следует руководствоваться для выбора числа точек на графике функции?

15. Какие переменные должны быть в программе, чтобы вывести график заданной функции?

16. Какой из трёх типов циклических операторов следует использовать для вывода графика функции?

17. Каково минимальное число операторов должно быть в цикле построения графика нелинейной функции?

18. Каков алгоритм построения графика функции?

19. Как сохранить построенный график в виде растрового рисунка типа BitmapFile?

20. Как сохранить построенный график в виде растрового рисунка типа MetaFile?

21. Как определяется токовая погрешность трансформатора тока (ТТ)?

22. Зачем производится поверка трансформатора тока?

23. Как производится поверка трансформатора тока?

24. Что означает отрицательная токовая погрешность( DI < 0 )?

25. Что означает положительная токовая погрешность( DI > 0 )?

26. Перечислите несколько типов файлов.

27. Как должен выглядеть заголовок файла с результатами поверки ТТ?

28. Какой символ используется в качестве разделителя целой и десятичной части чисел в файле данных типа текст?

29. Какая операция служит для привязки абстрактного файла к конкретному файлу?

30. Как открыть файл данных для чтения из него информации?

31. К какому типу переменных относится переменная eof()?

32. Какие значения принимает переменная eof() в файле?

33. Где ставится, как и зачем команда закрытия файла?

34. Чем различаются команды чтения данных типа read и readln?

35. Запишите команду чтения трёх переменных а, b, c из открытого файла f1 без перехода к следующей строке записи в файле.

36. Запишите команду перехода к следующей строке записи в файле f1 без чтения информации в текущей строке.

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

38. Как открыть файл для записи в него информации?

39. Какие типы открытия файлов для записи в них информации существуют в базовом варианте Delphy?

40. Какой командой следует открывать файл для дозаписи (записи в конец файла, ведения протокола действий) информации в уже существующий файл данных?

41. Что происходит по команде ReWrite(f1)?

42. Чем различаются команды Write(f1) и WriteLn(f1)?

43. Как создать пустую строку в выводном файле данных?

44. Какой размер должны иметь фигуры на графике экспериментальных значений (круги, прямоугольники, треугольники и др.) чтобы правильно отразить погрешности измерений?

45. Как строится теоретическая зависимость (аппроксимирующая функция) по полученным экспериментальным значениям?

46. Что такое «метод наименьших квадратов» при построении аппроксимирующих функций?

47. Как в программе подсчитать сумму квадратов отклонений экспериментальных значений от аппроксимирующей функции?

 






Date: 2016-05-16; view: 170; Нарушение авторских прав

mydocx.ru - 2015-2019 year. (0.028 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию