
- •Министерство образования и науки, молодежи и спорта украины
- •Содержание
- •Введение
- •Требования к оформлению работы:
- •Модуль 1. Основные понятия компьютерной графики Задание 1. Раскрыть теоретический вопрос, используя конспект лекций и указанную дополнительную литературу. Список теоретических вопросов
- •Задание 2. Разработка приложений в среде Corel Draw.
- •Краткие теоретические сведения
- •1. Рабочая среда и интерфейс пользователя
- •2. Построение сложных объектов
- •1. Transformations (Преобразования)
- •2. Align and Distribute (Выровнять и Распределить)
- •3. Order (Порядок)
- •4. Shaping (Изменение формы)
- •Intersect (Пересечение)
- •Интерактивное перетекание. Имитация объема
- •4. Powerclip. Обработка растровых изображений"
- •5. Интерактивный объем"
- •6. Интерактивное искажение.
- •Краткие теоретические сведения
- •Алгоритм 1 (условный пример)
- •Алгоритм 2 (условный пример)
- •Краткие теоретические сведения Аффинные преобразования на плоскости
- •Аффинные преобразования объектов на плоскости
- •Связь преобразований объектов с преобразованиями координат
- •Основная литература
- •Дополнительная литература
- •Приложение а
- •«Компьютерная графика»
Алгоритм 1 (условный пример)
Шаг 1:
Положить p(0)=pmin+Np*dp, q(0)=qmin+Nq*dq, k=0, x(0)=y(0)=0. x и у - обнуляются при каждом обращении к 1 шагу поскольку в процессе итерирования значения х и у изменяются.
Шаг 2 (итерация):
Вычислить x(k+1) и y(k+1), используя формулы
x(k+1)=x(k)2*x(k)-y(k)2 + p,
Увеличить счетчик k на 1 (k:=k+1).
Шаг 3 (оценка):
Вычислить r=x(k)2+y(k)2.
Если r>M, то выбрать цвет k и идти на шаг 4.
Если k=M, то выбрать цвет 0 (черный) и идти на шаг 4.
r<=M, k<M. Вернуться на шаг 2.
Шаг 4:
Приписать цвет k точке экрана (p(n), q(n)) и перейти к следующей точке, начиная с шага 1.
Меняя функцию, условия выхода из цикла можно получать другие фракталы. Например, взяв вместо выражения С=a+bi выражение Z0=a+bi, а С присваивать произвольные значения мы получим множество Жюлиа, тоже красивый фрактал. Будем рассматривать последовательности комплексных чисел {Zn}. Возьмем произвольное комплексное число c. Теперь для любого комплексного числа k рассмотрим последовательность {Zn(k)}:
Z0 = k,
Zi+1= Zi2 + c
Зададим себе вопрос: сходится ли Zn к нулю или стремится к бесконечности при n стремящемся к бесконечности? Пусть J – множество всех комплексных чисел {k}, таких что {Zn(k)}стремится к 0, при n стремящемся к бесконечности. Если теперь мы возьмем все такие k и отобразим их на комплексной плоскости, то получим множество Жюлиа. Меняя c, мы получим бесконечный набор фантастических само подобных образов – множеств Жюлиа.
Алгоритм 2 (условный пример)
Шаг 0:
Выбрать параметр c=p+iq, выбрать Xmin = -1.5, Ymin = -1.5, Xmax = 1.5, Ymax = 1.5
Это означает, что p - реальная переменная, iq - воображаемая, но тоже вполне реальная переменная. Например, p = 0.32 c_img = 0.043. Эти параметры являются константой при построении одного отображения и их значения определяют рисунок. Масштабировать отображения можно меняя значения Xmax, Xmin, Ymax, Ymin.
Выбрать число M, которое считается бесконечно большим.
Этот параметр определяет максимальное число итераций
Вычислить dx=(Xmax-Xmin)/(A-1), dy=(Ymax-Ymin)/(B-1).
Для всех пар (Nx, Ny), где Nx=0,1... A-1 и Ny=0,1...B-1 выполнить следующую процедуру.
Шаг 1(первый и второй циклы):
Положить x(n)=xmin+Nx*dx, y(n)=ymin+Ny*dy, k=0. Здесь последовательно изменяются только Nx и Ny, на одно изменение Nx приходится В изменений Ny. Пиксел который будет в дальнейшем окрашиваться имеет координаты (x(n),y(n)).
Шаг 2 (третий цикл, итерация):
Вычислить x(k+1) и y(k+1), по формулам
x(k+1)=x(k)2*x(k)-y(k)2 + p,
y(k+1)=2*x(k)*y(k) + q.
Увеличить счетчик k на 1 (k:=k+1).
Шаг 3 (оценка внутри 3 цикла):
Вычислить r=x(k)2+y(k)2.
Если r>M, то идти на шаг 4.
Если k=K, то выбрать цвет 0 (черный) и идти на шаг 4. В этой строке что-то не так, опечатка наверное, дело в том, что количество цветов К может равняться 2, 16, 255 и т.д. и прерывать цикл с М>К нет смысла. В целом это условие касается только алгоритма раскрашивания. Строка получает законный и концептуальный вид прерывания итерации при достижении допустимого максимума если к=М, или полностью:
Если k=M то выбрать цвет 0 (черный) и идти на шаг 4.
Если r<=M и k<M. Вернуться на шаг 2.Здесь тоже была опечатка типа (Если r<=М, k<К)
Шаг 4:
Приписать цвет k точке экрана (x(n), y(n)) и перейти к следующей точке, начиная с шага 1.
В 1915 году польский математик Вацлав Серпинский придумал занимательный объект, известный как решето Серпинского. Этот треугольник один из самых ранних известных примеров фракталов. Существует несколько способов построения этого фрактала. Один из них представляет следующий процесс. Берётся сплошной равносторонний треугольник, на первом шаге из центра удаляется перевёрнутый треугольник. На втором шаге удаляется три перевёрнутых треугольника из трёх оставшихся треугольников. Продолжая этот процесс, на -ом шаге удаляем перевёрнутых треугольников из центров оставшихся треугольников. Конца этому процессу не будет, и в треугольнике не останется живого места, но и на части он не распадётся - получится объект состоящий из одних только дырок. Это и есть треугольник Серпинского. Треугольник Серпинского также называют салфеткой Серпинского.
Фрактал салфетка Серпинского может быть построен как с помощью метода простой замены, который применяют для построения регулярных фракталов.
Рассмотрим алгоритм построения. Для его построения из центра треугольника мысленно вырежем кусок треугольной формы, который своими вершинами будет упираться в середины сторон исходного треугольника. Повторим эту же процедуру для трех образовавшихся треугольников (за исключением центрального) и так до бесконечности. Если мы теперь возьмем любой из образовавшихся треугольников и увеличим его - получим точную копию целого. В данном случае мы имеем дело с полным самоподобием. Другими словами рисуется равносторонний треугольник. Каждая сторона делится пополам и соединяется линиями. Центральный треугольник отбрасываем. А из получившихся трех маленьких треугольников снова находим середины. И так далее.
Прописываем событие Button1Click. В процедуре мы прорисовываем первый, самый большой треугольник. Далее мы вызываем рекурсивную процедуру. Процедура находит середины сторон каждого треугольника и соединяет их линиями, которые собой образуют новый треугольник.
Пример реализации:
{begin
mx := 320;
my := 479;
rad := my;
Randomize;
x := 0.0;
y := 0.0;
for k := 1 to iter do
begin
p := Random;
t := x;
if p >= 1/3 then
begin
x := 0.50 * x + 0.00 * y + 0.0;
y := 0.00 * t + 0.50 * y + 0.5;
end
else
if p >= 2/3 then
begin
x := 0.50 * x + 0.00 * y - 0.25;
y := 0.00 * t + 0.50 * y + 0.0;
end
else
begin
x := 0.50 * x + 0.00 * y + 0.25;
y := 0.00 * t + 0.50 * y + 0.0;
end;
PutPixel(mx + Round(rad * x), my - Round(rad * y), 2);
end;
end;}
Результат:
Пример реализации:
{procedure serp(x1, y1, x2, y2: real; n: integer);
var
x1n, y1n, x2n, y2n: real;
begin
if n > 0 then begin
x1n:= 2*x1/3+x2 / 3;
x2n:= x1/3+2*x2 / 3;
y1n:= 2*y1/3+y2 / 3;
y2n:= y1/3+2*y2 / 3;
rectangle(round(x1n),round(y1n),round(x2n),round(y2n));
serp(x1, y1, x1n, y1n, n-1);
serp(x1n, y1, x2n, y1n, n-1);
serp(x2n, y1, x2, y1n, n-1);
serp(x1, y1n, x1n, y2n, n-1);
serp(x2n, y1n, x2, y2n, n-1);
serp(x1, y2n, x1n, y2, n-1);
serp(x1n, y2n, x2n, y2, n-1);
serp(x2n, y2n, x2, y2, n-1);
end;
end;}
Результат:
Задание 2. Ознакомиться с методами геометрических преобразований графических объектов. Написать программу позволяющую:
1) Построить простейшие геометрические объекты согласно варианта из табл 2. (координаты объекта задать произвольно).
2) Выполнить аффинные преобразования:
а) параллельный перенос;
b) поворот вокруг осей OX, OY на угол α;
c) масштабирование;
Исходную и преобразованную фигуру ввести на экран разными цветами (по желанию).
Реализовать предложенные аффинные преобразования на плоскости с помощью любого языка программирования. Представить листинг программы и результат работы программы в виде графического изображения.
Таблица 2 – Задания
Номер варианта |
Вид объекта |
Угол поворота, α |
Константы переноса |
Константы масштабирования | ||
α |
β |
λ |
μ | |||
1 |
квадрат |
Pi/4 |
50 |
-50 |
2 |
0.5 |
2 |
прямоугольник |
-Pi/4 |
0 |
100 |
2 |
0.5 |
3 |
Треугольник |
Pi/2 |
100 |
100 |
1 |
2 |
4 |
окружность |
Pi |
150 |
-50 |
0.5 |
1 |
5 |
квадрат |
-Pi |
-150 |
50 |
2 |
1 |
6 |
треугольник |
-Pi/2 |
50 |
50 |
0.5 |
2 |
7 |
прямоугольник |
Pi |
150 |
0 |
1 |
2 |
8 |
окружность |
Pi/4 |
-100 |
0 |
2 |
1 |
9 |
квадрат |
-Pi/4 |
-50 |
-100 |
0.5 |
2 |
10 |
прямоугольник |
Pi/2 |
0 |
-100 |
1 |
0.5 |
11 |
треугольник |
-Pi |
100 |
-150 |
2 |
2 |
12 |
окружность |
-Pi/2 |
50 |
-150 |
0.5 |
0.5 |
13 |
квадрат |
Pi/6 |
-150 |
-50 |
0.5 |
3 |
14 |
прямоугольник |
-Pi/6 |
-100 |
100 |
2 |
3 |
15 |
треугольник |
Pi/6 |
50 |
100 |
1 |
3 |
16 |
окружность |
Pi/4 |
50 |
-50 |
2 |
0.5 |
17 |
квадрат |
-Pi/4 |
0 |
100 |
2 |
0.5 |
18 |
прямоугольник |
Pi/2 |
100 |
100 |
1 |
2 |
19 |
треугольник |
Pi |
150 |
-50 |
0.5 |
1 |
20 |
окружность |
-Pi |
-150 |
50 |
2 |
1 |
21 |
квадрат |
-Pi/2 |
50 |
50 |
0.5 |
2 |
22 |
прямоугольник |
Pi |
150 |
0 |
1 |
2 |
23 |
треугольник |
Pi/4 |
-100 |
0 |
2 |
1 |
24 |
окружность |
-Pi/4 |
-50 |
-100 |
0.5 |
2 |
25 |
квадрат |
Pi/2 |
0 |
-70 |
2 |
0.5 |
26 |
квадрат |
Pi/4 |
30 |
-50 |
2 |
1,5 |
27 |
прямоугольник |
-Pi/4 |
60 |
50 |
2 |
2 |
28 |
Треугольник |
Pi/2 |
40 |
40 |
1,5 |
2 |
29 |
окружность |
Pi |
15 |
-5 |
0.5 |
1,5 |
30 |
квадрат |
-Pi |
-115 |
130 |
2,5 |
1,5 |
31 |
треугольник |
-Pi/2 |
75 |
75 |
0.5 |
2 |
32 |
прямоугольник |
Pi |
145 |
160 |
1 |
2 |
33 |
окружность |
Pi/4 |
-120 |
160 |
1 |
1 |
34 |
квадрат |
-Pi/4 |
-55 |
-95 |
0.5 |
2 |
35 |
прямоугольник |
Pi/2 |
-145 |
-140 |
1 |
0.5 |
36 |
треугольник |
-Pi |
110 |
-115 |
2 |
2 |
37 |
окружность |
-Pi/2 |
120 |
-120 |
0.5 |
0.5 |
38 |
квадрат |
Pi/6 |
-115 |
-130 |
2 |
3 |
39 |
прямоугольник |
-Pi/6 |
-110 |
-115 |
2 |
3 |
40 |
треугольник |
Pi/6 |
-115 |
-115 |
1 |
3 |
41 |
окружность |
Pi/4 |
75 |
-75 |
2 |
2 |
42 |
квадрат |
-Pi/4 |
0 |
130 |
2 |
0.5 |
43 |
прямоугольник |
Pi/2 |
120 |
130 |
1 |
2 |
44 |
треугольник |
Pi |
115 |
-50 |
0.5 |
1 |
45 |
окружность |
-Pi |
-115 |
150 |
2 |
1 |
46 |
квадрат |
-Pi/2 |
95 |
50 |
0.5 |
2 |
47 |
прямоугольник |
Pi |
150 |
65 |
1 |
2 |
48 |
треугольник |
Pi/4 |
-100 |
0 |
2 |
1 |
49 |
окружность |
-Pi/4 |
-70 |
-110 |
0.5 |
2 |
50 |
квадрат |
Pi/2 |
70 |
-100 |
1 |
0.5 |
51 |
квадрат |
-Pi |
-150 |
90 |
2 |
1 |
52 |
треугольник |
-Pi/2 |
85 |
80 |
0.5 |
2 |
53 |
прямоугольник |
Pi |
150 |
80 |
1 |
2 |
54 |
окружность |
Pi/4 |
-100 |
60 |
2 |
1 |
55 |
квадрат |
-Pi/4 |
-70 |
-100 |
0.5 |
2 |