Методы вычерчивания графических примитивов. 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Методы вычерчивания графических примитивов.



Точка:

Поверхности, на которую программа может осуществлять вывод графики, соответствует объект Canvas. Свойство pixels, представляющее собой двумерный массив типа TColor, содержит информацию о цвете каждой точки графической поверхности. Используя свойство Pixels, можно задать требуемый цвет для любой точки графической поверхности, т. е. "нарисовать" точку. Например, инструкция

Form1.Canvas.Pixels[10,10]:=clRed

окрашивает точку поверхности формы в красный цвет.

Прямая линия:

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

Компонент.Canvas.LineTo(x,у)

Метод LinеТо вычерчивает прямую линию от текущей позиции карандаша в точку с координатами, указанными при вызове метода.

Окружность и эллипс:

Метод Ellipse вычерчивает эллипс или окружность, в зависимости от значений параметров. Инструкция вызова метода в общем виде выглядит следующим образом:

Объект.Canvas.Ellipse(x1,y1, х2,у2]

где:

объект — имя объекта (компонента), на поверхности которого выполняется вычерчивание;

x1, y1, х2, у2 — координаты прямоугольника, внутри которого вычерчивается эллипс или, если прямоугольник является квадратом, окружность.

Дуга:

Вычерчивание дуги выполняет метод Arc, инструкция вызова которого в общем виде выглядит следующим образом:

 

Объект.Canvas.Arc(x1,y1,х2,у2,х3,у3,х4,у4)

 

где:

x1, y1, х2, у2 — параметры, определяющие эллипс (окружность), частью которого является вычерчиваемая дуга;

х3, у3 — параметры, определяющие начальную точку дуги; П х4, у4 — параметры, определяющие конечную точку дуги.

Прямоугольник

Прямоугольник вычерчивается методом Rectangle, инструкция вызова которого в общем виде выглядит следующим образом:

Объект.Canvas.Rectangle(x1, y1,x2, y2)

где:

объект — имя объекта (компонента), на поверхности которого выполняется вычерчивание;

x1, y1 и х2, у2 — координаты левого верхнего и правого нижнего углов прямоугольника.

Метод RoundRec тоже вычерчивает прямоугольник, но со скругленными углами. Инструкция вызова метода RoundRec выглядит так:

Объект.Canvas.RoundRec(x1,y1,х2, у2, х3, у3)

где:

x1, y1, х2, у2 -- параметры, определяющие положение углов прямоугольника, в который вписывается прямоугольник со скругленными углами;

х3 и у3 — размер эллипса, одна четверть которого используется для вычерчивания скругленного угла.

Сектор:

Метод pie вычерчивает сектор эллипса или круга. Инструкция вызова метода в общем виде выглядит следующим образом:

Объект. Canvas.Pie(x1,y1,x2,y2,х3,у3,х4,у4)

где:

x1, y1, х2, у2 — параметры, определяющие эллипс (окружность), частью которого является сектор;

х3, у3, х4, у4 — параметры, определяющие координаты конечных точек прямых, являющихся границами сектора.

Начальные точки прямых совпадают с центром эллипса (окружности). Сектор вырезается против часовой стрелки от прямой, заданной точкой с координатами (хЗ, уз), к прямой, заданной точкой с координатами (х4, у4)

Задание к выполнению лабораторной работы

Задание А

Выполнить пример, приведенный в описании порядка выполнения данной лабораторной работы.

Задание Б

Выбрать алгоритм, составить блок-схему и программу для вычисления в точках xi = a + i×h, i = 0,1,2…, n, h = (b – a)/n промежутка [ a,b ] наибольшего и среднего значений функции y = f(x), указанной в варианте задания. Для выполнения задания воспользоваться оператором цикла FOR;

Задание В

Выбрать алгоритм, составить блок-схему и программу для реше-

ния заданной задачи в выбранном варианте задания. При решении зада-

чи использовать операторы цикла WHILE и REPEAT.

Для решения первой и второй задач выбранного варианта преду-

смотреть:

1) ввод в программу параметров с клавиатуры;

2) вывод на экран значений параметров и вычисляемых величин.

 

Задание Г

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

Порядок выполнения работы

 

Пример1. Использования оператора цикла while

Вычислить сумму членов бесконечного ряда с заданной точностью e =10-4 при x =5.

Прежде всего находят ОДЗ переменной, Х>0.

Открыть новое приложение с помощью команды File| New Application. Сохранить проект.

1. На форме Form1 разместить компоненты Label1, Label2, Labe3; Memo1; Edit1, Button1, Button2 как показано на рис. 3.1.

2. Свойству Caption метки Label1 задать значение

’Введите значение переменной Х’

3. Текст выровнять по центру, установив следующие значения свойств:

AutoSize – False

WordWrap – True

Alignment – taCenter

Размеры метки и ее местоположение отрегулировать вручную. Размер и тип шрифта установить с помощью свойства Font.

4. Свойству Caption метки Label3 задать значение

’ Вычисление суммы членов бесконечного ряда с заданной точностью =10-4 при различных x’

 

5. Для метки Label2 установить свойство Caption равным ‘X=’.

6. Для компонента Edit1 установить свойство Text равным пустой строке.

7. Для компонента Memo1 выбрать свойство Lines и открыть окно String list editor. Удалить в нем строку ‘Memo1’.

8. Для кнопок Button1, Button2 установить свойство Caption равным ‘Решение’ и ’Очистить’ соответственно.

9. Выполнить двойной щелчок на кнопке ‘Решение’ и определить следующий обработчик события OnClick:

procedure TForm1.Button1Click(Sender: TObject);

var s, eps, x, un, uk, y:real;

i:integer;

begin

x:=StrToFloat(Edit1.Text);

if x<=0 then

begin Memo1.Lines.Add('Значение X не входит в ОДЗ');

exit;

end;

eps:=1e-5; s:=1; i:=1; y:=-1*2;

un:=(ln(x)/ln(10))/y;

while abs(un)>eps Do

begin

s:=s+un;

uk:=un; i:=i+1; y:=-y*(2*i-1)*(2*i);

un:=ln(i*x)/ln(10)/y;

end;

Memo1.Lines.Add('Результат');

Memo1.Lines.Add('s='+FloatToStr(s));

Memo1.Lines.Add('n='+FloatToStr(i));

Memo1.Lines.Add('u='+FloatToStr(uk));

 

end;

 

Рис. 3.3. Вид приложения

 

10. Вернуться в форму с помощью клавиши F12, выполнить двойной щелчок на кнопке ‘Очистить’ и определить следующий обработчик события OnClick:

procedure TForm1.Button2Click(Sender:TObject);

begin

Memo1.Clear;

end;

11. Откомпилировать и выполнить программу. Результат работы программы показан на Рис. 3.4

 

Рис. 3.4. Результат работы программы.

 

 

Пример2. Создание простейшего изображения.

1. Открыть новое приложение с помощью команды File|New Application. Сохраните проект в вашем рабочем каталоге, выполнив команду меню File|Save Project As.

2. Запустить графический редактор командой Tools|Image Editor.

3. В графическом редакторе выполнить команду File|New|Bitmap File (.bmp).

4. В появившемся диалоговом окне Bitmap Properties установить

Width=300

Height=200

Colors=SuperVGA(256 colors)

5. Создать произвольное изображение, пример которого приведен на рис.3.5.

 
 
Пример создания заставки Разработчик Петров П.П.


 

Рис.3.5. Пример изображения

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

После выбора цвета для символов и фона следует выполнить команды Edit|Select All и Edit|Cut для очистки рисунка. После этого вставить приведенный выше текст.

6. Выполнить команду File|Save и сохранить изображение в файле с именем zast.bmp.

7. Поместить на форму компонент TImage (страница Additional).

8. Выбрать свойство Picture и войти в редактор свойств (кнопка с тремя точками).

9. В появившемся окне Picture Editor нажать кнопку Load и выбрать файл zast.bmp.

10. Установить свойство AutoSize компонента TImage в True.

11. Поместить на форму компонент TTimer (страница System) и установит свойство Interval равным 1000.

12. Активизировать компонент Timer1 двойным щелчком и создать следующий обработчик события OnTimer.

procedure TForm1.Timer1Timer(Sender: TObject);

begin

if Image1.Visible=True then

begin

Timer1.Interval:=8000; Image1.Hide;

end

else

begin

Timer1.Interval:=2000; Image1.Show;

end;

end;

13. Запустить проект на выполнение.

Пример 3. Создание приложения, содержащего круговую диаграмму.

1. Открыть новое приложение.

2. Поместить на форму компонент TPaintBox (страница System) и установить его размеры: Height – 250, Width – 250.

3. В Инспекторе объектов перейти на вкладку Events и дважды щелкнуть по правому полю в строке события OnPaint.

4. Записать следующий обработчик события:

procedure TForm1.PaintBox1Paint(Sender: TObject);

begin

sector(clRed,0,pi/3,'16,5%');

sector(clWhite,pi/3,5*pi/6,'25%');

sector(clBlue,5*pi/6,7*pi/5,'28,4%');

sector(clYellow,7*pi/5,2*pi,'30%');

end;

Для рисования сектора круга в этом обработчике определена функция sector с параметрами:

Cls – цвет, которым закрашивается сектор;

angle1 – начальный угол;

angle2 – конечный угол;

msg – текст в секторе.

 

Рис. 3.6. Результат работы приложения

Эту функцию надо добавить перед обработчиком события:

procedure sector(clr:TColor;angle1,angle2:real;msg:string);

Var x1,x2,y1,y2:integer;

begin

PaintBox1.Canvas.Brush.Color:=clr;

x1:=trunc(cos(angle1)*PaintBox1.Width/2+PaintBox1.Width/2);

y1:=PaintBox1.Height-trunc(sin(angle1)*PaintBox1.Height/2+PaintBox1.Height/2);

x2:=trunc(cos(angle2)*PaintBox1.Width/2+PaintBox1.Width/2);

y2:=PaintBox1.Height-trunc(sin(angle2)*PaintBox1.Height/2+PaintBox1.Height/2);

PaintBox1.Canvas.Pie(0,0,PaintBox1.Width,

PaintBox1.Height,x1,y1,x2,y2);

PaintBox1.Font.Name:='Arial';

PaintBox1.Font.Size:=8;

PaintBox1.Font.Color:=clBlack;

PaintBox1.Font.Style:=[fsBold];

PaintBox1.Canvas.TextOut(trunc((x1+x2)/2-20),trunc((y1+y2)/2),msg);

end;

5. Откомпилировать и выполнить приложение.

 

Содержание отчета

6. Тема, цель лабораторной работы и постановка задания в соответствии с вариантом.

7. Схематичное изображение главной формы приложения для заданий Б и В.

8. Блок-схемы.

9. Тексты программ.

10. Ответы на контрольные вопросы.

Варианты заданий

Задание Б

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Задание В

1. Пользуясь тем, что

(3.1)

вычислить значение sin(x) для указанного значения , заданного в радианах, с точностью e = 0,001. Точность вычисления считается выполненной, если последнее слагаемое в (3.1) удовлетворяет условию |.

Замечание. Если - значение k -го слагаемого в (3.1), причем , то

2. Используя представление

(3.2)

вычислить значение p с точностью e = 0,0001.

Замечание. Если n - номер слагаемого в (3.2), то его значение оп-

ределяется по формуле . Точность вычисления считается

выполненной, если .

3. Используя представление

(3.3)

вычислить значение для указанного значения с точностью

e = 0,001.

Замечание. Очередной член в сумме (3) выражается через

предыдущий член , n = 1,2, … по следующей формуле .

Если в (3.3) | x | > 1, то полагая x = [ x ] + x, где [ x ] – целая часть x, нужно воспользоваться формулой . Точность вычисления считается выполненной, если .

4. Найти число M натуральных чисел таких, что , где

N – заданное натуральное число.

5. Найти число M натуральных чисел , i = 1,… M и сумму

так, чтобы выполнялось условие S £ N, где N – заданное натуральное

число.

6. Найти число M натуральных чисел , i = 1,…M таких, что

и вычислить сумму , где N, а – заданные числа;

N – натуральное число.

7. Найти число M натуральных чисел , i = 1,…M таких, что

и вычислить сумму , где N, а – заданные числа,

N – натуральное число.

8. Пользуясь тем, что

(3.4)

вычислить значение cos x для указанного значения , заданного в радианах, с точностью e = 0,001. Точность вычисления считается выполненной, если последний по модулю член в сумме (3.4) меньше e.

Замечание. Воспользоваться тем, что отношение последующего чле-

на в (3.4) к предыдущему равно .

9. Пользуясь тем, что

(3.5)

вычислить значение e с точностью e = 0,0001.

Точность вычисления считается выполненной, если последний член

в сумме (3.5) меньше e/3.

10. Для числовой последовательности , n = 1,2, … найти первый член и его номер M такой, чтобы , где e – заданное число, например, e = 0,001 и вычислить сумму .

11. Для числовой последовательности , n = 1,2,…

найти первый член и его номер M такой, чтобы , где e – заданное число, например, e = 0,001 и вычислить сумму .

12. Для числовой последовательности , n = 1,2,… найти

первый член и его номер M такой, чтобы , где e – заданное число, например, e = 0,001 и вычислить сумму .

 

13. Для числовой последовательности , n = 1,2,… найти первый член и его номер M такой, чтобы , где e – заданноечисло, например, e = 0,01 и вычислить сумму .

14. Найти наименьшее натуральное число М, кратное 5, для которого

, где e = 0,01, x – заданное число и вычислить сумму .

15. Найти наименьшее натуральное число М, кратное 3, для которого , где e = 0,01, x – заданное число и вычислить сумму

.

16. Найти наименьшее натуральное число М, кратное 4, для которого

, где e = 0,01, x – заданное число и вычислить сумму .

17. Найти наименьшее натуральное число М, кратное 6, для которого

, где e = 0,01, x – заданное число и вычислить сумму

.

18. Найти наименьшее натуральное число М такое, для которого

, где e = 0,01 и вычислить сумму .

19. Найти наименьшее натуральное число М такое, для которого

, где e = 0,01 и вычислить сумму .

20. Найти наименьшее натуральное число М такое, для которого

, где e = 0,01, x = 1/M и вычислить сумму .

Замечание. Воспользоваться содержанием варианта 8.

 

21. Найти наименьшее натуральное число М такое, для которого

, где e = 0,01, x = 1/M и вычислить сумму .

Замечание. Воспользоваться содержанием варианта 1.

22. Для указанного значения x0 найти наименьшее натуральное чис-

ло М такое, что , где e = 0,01 и вычислить сумму .

23. Пользуясь тем, что

(3.6)

при x Î[–1; 1] вычислить значение ln(1 + x) для указанного значения

с точностью e = 0,001. Точность вычисления считается вы-

полненной, если последний по модулю член в сумме (3.6) меньше e.

24. Найти корень уравнения с точностью

e = 0,001, пользуясь формулой , где n = 0,1,…, . Точность вычисления считается достигнутой, если и тогда полагают .

25. Найти корень уравнения с точностью e = 0,001,

пользуясь формулой , где n = 0,1,…, . Точность вычисления считается достигнутой, если и тогда полагают .

26. Найти корень уравнения с точностью e = 0,001, пользуясь формулой , где n = 0,1,…, . Точность вычисления считается достигнутой, если и тогда полагают .

27. Найти корень уравнения с точностью e = 0,001,

пользуясь формулой (3.7)

где n = 0,1,…, m = 1/3, , а = 2. Точность вычисления считается достигнутой, если и тогда полагают .

28. Найти корень уравнения с точностью

e = 0,00001.

Замечание. Воспользоваться формулой (3.7), где положить m = 1/5;

; а = 10.

29. Найти наименьшее натуральное число M такое, для которого

, где e = 0,01 и вычислить .

30. Для заданного значения найти наименьшее натуральное значе-

ние М такое, что , где e = 0,01, x = 1/M и вычислить сумму .

Варианты заданий

 

№ вари- анта     Вид изображения
     
     
     
 
 
№ вари- анта     Вид изображения
     
     
     
     
     
     
     
 
 
№ вари- анта     Вид изображения
     
       
     
     
     
     
 
№ вари- анта     Вид изображения
     
       
     
     
     
     
     
       
     
     
     
     
           

 

Контрольные вопросы

1. Как называются программы, в основе которых лежит структура

повторения?

2. Сколько операторов цикла вам известно?

3. Каков тип выражения в операторе цикла с предусловием?

4. Верно ли, что в теле цикла с предусловием должен находиться

один оператор?

5. Как сделать, чтобы в теле цикла было несколько операторов?

6. Когда проверяется истинность выражения в цикле while?

7. Верно ли, что истинность выражения в цикле с предусловием яв-

ляется условием продолжения цикла?

8. Сколько раз выполнится оператор в теле цикла while, если с са-

мого начала значение выражения равно false?

9. Верно ли, что цикл while используется при вычислении всякого

рода сумм и произведений, когда заранее не известно число повторе-

ний?

10. Сколько операторов можно записать между ключевыми словами

repeat и until?

11. Когда проверяется истинность выражения в операторе цикла repeat?

12. Какой тип имеет выражение в операторе цикла с постусловием?

13. Почему в цикле repeat оператор тела цикла всегда будет выпол-

нен хотя бы один раз?

14. Верно ли, что истинность выражения в цикле repeat является ус-

ловием окончания цикла?

15. С помощью каких служебных слов записывается цикл с парамет-

ром?

16. Верно ли, что цикл с параметром применяется в тех случаях, ко-

гда заранее известно число повторений?

17. Пусть цикл записан в виде:

for v:=El to Е2 do S;

а) как называется El? б) как называется Е2? в) как называется v?

18. Может ли вещественная переменная быть параметром цикла for?

19. Какие циклы называются вложенными?

20. С помощью какого компонента можно рисовать на форме?

21.С помощью какого метода можно нарисовать окружность, квадрат, прямоугольник, эллипс?

 

Лабораторная работа № 4



Поделиться:


Последнее изменение этой страницы: 2017-01-19; просмотров: 222; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.226.226.169 (0.163 с.)