Элективные курсы по информатике на старшей ступени общего образования

  • Вид работы:
    Курсовая работа (т)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    2,24 Мб
  • Опубликовано:
    2013-04-24
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Элективные курсы по информатике на старшей ступени общего образования

Введение


Актуальность проблемы. Важную роль в системе профильного обучения на старшей ступени школы играют элективные курсы. В соответствии с одобренной Минобразования «Концепцией профильного обучения на старшей ступени общего образования» дифференциация содержания обучения в старших классах осуществляется на основе различных сочетаний курсов трех типов: базовых профильных элективных. Элективные курсы «компенсируют» ограниченные возможности базовых и профильных курсов в удовлетворении разнообразных образовательных потребностей старшеклассников.

Роль элективных курсов в системе профильного обучения определяет широкий спектр их функций и задач. Общие функции и задачи элективных курсов в системе профильного обучения зависят от учебного предмета.

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

Объект исследования: профильная подготовка школьников по информатике на старшей ступени образования.

Предмет исследования: элективные курсы по информатике на старшей ступени общего образования

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

1.   Изучить нормативную, методическую и педагогическую литературу по проблеме исследования.

2.      Выяснить особенности элективных курсов по информатике на старшей ступени общего образования.

.        Изучить типологию элективных курсов по информатике.

.        Разработать программу элективного курса по информатике по теме:«компьютерная графика и геометрическое моделирование».

Гипотеза исследования: использование элективного курса "Компьютерная графика и геометрическое моделирование" обеспечивает эффективное усвоение учащимися содержания курса по Информатике и расширение своих знаний, умений и навыков программирования в среде Turbo Pascal.

1. Система координат: декартова система координат. Полярная система координат. Графический режим. Компьютерная система координат


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

 

.1 Декартова система координат


Прямоугольная (Декартова) система координат - прямолинейная система координат с взаимно перпендикулярными осями на плоскости или в пространстве. Наиболее простая и поэтому часто используемая система координат. Очень легко и прямо обобщается для пространств любой размерности, что также способствует ее широкому применению.

Расположение точки P на плоскости определяется декартовыми координатами с помощью пары чисел :

расстояние от точки P до оси y с учетом знака

расстояние от точки P до оси x с учетом знака

В пространстве же необходимо уже 3 координаты :

расстояние от точки P до плоскости yz

расстояние от точки P до плоскости xz

расстояние от точки P до плоскости xy

 

.2 Полярная система координат


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

Полярная система координат задаётся лучом, который называют нулевым или полярной осью. Точка, из которой выходит этот луч, называется началом координат или полюсом. Любая точка на плоскости определяется двумя полярными координатами: радиальной и угловой. Радиальная координата (обычно обозначается ) соответствует расстоянию от точки до начала координат. Угловая координата, также называется полярным углом или азимутом и обозначается , равна углу, на который нужно повернуть против часовой стрелки полярную ось для того, чтобы попасть в эту точку.

Определённая таким образом радиальная координата может принимать значения от нуля до бесконечности, а угловая координата изменяется в пределах от 0° до 360° в соответствии с рисунком 1. Однако, для удобства область значений полярной координаты можно расширить за пределы полного угла, а также разрешить ей принимать отрицательные значения, что отвечает повороту полярной оси по часовой стрелке.

Рисунок 1 - Полярная система координат

 

1.3 Связь между декартовой и полярной системами координат


Декартовы и полярные системы координат


где u0 - функция Хевисайда с , а sgn - функция signum . Здесь функции u0 и sgn используются как «логические» переключатели, аналогичные по значению операторам «если .. то» (if…else) в языках программирования. Некоторые языки программирования имеют специальную функцию atan2 (y, x), которая находит правильный θ в необходимом квадранте, определённом x и y.

 

.4 Графический режим. Компьютерная система координат


Система программирования Turbo Pascal снабжена несколькими модулями или "библиотеками" в которых хранятся все её процедуры и функции.

Каждая такая библиотека специализирована, т.е. содержит процедуры и функции поддерживающие одно устройство, выполняющие подобные действия и т.д..TPU

Библиотека содержащая процедуры и функции для поддержки графического режима носит имя GRAPH.TPU. Изучению всех возможностей этой библиотеки мы посвятим несколько занятий. Первое занятие - вводное.

Подключение графической библиотеки.

Для того, чтобы компилятор "узнавал" названия процедур и функций

содержащихся в библиотеке GRAPH.TPU, мы должны после заголовка программы разместить строчку следующего вида:Graph;

(что можно перевести на русский язык как выражение "используется графика", или "модуль GRAPH.TPU подключён"). Формально эта строка разрешает нам использовать процедуры и функции библиотеки GRAPH.TPU.

Инициализация (включение) графического режима.

До сих пор во время нашей работы за компьютером экран всегда находился в текстовом режиме (поэтому на экране можно было видеть только лишь символы.

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

Program Ex_1;Graph;Gd, Gm: integer;:=VGA; { графический адаптер VGA }

Gm:=VGAhi; { графический режим VGAhi (640x480)x16 }(Gd,Gm,''); { Включить графический режим

Драйвер в текущем каталоге. }GraphResult = grOk then { Если режим включился успешно }(0,0,639,479); { нарисовать отрезок прямой };; { выключений графического режима }

end;.(Gd,Gm:integer; Path:string);

Мы видим, что у процедуры InitGraph три параметра. В качестве первых двух параметров должы стоять имена целых (integer) переменных.

Первый параметр Gd является кодом графического адаптера (т.е. электронной схемы, управляющей выводом информации на экран). Дело в том, что на IBM-совместимых компьютерах применяется ряд стандартных графических адаптеров, носящих названия CGA, EGA, VGA.

По нашей программе можно догадаться, что в используемых нами компьютерах используется адаптер VGA (и компилятор сам "узнаёт" слово VGA и заменит его на нужное целое число).

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

Третий параметр Path является строкой (string), содержащей путь к файлу, который называется egavga.bgi. В этом файле содержится драйвер (такая специальная программа), необходимый для работы мониторов EGA и VGA в графическом режиме. И, как видно из нашего примера, файл этот находится в текущем каталоге.: integer;

Эта функция, при обращении к ней, возвращает специальный код (целое число), в зависимости от того, как прошло выполнение любой графической процедуры или функции. Код 0 (grOk) - успешное выполнение. В приведённом выше примере программы Ex_1, данная функция применяется для проверки того, как прошла инициализация графического режима. Дальнейшая работа этой программы возможна лишь тогда, когда код функции GraphResult равен grOk.

Выключение графического режима.

Всё вышеизложенное необходимо знать каждому грамотному пользователю IBM-совместимых компьютеров. Однако в нашей лабораторной работедостаточно использовать конструкцию, использованную в первом примере, для включения графического режима. (И не страшно, если в ней не всё понятно.)

Система координат.

Для того, чтобы мы могли что-либо нарисовать на экране, нам нужно уметь задавать положение на экране того, что мы рисуем. Для этого с экраном связывается система координат следующего вида в соответствии с рисунком 2

Рисунок 2 - Система координат в pascal.

Обратите внимание. Точка 0,0 находится в левом верхнем углу. Привычная для нас система координат "перевёрнута".

Каждая точка на экране на самом деле представляет собой очень маленький прямоугольник (и поскольку это не совсем точка, то иногда используют специальный термин - "пиксел"). Количество точек (пикселов), умещающихся на экране по вертикали и горизонтали, называют разрешающей способностью. Разрешающая способность экрана в режиме VGAhi - 640x480. Это означает, что по горизонтали на экране умещается 640 точек, а по вертикале - 480.

2 Процедуры и функции графического режима


2.1 Графические процедуры

(x,y: integer; St,En,R: word); {рисование дуги, где x,y - коорд. центра дуги, R - радиус, St, En - нач. и конечный углы. вида в соответствии с рисунком 3}

Рисунок 3 - Процедура Arc

; {очистка экрана}(x,y: integer; R: word); {окружность радиуса R cцентром в точке (x,y) }; {закрытие графики}(gd,gm: integer; Path: string); {инициализация графики, где- графический драйвер,- графический режим,- путь размещения файла

с расширением. bgi. }(x1,y1,x2,y2: integer); {рисование линии, проходящей через две точки: с координатами (x1,y1) и (x2,y2) }(dx,dy: integer); {рисование линии: dx, dy - приращения координат к координатам текущей позиции курсора в соответствии с рисунком 4}

Рисунок 4 - Процедура LineRel.

(x,y: integer); {рисование линии, проходящую через текущую

позицию курсора и точку с координатами (x,y) }(x,y: integer); {задание координат текущей точки}(T: string); {вывод текста в текущую точку}(x,y: integer; T: string); {вывод текста в точку с координатами х, у}(x1,y1,x2,y2: integer); {рисование прямоугольника: (x1,y1) и (x2,y2) - координаты противоположных вершин в соответствии с рисунком 5}

Рисунок 5 - Процедура Rectangle

(x,y: integer; c: word); {выводит точку с координатами (х, у) цветом с}

 

.2 Графические функции

- определяет максимальный размер экрана по оси x.- определяет максимальный размер экрана по оси y.- координата текущей позиции курсора по оси x.- координата текущей позиции курсора по оси y.

Машинные координаты.

Начало машинной системы координат, направление осей, а также максимальные значения координат монитора в соответствии с рисунком 6

Рисунок 6 - Машинная система координат

На рисунке приведена также машинная (xm, ym) и физическая (x,y) системы координат. Для изображения на экране точки с физическими координатами (x,y) необходимо определить ее машинные координаты (xm, ym). Расчетные формулы имеют следующий вид (попробуйте самостоятельно получить эти формулы):

xm=x0+x*Mx,=y0-y*My,

где Mx, My-масштабы соответственно по осям x и y, которые показывают число пикселей в одной физической единице,, y - физические координаты точки,, ym - машинные координаты точки,, y0 - машинные координаты начала физической системы координат.

Пример. Нарисовать через весь экран горизонтальную и вертикальную линии, пересекающиеся в центре монитора.

Этапы разработки программы сведены в таблицу.

Таблица 1 - Разработка программы

Этапы программирования

Выполнение

Постановка задачи

Нарисовать через весь экран горизонтальную и вертикальную линии, пересекающиеся в центре монитора.

Математическое описание              Изобразим вид экрана с указанием координат требуемых линий в соответствии с рисунком 7  

Рисунок 7 - Математическое описание.

Разработка структограммы

Описание gd,gm: integer Иммитация графики Рисование линии Закрытие графики

Написание программы

Program P5; Uses graph; {подключение граф. модуля} Var gd,gm: integer; Begin gd: =detect; {определение граф. драйвера} InitGraph (gd,gm,’ ‘); {инициализация графики} Line (0, round (GetMaxY/2), GetMaxX, Round (GetMaxY/2)); {гориз. лин. } Line (round (GetMaxX/2), 0,Round (GetMaxX/2), GetMaxY);{вертик. лин. } Readln; {пустой ввод} CloseGraph; {закрытие графики} End.

Отладка и получение результатов

Выполнить самостоятельно


Модуль Graph

ТР обладает достаточно разнообразными средствами для работы со стандартным VGA экраном (возможно также использование и и других типов видеоадаптеров).адаптер имеет разрешение 640х480 пиксел (точка (0,0) в левом верхнем углу экрана), 16 цветов.

Перед началом работы с графикой необходимо ее инициализировать, а по окончании - "закрыть". Все графические процедуры и функции находятся в модуле Graph, поэтому также необходимо его подключение.

Общая структура графической программы:

Uses crt, graph;

var Gd, Gm: Integer;: = Detect;(Gd, Gm, 'c: \bp\bgi');

...

{Здесь построение изображения}

...;;.

Путь c: \bp\bgi указывает расположение файла egavga. bgi (драйвер графического адаптера). На разный компьютерах этот путь может быть разным. Если файл egavga. bgi поместить в каталог с программой, то путь можно не указывать.

Основные графические процедуры и функции:

Построение фигур(x,y,c) - отображает на экране точку с координатами (x,y) и цветом c(x1,y1,x2,y2) - рисует линию с началом в точке (x1,y1) и концом - (x2,y2)(x1,y1,x2,y2) - рисует контур прямоугольника с диагональю (x1,y1) - (x2,y2)(x1,y1,x2,y2) - рисует закрашенный прямоугольник с диагональю (x1,y1) - (x2,y2)(x,y,r) - рисует окружность с центром (x,y) и радиусом r(x,y,ba,ea,xr,yr) - рисует дугу эллипса с центром в (x,y), горизонтальным и вертикальным радиусом xr и yr, и начальным и конечным углом ba и ea(x,y,xr,yr) - рисует закрашенный эллипс с центром в (x,y), горизонтальным и вертикальным радиусом xr и yr

Определение цветов и стилей(x,y) - возвращает цвет пиксела с координатами (x,y)(c) - устанавливает цвет изображения (для линий)(p,c) - устанавливает текущий стиль p и цвет c (для "закрашенных" фигур)(x,y,b) - закрашивает замкнутую область с внутренней точкой (x,y) и цветом контура b

Работа с текстом(x,y,st) - выводит на экран строку st с позиции (x,y)(f,d,s) - устанавливает шрифт f, его направление d и размер

Сообщения об ошибкахGraphErrorMsg (ErrorCode: integer): String; Возвращает строку сообщения об ошибке для заданного кода ErrorCode.GraphResult: integer; Возвращает код ошибки для последней графической операции.

Определение адаптера, инициализация и переход между текстом и графикойDetectGraph (var GraphDriver, GraphMode: integer); Проверяет аппаратуру и определяет какой графический драйвер и в каком режиме используется (тип адаптера - в GraphDriver, режим - GraphMode).GetDriverName: string; oзвращает строку с именем текущего драйвера.InitGraph (var GraphDriver: integer; var GraphMode: integer; PathToDriver: String); Инициализирует графическую систему и устанавливает устройство в графический режим. PathToDriver - полный путь к драйверу. bgi, обычно 'c: \tp\bgi'. Если путь опущен (''), то драйвер должен находится в текущем каталоге.

function RegisterBGIfont (Font: pointer): integer; Регистрирует шрифт BGI для графической системы. Зарегистрированный фонт может использоваться в вызове SetTextStyle. Он может быть загружен с диска в кучу или преобразован в. obj файл (с помощью binobj. exe) и связан в файл. exe. В случае ошибки функция возвращает отрицательное значение.  <#"602069.files/image012.gif">

Рисунок 8 - Перенос объекта.

 

.1.1 Алгоритм переноса объекта

• Нарисовать объект;

• зафиксировать положение объекта на экране;

• нарисовать объект цветом фона экрана;

• изменить координаты по оси ОХ на dx и/или по оси OY на dy и нарисовать объект выбранным цветом рисования.

Пример.

Перенос объекта - равностороннего треугольника с основанием 60 и высотой 50 пикселей - из левого верхнего угла экрана в правый нижний угол экрана:

setcolor(6); {рисуем объект)(0, 50); lineto(60, 50); lineto(30, 0); lineto(0, 50);

delay(5000); {фиксируем положение объекта на экране}(0); {рисуем объект цветом фона экрана}(0, 50); lineto(60, 50); lineto(30, 0); lineto(0, 50);(6); {рисуем объект выбранным цветом, изменив его координаты}

moveto(0+579, 50+429); lineto(60+579, 50+429);(30+579, 0+429); lineto(0+579, 50+429)

 

3.1.2 Создание орнаментов

Используя правила переноса, можно создавать орнаменты различного уровня сложности. Орнамент включает в себя повторяющиеся элементы изображения - базовые фигуры. Количество повторений базовой фигуры определяется переменной цикла, для которой задаются начальное значение, конечное значение и шаг (значение сдвига по оси ОХ и/или по оси OY).

Пример.

В соответствии с рисунком 9 левой половины представлен орнамент из закрашенных треугольников, полученный копированием базовой фигуры - равностороннего треугольника со стороной 60 пикселей, построенного в левом верхнем углу экрана, по оси ОХ

Рисунок 9 - Перенос, создание орнаментов

(6);:=0; {переменная, определяющая значение сдвига по оси ОХ}

repeat(0+i, 50); lineto(60+i, 50);(30+i, 0); lineto(0+i, 50);(1, 6); floodfill(30+ i , 20, 6);

i:=i+60i>640;

Так как перенос базовой фигуры осуществляется в одном направлении (по оси ОХ), то используется одна циклическая конструкция repeat ... until. Переменная цикла i принимает начальное значение 0, изменяется с шагом 60 до тех пор, пока ее значение не станет больше 640.

В соответствии с рисунком 9 правой половины представлен орнамент из закрашенных треугольников, полученный копированием по оси ОХ и по оси OY базовой фигуры (равностороннего треугольника):

(6);:=0; {переменная, определяющая значение сдвига по оси OY}:=0; {переменная, определяющая значение сдвига по оси ОХ}

repeat(0+i, 50+j); lineto(60+i, 50+j);(30 + i, 0 + j); lineto(0+i,50+j);(1, 6); floodfill (30 + i, 20 + j, 6);:=i+60i > 640;:=j+50j>479;

Так как перенос базовой фигуры производится и по оси ОХ, и по оси ОY, то для создания орнамента используются два цикла с двумя переменными: i (по горизонтали) и j (по вертикали).

графика паскаль декартовый полярный

3.1.3 Моделирование движения

Используя правила переноса, можно моделировать движение объекта на экране. Для этого необходимо сначала определить закон движения: по горизонтали (для координаты х) и/или по вертикали (для координаты у). Для организации движения используется циклическая конструкция в зависимости от выбранного шага (сдвига).

Алгоритм движения объекта по горизонтали:

) задать начальное значение переменной х - значение сдвига по оси;

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

{нарисовать объект выбранным цветом рисования;

зафиксировать положение объекта на экране;

нарисовать объект цветом фона экрана;

х:= х + dx}

Ниже представлен фрагмент программы перемещения по горизонтали объекта - равностороннего треугольника со стороной 60 пикселей, построенного в верхнем левом углу экрана:

ог х: =0 to 639 do {движение по горизонтали с шагом 1}

begin(6); {рисуем объект}(0+x, 50); lineto(60+x, 50);

lineto(30+x, 0); lineto(0+x, 50);(lOO); {фиксируем положение объекта на экране}(0); {рисуем объект цветом фона экрана}

moveto(0+x, 50); lineto(60+x, 50);(30+x, 0); lineto(0+x, 50);

end;

3.2 Поворот объекта


Точки можно повернуть на заданный угол а относительно начала координат. Если точка на плоскости задана координатами (x, у), то в результате поворота на угол а ее координаты (X, У) будут определяться по формулам:

= х * cos а - у * sin а,

У = х * sin а + у * cos а.

Положительное значение угла а соответствует повороту против часовой стрелки, отрицательное - по часовой стрелке в соответствии с рисунком 10.

Рисунок 10 - Поворот объекта на угол а.

При организации поворота необходимо учитывать, что начало системы координат в графическом режиме находится в левом верхнем углу экрана, ось OY направлена вниз, ось ОХ - вправо. Тогда если поместить начало декартовой системы координат O1ху в точку O1(a, b) и направить ось О1у вверх, то связь между координатами х и у и координатами X, У одной и той же точки М будет выражаться формулами:

= а + х,

У = b - y

в соответствии с рисунком 11.

Рисунок 11 - Начало системы координат в графическом режиме.

Таким образом, при организации поворота относительно нового центра необходимо учитывать приведенные выше формулы:

= а + х * cos а - у * sin а,

У = b - x * sin a - у * cos а.

 

.2.1 Алгоритм поворота объекта

• Нарисовать объект;

• зафиксировать положение объекта на экране;

• нарисовать объект цветом фона экрана;

• изменить координаты, используя формулы поворота, и нарисовать объект выбранным цветом рисования.

Пример.

Поворот объекта - равностороннего треугольника со стороной 60 пикселей на заданный угол а - 90' относительно центра экрана (режим 640x480) в соответствии с рисунком 12.

Рисунок 12 - Поворот равностороннего треугольника.

setcolor(6); {рисуем объект}

moveto(320, 240); lineto(60+320, 240);(30+320, 240-50); lineto(320, 240);(5000); {фиксируем положение объекта на экране}(0); {рисуем объект цветом фона экрана};(320, 240); lineto (60+320, 240);(30+320, 240-50); lineto(320, 240);

{рисуем объект выбранным цветом рисования, изменив координаты}

setcolor(6);:=0*cos(pi/2)-0*sin(pi/2); y1:=0*sin(pi/2)+0*cos(pi/2);(320+round(x1), 240-round(y1));:=60*cos(pi/2)-0*sin(pi/2); y1:=60*sin(pi/2)+0*cos(pi/2);(320+round(x1), 240-round(y1));:=30*cos(pi/2)-50*sin(pi/2); y1:=30*sin(pi/2)+50*cos(pi/2);(320+round(x1), 240-round(у1));:=0*cos(pi/2)-0*sin(pi/2); y1:=0*sin(pi/2)+0*cos(pi/2);(320+round(x1), 240-round(y1));

Определение новых координат точки, полученных в результате поворота на угол а, можно оформить в виде функции пользователя. Тогда алгоритм построения треугольника, полученного в результате поворота и сходного изображения на угол а = 90', запишется в более компактном виде:

function х(а, Ь, с: integer): integer;

х:=round(a+cos(c*pi/180)-b*sin(c*pi/180));;y(a, b, c: integer): integer;:=round(a*sin(c*pi/180)+b*cos(c*pi/180));;(320+x(0, 0, 90), 240-y(0, 0, 90));(320+x(60, 0, 90), 240-y(60, 0, 90));(320+x(30, 50, 90), 240-y(30, 50, 90));(320+x(0, 0, 90), 240-y(0, 0, 90));

 

.2.2 Создание орнаментов

Используя правила поворота, можно создавать базовые фигуры для орнаментов, состоящие из одинаковых элементов. Например, если алгоритм поворота треугольника на угол 90' повторить для а = 180', 270', то получим фигуру в соответствии с рисунком 13а, которую можно использовать в качестве базовой для построения линейного орнамента в соответствии с рисунком 3.6.

Рисунок 13 - Поворот, создание орнаментов.

 

.2.3 Моделирование движения

Используя правила поворота, можно моделировать движение объекта на экране.

Алгоритм движения объекта относительно заданной точки:

) задать начальное значение переменной i - угла поворота;

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

{нарисовать объект;

зафиксировать положение объекта на экране;

нарисовать объект цветом фона экрана;

изменить координаты объекта по формулам поворота;

:= i + di}

Пример.

Поворот треугольника относительно центра экрана (режим 640x480):

i:=0 to 360 do {угол поворота изменяется от 1 до 360 градусов}

begin(6); {рисуем объект}{320+х(0, 0, i), 240-у(0, 0, i));(320+х(60, 0, i), 240-у(60, 0, i));(320+х(30, 50, i), 240-у(30, 50, i));(320+х(0, 0, i), 240-у(0, 0, i));

delay(100); {фиксируем положение объекта на экране}(O); (рисуем объект цветом фона экрана)

moveto(320+х(0, 0, i), 240-у(0, 0, i));(320+х(60, 0, i), 240-у(60, 0, i));(320+х(30, 50, i), 240-у(30, 50, i));(320+х(0, 0, i), 240-у(0, 0, i));

end;

 

.3 Масштабирование объекта


Заданный объект можно масштабировать, т. е. увеличить в кх раз по оси ОХ и в ky раз по оси OY. Масштабирование производится относительно начала координат. Если масштабные коэффициенты меньше 1, то объект получается меньше и ближе к началу координат. Если масштабные коэффициенты больше 1, то объект становится больше и отдаляется от начала координат. Новые координаты (X, У) каждой точки объекта определяются соотношениями: X = кx*x, Y = кy*у.

Пример.

Масштабирование объекта - равностороннего треугольника со стороной 60 пикселей:

setcolor(6); {рисуем объект}(100, 50); lineto(70, 100); lineto(130, 100); lineto(100, 50);

{рисуем объект, изменив его координаты}

moveto(round(1.5*100), round(1.5*50));(round(1.5*70) , round(1.5*100));(round(1.5*130) , round(1.5*100));(round(1.5*100), round(1.5*50))

Коэффициент масштабирования по оси ОХ и по оси OY равен 1,5. Поэтому треугольник увеличится в 1,5 раза и отдалится от начала координат.

Тренировочные задания

. Составить программу построения следующих линейных орнаментов в соответствии с рисунком 14

Рисунок 14 - линейные орнаменты.

. Составить программу построения фигур, образованных последовательным поворотом на 90', 180', 270' базовой фигуры:

Базовая фигура в соответствии с рисунком 15

Рисунок 15 - Базовая фигура

Результат в соответствии с рисунком 16

Рисунок 16 - Результат

4. Пространственная графика


При построении графических объектов на экране, всегда возникает задача с их перемещением или трансформацией. Как правило, это остаётся только на уровне вопроса. Попробуем продвинуться немного дальше.

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

Любое естественное преобразование плоскости можно представить в виде произведения трёх преобразований: переноса, растяжения и вращения относительно начала координат. Соответственно эти преобразования можно записать в виде произведения матрицы на вектор-столбец, или вектор-строку. Так как сейчас рассматриваем преобразования плоскости или двумерного пространства, то такие действия можно описать матрицей 3х3, для преобразований в пространстве используется матрица 4х4.

Лирическое отступление. Что такое матрица и с чем её едят.

Матрица 3х3 ничто иное как таблица чисел, состоящая из 3х стобцов и 3х строк, а вектор-столбец это столбец из 3х чисел в соответствии с рисунком 17.

Рисунок 17 - Матрица 3х3.

Числа в скобках означают позицию, в которой находится этот элемент, номер строки и столбца соответственно. В общем виде, любой элемент матрицы A можно записать как A(I,J), где I - строка, J - столбец.

С матрицами можно выполнять математические операции, рассмотрим некоторые из них.

·              Сложение

C(I,J)=A(I,J)+B(I,J)

·              Умножение матрицы A на некоторое число K (скаляр)

(I,J)=K*A(I,J)

·              Умножение матрицы A на вектор-столбец E, в результате получится вектор-столбец D

(I)=A(I,1)*D(1)+A(I,2)*D(2)+A(I,3)*D(3)=SUM(K)(A(I,K)*D(K))

·              Умножение матрицы A на матрицу B

C(I,J)=A(I,1)*B(1,I)+A(I,2)*B(2,I)+A(I,3)*B(3,I)=SUM(K)(A(I,K)*B(K,J))

 

.1 Перенос


Точка с координатами (X,Y) переводится в точку с новыми координатами (X',Y') с помощью вектора (TX,TY)

·              X' = 1 * X + 0 * Y + TX

·              Y' = 0 * X + 1 * Y + TY

матрица этого преобразования в соответствии с рисунком 18

Рисунок 18 - Матрица 3х3, перенос.

 

.2 Растяжение


При таком преобразовании координата X умножается на SX, а Y координата точки на SY

·              X' = SX * X + 0 * Y + 0

·              Y' = 0 * X + SY * Y + 0

·             

этому преобразованию соответствует матрица в соответствии с рисунком 19


Рисунок 19 - Матрица 3х3, растяжение.

Обычно SX и SY положительны, но если одно из них отрицательно, то это приводит дополнительно к отражению, напирмер, если SX=-1 и SY=1, то точка отражается относительно оси Y.

 

.3 Вращение относительно начала координат


Если необходимо повернуть плоскость на некоторый угол TETA против часовой стрелки (как это принято в математике) относительно начала координат, то уравнения, определяющие такие преобразования, имеют вид:

·             
X' = COS(TETA) * X - SIN(TETA) * Y + 0

·              Y' = SIN(TETA) * X + COS(TETA) * Y + 0

и матрица матрица в соответствии с рисунком 20:

Рисунок 20 - Матрица 3х3, вращение относительно начала координат.

 

.4 Обратное преобразование


Для каждого преобразования существует обратное преобразование, которое восстановит первоначальные позиции точек. Исходя из теории матрице A соответсвует матрица A^(-1). Предыдущие преобразования настолько элементарны, что нет необходимости обращать матрицу, достаточно выполнить аналогичные преобразования с инверсным параметром.

1.   перенос точки (TX,TY) и противоположные ему (-TX,-TY);

2.      растяжение плоскости (SX,SY) и уменьшение размера (1/SX,1/SY), обратите внимание на то что на ноль делить нельзя, хотя растяжение по одной из координат на 0 - ничего хорошего не даёт. Наверняка такого не случится иначе плоскость просто превратится в прямую;

.        поворот на угол TETA и противоположный ему -TETA;

5. Фрактальная графика


Фрактал (лат. fractus - дробленый, сломанный, разбитый) - термин, означающий геометрическую фигуру, обладающую свойством самоподобия, то есть составленную из нескольких частей, каждая из которых подобна всей фигуре целиком. В более широком смысле под фракталами понимают множества точек в евклидовом пространстве, имеющие дробную метрическую размерность (в смысле Минковского или Хаусдорфа), либо метрическую размерность, строго большую топологической.

Фрактал - это бесконечно самоподобная геометрическая фигура, каждый фрагмент которой повторяется при уменьшении масштаба.

Нередко то, что мы наблюдаем в природе, интригует нас бесконечным повторением одного и то же узора, увеличенного или уменьшенного во сколько угодно раз. Например, у дерева есть ветви. На этих ветвях есть ветки поменьше и т. д. Теоретически, элемент «разветвление» повторяется бесконечно много раз, становясь все меньше и меньше. Так проявляется характерное для фракталов свойство самоподобия.

 

.1 Классические фракталы


Самоподобие

Разделим отрезок прямой на N равных частей. Тогда каждую часть можно считать копией всего отрезка, уменьшенной в 1/r раз. Очевидно, N и r связаны соотношением N r = 1 в соответствии с рисунком 21. Если квадрат разбить на N равных квадратов (с площадью, в 1/r2 раз меньше площади исходного), то соотношение запишется как Nr2 = 1. Если куб разбить на N равных кубов (с объемом, в 1/r3 раз меньше объема исходного), то соотношение примет следующий вид: Nr3 = 1. Заметим, что размерность d объекта, будь то одномерный отрезок, двумерный квадрат или трехмерный куб, появляется как степень r в соотношении между N, числом равных подобъектов, и коэффициентом подобия r. А именно:

Nrd = l.

Множества, построенные в соответствии с рисунком 21, обладают целой размерностью. Зададимся вопросом, возможно ли такое построение, при котором показатель d в равенстве (5.1) не является целым, то есть такое, что при разбиении исходного множества на N непересекающихся подмножеств, полученных масштабированием оригинала с коэффициентом r, значение d не будет выражаться целым числом. Ответ, как мы убедимся - решительное да! Такое множество называют самоподобным фракталом. Величину d называют фрактальной (дробной) размерностью или размерностью подобия. Явное выражение для d через N и r находится логарифмированием обеих частей (5.1)


Логарифм можно взять по любому положительному основанию, отличному от единицы, например по основанию 10 или по основанию е ≈ 2,7183.

Рисунок 21 - Связь размерности и коэффициента подобия.

Фрактал по-прежнему может быть объединением непересекающихся подмножеств, полученных масштабированием оригинала, но коэффициенты подобия уже не обязательно одни и те же для всех подмножеств. В этом случае формула для размерности (5.2) неприменима.

Термин фрактал был впервые введен в 1975 году Бенуа Мандельбротом, пионером в области фрактальной геометрии. Многие математические идеи оформились задолго до этого, еще в XIX-м веке, в работах Георга Кантора, Карла Вейерштрасса, Джузеппе Пеано и других. Понятие фрактальной (дробной) размерности появилось в 1919 году в работе Феликса Хаусдорфа. Тем не менее, именно Мандельброт объединил эти идеи и положил начало систематическому изучению фракталов и их приложений.

 

.1.1 Снежинка Коха

Граница снежинки, придуманной Гельгом фон Кохом в 1904 году частей в соответствии с рисунком 22, описывается кривой, составленной из трех одинаковых фракталов размерности d ≈ 1,2618. Каждая треть снежинки строится итеративно, начиная с одной из сторон равностороннего треугольника. Пусть K0 - начальный отрезок. Уберем среднюю треть и добавим два новых отрезка такой же длины в соответствии с рисунком 23. Назовем полученное множество К1. Повторим данную процедуру многократно, на каждом шаге заменяя среднюю треть двумя новыми отрезками. Обозначим через Кn фигуру, получившуюся после n-го шага.

Интуитивно ясно, что последовательность кривых


сходится к некоторой предельной кривой К. Предположим, что кривая К существует, и рассмотрим некоторые ее свойства.

Рисунок 22 - Снежинка Коха

Если взять копию К, уменьшенную в три раза (r = 1/3), то все множество К можно составить из N = 4 таких копий. Следовательно, отношение самоподобия (5.1) выполняется при указанных N и r, а размерность фрактала будет:

d = log(4)/log(3)≈ 1,2618.

Еще одно важное свойство, которым обладает граница снежинки Коха ее бесконечная длина (см. теорему 5.1.1). Обычно гладкие или хотя бы кусочно-гладкие, кривые всегда имеют конечную длину (в чем можно убедиться интегрированием). Мандельброт в этой связи опубликовал ряд увлекательных работ, в которых исследуется вопрос об измерения длины береговой линии Великобритании. В качестве модели он использовал фрактальную кривую, напоминающую границу снежинки за тем исключением, что в нее введен элемент случайности, учитывающий случайность в природе. В результате оказалось, что кривая, описывающая береговую линию, имеет бесконечную длину.

Рисунок 23 - а) К0, б) К1 в) К2 , г) K3.

Теорема 5.1.1 Граница снежинки Коха имеет бесконечную длину.

Доказательство. Достаточно показать, что каждый из трех идентичных фракталов К, полученных итерациями в соответствии с рисунком 23, имеет бесконечную длину. Пусть исходный отрезок К0 имеет единичную длину. Тогда длина кривой К1 равна 4/3. Длина кривой К2 равна 42/32. Продолжая таким образом имеем, что кривая Кп после n-го шага имеет длину 4n/3n. Следовательно, длина предельной кривой К равна бесконечности:

5.1.2 Ковер Серпинского.

Еще один пример простого самоподобного фрактала - ковер Серпинского в соответствии с рисунком 24, придуманный польским математиком Вацлавом Серпинским в 1915 году. Сам термин ковер (gasket) принадлежит Мандельброту. В способе построения, следующем ниже, мы начинаем с некоторой области и последовательно выбрасываем внутренние подобласти.

Рисунок 24 - Ковер Серпинского.

Пусть начальное множество S0 - равносторонний треугольник вместе с областью, которую он замыкает. Разобьем S0 на четыре меньшие треугольные области, соединив отрезками середины сторон исходного треугольника. Удалим внутренность маленькой центральной треугольной области. Назовем оставшееся множество S1 в соответствии с рисунком 25. Затем повторим процесс для каждого из трех оставшихся маленьких треугольников и получим следующее приближение S2. Продолжая таким образом, получим последовательность вложенных множеств Sn, чье пересечение и образует ковер S.

Рисунок 25 - Построение ковра Серпинского.

Из построения видно, что весь ковер представляет собой объединение N - 3 существенно непересекающихся уменьшенных в два раза копий; коэффициент подобия r = 1/2 (как по горизонтали, так и по вертикали). Следовательно, S - самоподобный фрактал с размерностью:

d = log(3)/ log(2) ≈ 1,5850

Очевидно, что суммарная площадь частей, выкинутых при построении, в точности равна площади исходного треугольника. На первом шаге мы выбросили 1/4 часть площади. На следующем шаге мы выбросили три треугольника, причем площадь каждого равна 1/42 площади исходного. Рассуждая таким образом, мы убеждаемся, что полная доля выкинутой площади составила:

/4 + 3(1/42) + 32(1/43) + - - - + Зn-1 (1/4n) + …

Эта сумма равна 1. Следовательно, мы можем утверждать, что оставшееся множество S, то есть ковер, имеет площадь меры нуль. Это выделяет множество S в разряд «совершенного», в том смысле, что оно разбивает свое дополнение на бесконечное число треугольных областей, обладая при этом нулевой толщиной.

5.1.3 Губка Менгера.

Существуют и трехмерные аналоги ковров. Следуя Мандельброту, мы называем такие множества губками. Губка, в соответствии с рисунком 26, называется губкой Менгера, по имени Карла Менгера. Это самоподобный фрактал с N = 20 и r = 1/3. Его размерность равна:

d = log(20)/ log(3) ≈ 2,7268.

Такая губка имеет объем меры нуль.

Рисунок 26 - Построение губки Менгера

 

.2 Кривые Пеано


Снежинку Коха и другие непрерывные кривые на плоскости, полученные с помощью L-систем, объединяет то, что их размерность удовлетворяет неравенству: 1 ≤ d < 2. Возникает вопрос, существует ли кривая размерности d= 2? Этот вопрос примечателен не только тем, что ответ на него положительный, но и тем, что он был разрешен Джузеппе Пеано еще в 1890 году. Пеано построил непрерывную функцию, чья область определения - отрезок, а область значений - квадрат на плоскости. Соответствующая линия называется кривой Пеано или кривой, заполняющей плоскость. Кривая Пеано не является фракталом в определении Мандельброта, но тем не менее интересна как пример функции, отображающей множество заданной размерности на множество большей размерности. Это и другие подобные открытия примерно того же времени, в особенности работы Вейерштрасса и Кантора, оказали огромное влияние на дальнейшее развитие математического анализа. Опоры на одну только интуицию уже недостаточно. Понятие кривой Пеано, безусловно, не является интуитивным, а изначально появилось из чисто аналитических рассуждений.

Введем некоторые обозначения, удобные при изучении свойств кривой Пеано. Пусть I - единичный отрезок [0,1], S - единичный квадрат I х I, то есть

S= {(х,у): х,у I}

При построении используется представление точек отрезка I в системе счисления по основанию 9. Первый шаг состоит в том, чтобы разбить S на девять равных частей. Непрерывная кривая, которая проходит через все квадраты, строится в соответствии с рисунком 27 сплошной линией со стрелками. Пунктирная линия указывает, в каком порядке обходятся квадраты. Квадраты занумерованы числами 0, 1, 2, 3, 4, 5, 6, 7 и 8, в соответствии с порядком, в котором линия их пересекает. Полученная линия представляет собой первую итерацию построения.

Рисунок 27 - Первая итерация построения Пеано, z - Р1(х)

Далее, каждый из этих девяти квадратов разбивается на девять равных подквадратов, которые нумеруются аналогично тому, как это было сделано на первой итерации. Получаем линию, которая проходит через девять подквадратов таким образом, что ее начальная и конечная точки ложатся на кривую предыдущего уровня. Это позволяет нам занумеровать подквадраты числами 0, 1, 2, 3, 4, 5, 6, 7 и 8 внутри каждого квадрата. Повторим описанную процедуру бесконечно, каждый раз разбивая квадраты на девять подквадратов, строя кривую через все подквадраты так, чтобы ее концы ложились на линию предыдущего уровня, и занумеровывая их. В соответствии с рисунком 28 изображено, как выглядит после двух итераций квадрат с номером 4.

Фактически, кривая Пеано, переводящая I в S, определяется отображением, которое сопоставляет точке хI , записанной в девятиричной системе счисления 0, х1х2х3..., точку Р(х)  S по следующему правилу:

Р(х) - в квадрате под номером х1 после первой итерации,

Р(х) - в квадрате под номером х1x2 после второй итерации,

Р(х) - в квадрате под номером х1x2x3 после третьей итерации,


Рисунок 28 - Вторая итерация построения Пеано, z = P2(x)

Теорема: Отображение Пеано есть непрерывная функция, переводящая интервал I в квадрат S. Более того, последовательность отображений P1(x), P2(x), Р3(х), ... сходится:

lim Рп(х) = Р(х), х I.

п→∞

Доказательство. Мы докажем, более сильное утверждение, чем просто существование предела в (5.3). Именно, мы установим, что сходимость на отрезке J - равномерная, из чего можно будет сделать вывод о непрерывности предельной функции. Для установления равномерной сходимости применим критерий Коши в следующей формулировке.

Для каждого ε > 0 существует такой номер К > 0, что при т> п> К выполняется неравенство

d(Pm(x), Рп (х)) < ε, для всех х  I

где d(Pm(x),Pn(x)) - евклидово расстояние (длина прямой) между точками Рт(х) и Рп(х).

Пусть 0 <п<т. Рассмотрим сетку Gn, натянутую на точки вида: {(k/Зn, l/Зn), 0≤k, l≤Зn}. Пусть N = 32n, и точки х0 = 0 < х1 < х2 <...< xn = 1 разбивают отрезок [0,1] на 32n интервалов равной длины. Заметим, что Рп(х) перемещается по диагонали одного из квадратов сетки Gn при изменении х от xj до xj+1. С другой стороны, Рт(х) обязательно находится в том же квадрате, если т>п. Следовательно, для х [xj,xj+1]:

d(Pm(x),Pn(x))<

Приведенное рассуждение не зависит от того, какому именно интервалу [xj,xj+1] принадежит точка x, а значит, неравенство верно для всех х  I. Таким образом, выбрав К из условия < ε, мы удовлетворим неравенству (5.4) при m > n > К.

Отображение Пеано не устанавливает взаимно однозначного соответствия между точками множеств I и S. Это в принципе невозможно сделать с помощью непрерывной функции. Одной точке вдоль общего ребра двух квадратов соответствуют две точки отрезка. Более того, одной точке на стыке четырех квадратов соответствуют целых четыре точки отрезка.

Другие известные кривые, заполняющие плоскость, принадлежат Гильберту, Серпинскому и Госперу в соответствии с рисунками 29, 30, 31.

Рисунок 29 - Кривая Гильберта после 4-х итераций

Рисунок 30 - Кривая Серпинского после 3-х итераций

Рисунок 31 - Кривая Госпера после 3-х итераций.

 

.3 Пыль Кантора


Классически множеством Кантора, или пыль Кантора, названо по имени Георга Кантора, который описал его в 1883 году. Существование пыли Кантора отмечалось до этого Генри Смитом в 1875 году или еще ранее. Фрактальные свойства пыли Кантора имеют огромное значение, особенно учитывая тот факт, что многие изветные фракталы являются близкими родственниками этого множества.

Построение классической пыли Кантора начинается с выбрасывания средней трети(не включая концы) единичного отрезка. То есть исходное множество есть отрезок [0,1], и первый шаг состоит в удалении открытого интервала (1/3,2/3). На следующем и всех остальных шагах мы выкидываем среднюю треть(не включая концы) всех отрезков текущего уровня. Таким образом, мы получаем в соответствии с рисунком 32 последовательность множеств:

Рисунок 32 - Построение пыли Кантора.

С0 = [0,1]

C1 = [0,1/3] U [2/3,1]

С2 = [0,1/9] U [2/9,1/3] U [2/3,7/9) U [8/9,1]


Предельное множество С, которое представляет собой пересечение множеств Сn, п = 0,1,2,..., называется классической пылью Кантора. В дальнейшем мы будем называть его просто канторовой пылью.

Свойства канторовой пыли.

1.      Канторова пыль есть самоподобный фрактал размерности

d = log(2)/ log(3) = 0, 6309,

так как соотношение Nrd = 1 выполняется при N = 2 и r = 1/3.

2.   Канторова пыль не содержит интервалов положительной длины. Это очевидно из построения.

3.   Сумма длин интервалов, удаленных при построении множества С, в точности равна 1. Чтобы показать это, рассмотрим следующее доказательство. Длина первого интервала, который мы выкинули, составляет 1/3. Чтобы получить С2, мы выкинули два интервала, каждый длиной 1/32. На следующем шаге мы выбросили 22 интервалов, каждый длиной 1/33, и т. д. Таким образом, сумма длин удаленных интервалов S составляет:

S = 1/3 + 2/32 + 22/33 + …+ 2n-1/3n + …

Но это выражение можно переписать в виде:

S = (1/3)(1 + 2/3 + (2/3)2 4- (2/3)3 + …-),

и с помощью формулы для суммы геометрической прогрессии, мы получаем:


Можно предположить, что если в С что-нибудь и осталось после удаления всех этих интервалов, то, наверное, не очень много. Однако это не так, что подтверждается следующим свойством.

. Удивительный результат сравнения множества Кантора с интервалом состоит в том, что мощности этих множеств равны. Два множества обладают равной мощностью, если существует взаимно однозначное соответствие между точками этих множеств. В случае конечных множеств данное утверждение тривиально. Для бесконечных множеств, таких как интервал или множество Кантора, понятие мощности требует аккуратного обращения. В качестве простой иллюстрации сказанного достаточно заметить, что отрезки [0,1] и [0,2] - равной мощности, несмотря на то, что второй интервал в два раза длиннее первого. Взаимно однозначное соответствие в этом случае задается отображением f(x) = 2х, где х  [0,1].

Прежде чем приступить к доказательству основной теоремы о мощности множества Кантора, вспомним, как представить точку х отрезка [0,1] в системе счисления с основанием N, N ≥ 2. Разобьем отрезок [0,1] на N равных интервалов, каждый длины 1/N. Пронумеруем эти интервалы следующим образом: 0,1,2,..., N - 1. Если оказалось, что точка х принадлежит интервалу с номером 5, то положим х1 = 5. Затем разобьем этот интервал на N новых интервалов, каждый длины 1/N2. Пронумеруем эти интервалы, как и раньше: 0, 1, 2, ...,N-1. Если точка х принадлежит новому интервалу с номером 3, то положим х2 = 3. Продолжая таким образом, получим бесконечную последовательность , причем каждое значение хп определяет интервал, содержащий х на n-ом шаге процесса разбиения. В результате, число х может быть представлено бесконечной последовательностью:


и каждое такое представление соответствует некоторой точке отрезка. Кратко его записывают следующим образом:

х = 0, х1 x2x3... (по основанию N)

и называют представлением х в системе счисления с основанием N или в N-ичной системе. Очевидно, запись числа в десятичной системе счисления, которой мы привыкли пользоваться, является частным случаем данного определения.

Теорема: Мощность множества Кантора С равна мощности континуума.

Доказательство. Нам необходимо установить взаимно однозначное соответствие между точками из С и точками отрезка [0,1]. Для этого нам потребуется рассмотреть двоичное (по основанию 2), а также троичное (по основанию 3) представления точек отрезка [0,1].

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

Замечаем, что точка попадает в множество Кантора С тогда и только тогда, когда в ее троичном представлении отсутствуют единицы, то есть когда в нем присутствуют только нули и двойки. Тогда искомое соответствие точек из С с точками отрезка [0,1] осуществляется заменой всех двоек в троичном представлении х на единицы. Полученное таким образом двоичное представление определяет некоторое вещественное число у. Например, если х  С есть:

х = 0,202202002... (в троичной системе),

то полагаем

у = 0,101101001... (в двоичной системе).

Описанная процедура определяет взаимно однозначное соответствие между

хС и у [0,1].

2.   Классическая канторова пыль представляет собой пример компактного, совершенного и вполне разрывного множества. Более того, можно утверждать, что топологически классическое множество Кантора определяется как компактное, совершенное и вполне разрывное множество. Это означает, что любое компактное, совершенное и вполне разрывное множество можно непрерывно преобразовать в пыль Кантора, причем существует обратное преобразование, с помощью которого можно восстановить исходное множество. Любое такое множество принято называть множеством Кантора. Не следует думать, однако, что все множества Кантора самоподобны. Более того, даже фрактальная размерность различных самоподобных множеств Кантора не обязательно совпадает.

 

.4 Построение фракталов

 

.4.1 Кривая Коха

 

Рисунок 33 - Кривая Коха.

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

Следующая программа на Turbo Pascal реализует данный метод.

 

5.4.2 Папоротник

Данная программа написана также на Turbo Pascal

Рисунок 34 - Папоротник

Заключение

В результате проделанной мной работы по теме проектирование элективных курсов по информатике на примере элективного курса «Компьютерная графика и геометрическое моделирование» с использованием большого количества учебной и методической литературы, удалось составить программу элективного курса для школьников старших классов. В данной работе описаны основы программирования графики на языке паскаль. После исследования литературы и обучающих программ по теме, получилось подобрать материал, который в последствии может помочь школьникам естественно-математического профиля и абитуриентам поступающим на технические специальности. В курсовой работе были описаны способы решения графических программ и рекомендации к их решениям, составлен элективный курс.

 

Список литературы


1.     Алексеев Е.Р. «Free Pascal и Lazarus. Учебник по программированию». - Москва 2010. - 442 с.

2.      Ерок.А.Н. «Введение в теорию фракталов» - Краснодар, 2009. - 51 с.

.        Андрафанова Н.В. Программирование графики на паскале/Информатика и образование - 2011. - №4. - С. 28-34

.        Сайт по turbo pascal - URL:#"602069.files/image048.gif">

Эффект вращения будет достигаться за счет изменения цвета секторов, например, по часовой стрелке.

Сначала рассмотрим, как разбить круг на секторы:

cos а = x/r, х = r*cos а,

sin а = x/r, х = r*sin а.

Тогда для прорисовки линий сектора необходимо воспользоваться процедурой:

line(х, у, x+round(r*cos(a)),round(r*sin(a)));

Здесь х, у - координаты центра окружности.

Определим точку, чтобы залить сектор. Для того чтобы точка была внутри сектора, возьмем радиус меньше на 2 пикселя, угол - меньше на 2 градуса. Так как при вычислении синуса/косинуса аргументы должны быть в радианах, то получаем:

x:=(r-2)*cos(a-2*pi/180);:=(r-2)*sin(a-2*pi/180);

При переходе к экранным координатам имеем:

floodfill(x+round((r-2)*cos(a-2*pi/180)),y-round((r-2)*sin(a-2*pi/180)),15);

- константа для белого цвета, которым мы рисуем окружность и линии сектора; х, у - координаты центра окружности.

Составим процедуру рисования данного круга. Входными параметрами данной процедуры являются координаты х, у центра круга, количество секторов n, r - радиус окружности, а - угол сектора.

procedure krug(x, у, n, г: integer; a: real);i, b: integer;(15);

circle(x, у, r); {рисуем окружность и первую пинию}(х, у, х+r, у);

Ь:=0; {переменная изменяет значения константы цвета}

for i:=1 to n do

a:=a+2*pi/n;:=b+1; {будем заливать первыми n цветами из значения констант}

line(x, у, x+round(r*соs(а)), y-round(r*sin(a)));(1, b);(x+round((r-2)*cos(a-2*pi/180)), y-round((r-2)*sin(a-2*pi/

180)), 15);;;

Для создания эффекта вращения необходимо, чтобы каждый раз при обращении к процедуре менялось значение угла на 2*pi/n: второй сектор будет закрашен первым цветом, третий сектор - вторым и т. д.

Создадим движение нашего круга справа налево, используя способ, рассмотренный при решении первой задачи:

program animation;graph, crt;n=8; r=50;krug(x, y, n, r: integer; a: real);i, b: integer;(15);(x, y, r);(x, у, x+r, y);:=0;i:=1 to n do:=a+2*pi/n;:=b+1;(x, y, x+round(r*cos(a)), y-round(r*sin(a)));(1, b);(x+round((r-2) *cos(a-2*pi/180)), y-round((r-2)*sin(a-2*pi/

)),15);;;: real;, gm, k, i, b: integer;:=detect;(gd, gm, " );:=640;:=0;(k, 240, n, r, a);;:=k-10;:=a+2*pi/n;(15);(k, 240, n, r, a);(2000);(k-r<=0) or (keypressed);

closegraph;.

. Закрепление пройденного материала

Задание. Написать программу движения окружности так, чтобы внутри ее вращался радиус.

. Домашнее задание

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

Приложение Б


{вращение фигуры}Graph, Crt;

Const N = 24;

Coord = record,Y : Real;;

: Integer;: Integer;: Array [1..N] of Coord; : Coord; { Перемещение }

C : Coord; { Растяжение }: Real; { Угол поворота }: Real; { Приращение размера }

I : Byte;

Tr(P,T:Coord; Var R:Coord); { P какую точку перемещать на какое расстояние

R что будем возвращать }

Type Matrix = Array [1..3,1..3] Of Real;I,J : Byte;: Matrix;I := 1 To 3 Do For J := 1 To 3 Do If I = J Then O[I,J] := 1O[I,J] := 0;[1,3] := T.X;[2,3] := T.Y;

.X := O[1,1] * P.X + O[1,2] * P.Y + O[1,3];.Y := O[2,1] * P.X + O[2,2] * P.Y + O[2,3];;

Sr(P,S:Coord; Var R:Coord); { P какую точку перемещать масштаб

R что будем возвращать }

Type Matrix = Array [1..3,1..3] Of Real;I,J : Byte;: Matrix;I := 1 To 3 Do For J := 1 To 3 Do If I = J Then O[I,J] := 1O[I,J] := 0;

[1,1] := S.X;[2,2] := S.Y;

.X := O[1,1] * P.X + O[1,2] * P.Y + O[1,3];.Y := O[2,1] * P.X + O[2,2] * P.Y + O[2,3];;

Ur(P:Coord; Teta:Real; Var R:Coord); { P какую точку перемещать на какое расстояние

R что будем возвращать }

Type Matrix = Array [1..3,1..3] Of Real;I,J : Byte;: Matrix;I := 1 To 3 Do For J := 1 To 3 Do If I = J Then O[I,J] := 1O[I,J] := 0;

[1,1] := COS(Teta);[1,2] := SIN(Teta);[2,1] := -SIN(Teta);[2,2] := COS(Teta);

.X := O[1,1] * P.X + O[1,2] * P.Y + O[1,3];.Y := O[2,1] * P.X + O[2,2] * P.Y + O[2,3];;

DrawTriangle;(LightGray);I := 1 To N-1 Do Line(Trunc(A[I].X), Trunc(A[I].Y), Trunc(A[I+1].X), Trunc(A[I+1].Y));(Trunc(A[N].X), Trunc(A[N].Y), Trunc(A[1].X), Trunc(A[1].Y));;

HideTriangle;I : Byte;(Black);I := 1 To N-1 Do Line(Trunc(A[I].X), Trunc(A[I].Y), Trunc(A[I+1].X), Trunc(A[I+1].Y));(Trunc(A[N].X), Trunc(A[N].Y), Trunc(A[1].X), Trunc(A[1].Y));;Fig;[ 1].X := -40; A[ 1].Y := -25;[ 2].X := -40; A[ 2].Y := 25;[ 3].X := -30; A[ 3].Y := 25;[ 4].X := -30; A[ 4].Y := 0;[ 5].X := -15; A[ 5].Y := 25;[ 6].X := 0; A[ 6].Y := 0;[ 7].X := 0; A[ 7].Y := 25;[ 8].X := 10; A[ 8].Y := 25;[ 9].X := 10; A[ 9].Y := -25;[10].X := 20; A[10].Y := 0;[11].X := 10; A[11].Y := 25;[12].X := 20; A[12].Y := 25;[13].X := 25; A[13].Y := 10;[14].X := 30; A[14].Y := 25;[15].X := 40; A[15].Y := 25;[16].X := 30; A[16].Y := 0;[17].X := 40; A[17].Y := -25;[18].X := 30; A[18].Y := -25;[19].X := 25; A[19].Y := -10;[20].X := 20; A[20].Y := -25;[21].X := 0; A[21].Y := -25;[22].X := -15; A[22].Y := 0;[23].X := -30; A[23].Y := -25;[24].X := -40; A[24].Y := -25;;

;:= Detect;(grDriver,grMode,'c:\tp\bgi\');

{I := 1 To N Do Begin[I].X := Random(10)*10+100;[I].Y := Random(20)*10+100;;

};

.X := 1.5; C.Y := 1.5;:= Pi/24;:= 0.05;I := 1 To N Do Begin(A[I],C,A[I]);;

NOT(Keypressed) Do Begin

.X := Trunc(GetMaxX/2); L.Y := Trunc(GetMaxY/2);I := 1 To N Do Begin(A[I],U,A[I]);(A[I],L,A[I]);;

; Delay(400); HideTriangle;

.X := -L.X; L.Y := -L.Y;I := 1 To N Do Begin(A[I],L,A[I]);;;

;.

 

Приложение В


Uses Graph, Crt;

N=8;=12;

Coord = record,Y,Z : Real;;

= record,E,C : Word;;

: Integer;: Integer;: Array [1..N] of Coord;: Array [1..M] of Rebro;: Char;: Byte;,C : Coord;, Uy, Uz : Real;

Tr3d(P,T:Coord; Var R:Coord);Matrix = Array [1..4,1..4] Of Real;I,J : Byte;: Matrix;I := 1 To 4 Do For J := 1 To 4 Do If I = J Then O[I,J] := 1O[I,J] := 0;

[1,4] := T.X;[2,4] := T.Y;[3,4] := T.Z;

.X := O[1,1] * P.X + O[1,2] * P.Y + O[1,3] * P.Z + O[1,4];.Y := O[2,1] * P.X + O[2,2] * P.Y + O[2,3] * P.Z + O[2,4];.Z := O[3,1] * P.X + O[3,2] * P.Y + O[3,3] * P.Z + O[3,4];;

Sr3d(P,S:Coord; Var R:Coord);Matrix = Array [1..4,1..4] Of Real;I,J : Byte;: Matrix;I := 1 To 4 Do For J := 1 To 4 Do If I = J Then O[I,J] := 1O[I,J] := 0;

[1,1] := S.X;[2,2] := S.Y;[3,3] := S.Z;

.X := O[1,1] * P.X + O[1,2] * P.Y + O[1,3] * P.Z + O[1,4];.Y := O[2,1] * P.X + O[2,2] * P.Y + O[2,3] * P.Z + O[2,4];.Z := O[3,1] * P.X + O[3,2] * P.Y + O[3,3] * P.Z + O[3,4];;

UX3d(P:Coord; Teta:Real; Var R:Coord);Matrix = Array [1..4,1..4] Of Real;I,J : Byte;: Matrix;I := 1 To 4 Do For J := 1 To 4 Do If I = J Then O[I,J] := 1O[I,J] := 0;[2,2] := COS(Teta);[2,3] := -SIN(Teta);[3,2] := SIN(Teta);[3,3] := COS(Teta);

.X := O[1,1] * P.X + O[1,2] * P.Y + O[1,3] * P.Z + O[1,4];.Y := O[2,1] * P.X + O[2,2] * P.Y + O[2,3] * P.Z + O[2,4];.Z := O[3,1] * P.X + O[3,2] * P.Y + O[3,3] * P.Z + O[3,4];;

UY3d(P:Coord; Teta:Real; Var R:Coord);Matrix = Array [1..4,1..4] Of Real;I,J : Byte;: Matrix;I := 1 To 4 Do For J := 1 To 4 Do If I = J Then O[I,J] := 1O[I,J] := 0;[1,1] := COS(Teta);[1,3] := -SIN(Teta);[3,1] := SIN(Teta);[3,3] := COS(Teta);

.X := O[1,1] * P.X + O[1,2] * P.Y + O[1,3] * P.Z + O[1,4];.Y := O[2,1] * P.X + O[2,2] * P.Y + O[2,3] * P.Z + O[2,4];.Z := O[3,1] * P.X + O[3,2] * P.Y + O[3,3] * P.Z + O[3,4];;

UZ3d(P:Coord; Teta:Real; Var R:Coord);Matrix = Array [1..4,1..4] Of Real;I,J : Byte;: Matrix;I := 1 To 4 Do For J := 1 To 4 Do If I = J Then O[I,J] := 1O[I,J] := 0;[1,1] := COS(Teta);[1,2] := -SIN(Teta);[2,1] := SIN(Teta);[2,2] := COS(Teta);

.X := O[1,1] * P.X + O[1,2] * P.Y + O[1,3] * P.Z + O[1,4];.Y := O[2,1] * P.X + O[2,2] * P.Y + O[2,3] * P.Z + O[2,4];.Z := O[3,1] * P.X + O[3,2] * P.Y + O[3,3] * P.Z + O[3,4];;

Fig;[ 1].X := 10; A[ 1].Y := 10; A[ 1].Z := 10;[ 2].X := 10; A[ 2].Y := 10; A[ 2].Z := -10;[ 3].X := 10; A[ 3].Y := -10; A[ 3].Z := -10;[ 4].X := 10; A[ 4].Y := -10; A[ 4].Z := 10;[ 5].X := -10; A[ 5].Y := 10; A[ 5].Z := 10;[ 6].X := -10; A[ 6].Y := 10; A[ 6].Z := -10;[ 7].X := -10; A[ 7].Y := -10; A[ 7].Z := -10;[ 8].X := -10; A[ 8].Y := -10; A[ 8].Z := 10;[ 1].B := 1; B[ 1].E := 2; B[ 1].C := 10;[ 2].B := 2; B[ 2].E := 3; B[ 2].C := 10;[ 3].B := 3; B[ 3].E := 4; B[ 3].C := 10;[ 4].B := 4; B[ 4].E := 1; B[ 4].C := 10;

[ 5].B := 5; B[ 5].E := 6; B[ 5].C := 13;[ 6].B := 6; B[ 6].E := 7; B[ 6].C := 13;[ 7].B := 7; B[ 7].E := 8; B[ 7].C := 13;[ 8].B := 8; B[ 8].E := 5; B[ 8].C := 13;

[ 9].B := 1; B[ 9].E := 5; B[ 9].C := 7;[10].B := 2; B[10].E := 6; B[10].C := 7;[11].B := 3; B[11].E := 7; B[11].C := 7;[12].B := 4; B[12].E := 8; B[12].C := 7;

;

Draw3D;I : Byte;, YB, XE, YE : Real;I := 1 To M Do Begin(B[I].C);:= A[B[I].B].X;:= A[B[I].B].Y;:= A[B[I].E].X;:= A[B[I].E].Y;( Trunc(XB), Trunc(YB), Trunc(XE), Trunc(YE) );;;Hide3D;I : Byte;, YB, XE, YE : Real;(Black);I := 1 To M Do Begin:= A[B[I].B].X;:= A[B[I].B].Y;:= A[B[I].E].X;:= A[B[I].E].Y;( Trunc(XB), Trunc(YB), Trunc(XE), Trunc(YE) );;;

;

('1-2 ‚а 饭ЁҐ Ї® ®бЁ OZ');('3-4 ‚а 饭ЁҐ Ї® ®бЁ OY');('5-6 ‚а 饭ЁҐ Ї® ®бЁ OX');('7-8 ЏаЁЎ«Ё§Ёвм | Ћв¤ «Ёвм ®ЎкҐЄв');

;

;

.X := 5; C.Y := 5; C.Z := 5;I := 1 To N Do Sr3d(A[I], C, A[I]);.X := 200; L.Y := 200; L.Z := 200;I := 1 To N Do Tr3d(A[I], L, A[I]);:= Detect;(grDriver,grMode,'c:\tp\bgi\');

D;

:= ' ';Key <> #27 Do Begin:= ReadKey;

Key = '1' Then BeginD;

.X := -L.X; L.Y := -L.Y; L.Z := -L.Z;I := 1 To N Do Tr3d(A[I], L, A[I]);

:= Pi/120; For I := 1 To N Do Uz3d(A[i],Uz,A[i]);

.X := -L.X; L.Y := -L.Y; L.Z := -L.Z;I := 1 To N Do Tr3d(A[I], L, A[I]);

D;;

Key = '2' Then BeginD;

.X := -L.X; L.Y := -L.Y; L.Z := -L.Z;I := 1 To N Do Tr3d(A[I], L, A[I]);

:= -Pi/120; For I := 1 To N Do Uz3d(A[i],Uz,A[i]);.X := -L.X; L.Y := -L.Y; L.Z := -L.Z;I := 1 To N Do Tr3d(A[I], L, A[I]);

D;;

Key = '3' Then BeginD;

.X := -L.X; L.Y := -L.Y; L.Z := -L.Z;I := 1 To N Do Tr3d(A[I], L, A[I]);

:= Pi/120; For I := 1 To N Do Uy3d(A[i],Uy,A[i]);

.X := -L.X; L.Y := -L.Y; L.Z := -L.Z;I := 1 To N Do Tr3d(A[I], L, A[I]);

D;;

Key = '4' Then BeginD;

.X := -L.X; L.Y := -L.Y; L.Z := -L.Z;I := 1 To N Do Tr3d(A[I], L, A[I]);

:= -Pi/120; For I := 1 To N Do Uy3d(A[i],Uy,A[i]);

.X := -L.X; L.Y := -L.Y; L.Z := -L.Z;I := 1 To N Do Tr3d(A[I], L, A[I]);D;;

Key = '5' Then BeginD;

.X := -L.X; L.Y := -L.Y; L.Z := -L.Z;I := 1 To N Do Tr3d(A[I], L, A[I]);

:= Pi/120; For I := 1 To N Do Ux3d(A[i],Ux,A[i]);

.X := -L.X; L.Y := -L.Y; L.Z := -L.Z;I := 1 To N Do Tr3d(A[I], L, A[I]);

D;;

Key = '6' Then BeginD;

.X := -L.X; L.Y := -L.Y; L.Z := -L.Z;I := 1 To N Do Tr3d(A[I], L, A[I]);

:= -Pi/120; For I := 1 To N Do Ux3d(A[i],Ux,A[i]);

.X := -L.X; L.Y := -L.Y; L.Z := -L.Z;I := 1 To N Do Tr3d(A[I], L, A[I]);

D;;Key = '7' Then BeginD;.X := -L.X; L.Y := -L.Y; L.Z := -L.Z;I := 1 To N Do Tr3d(A[I], L, A[I]);

.X := 1.1; C.Y := 1.1; C.Z := 1.1;I := 1 To N Do Sr3d(A[I], C, A[I]);

.X := -L.X; L.Y := -L.Y; L.Z := -L.Z;I := 1 To N Do Tr3d(A[I], L, A[I]);D;;

Key = '8' Then BeginD;.X := -L.X; L.Y := -L.Y; L.Z := -L.Z;I := 1 To N Do Tr3d(A[I], L, A[I]);

.X := 0.9; C.Y := 0.9; C.Z := 0.9;I := 1 To N Do Sr3d(A[I], C, A[I]);

.X := -L.X; L.Y := -L.Y; L.Z := -L.Z;I := 1 To N Do Tr3d(A[I], L, A[I]);

D;;;D;;.

Приложение Г

Program Koh;CRT, Graph;,gm : Integer;= 50000;Draw;, x, y, p : Real;: LongInt;, my, rad : Integer;:= 10;:= 250;:=600;;:= 0.0;:= 0.0;k := 1 To iter do:= Random;:= x;p <= 1/2 then:= 1/2 * x + 1/(2*sqrt(3)) * y;:= 1/(2*sqrt(3)) * t - 1/2 * y;:= 1/2 * x - 1/(2*sqrt(3)) * y +1/2;:= -1/(2*sqrt(3)) * t - 1/2 * y + 1/(2*sqrt(3));;(mx + Round(rad * x), my - Round(rad * y), 2);;;

:= Detect;(gd,gm,’’);;;;.

Приложение Д


program fern;crt, graph;, gm: integer;draw;= 50000;, x, y, p: real;: longint;_x, mid_y, radius: integer;_x := getmaxX div 2;_y := getmaxY;:= trunc(0.1 * mid_y);;:= 1.0;:= 0.0;k := 1 to iterations do:= random;:= x;p <= 0.85 then:= 0.85 * x + 0.04 * y;:= -0.04 * t + 0.85 * y + 1.6p <= 0.92 then:= 0.2 * x - 0.26 * y;:= 0.23 * t + 0.22 * y + 1.6if p <= 0.99 then:= -0.15 * x + 0.28 * y;:= 0.26 * t + 0.24 * y + 0.44:= 0.0;:= 0.16 * y;(mid_x+round(radius*x), mid_y-round(radius*y),);

:= detect;(gd, gm, 'c:\bp\bgi');;;.

Похожие работы на - Элективные курсы по информатике на старшей ступени общего образования

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!