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

Основы программирования графики на языке Паскаль. Способы решения графических программ и рекомендации к их решениям. Связь между декартовой и полярной системами координат. Алгоритм переноса объекта. Построение фракталов, классической пыли Кантора.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 24.04.2013
Размер файла 3,3 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

Размещено на http://www.allbest.ru/

Введение

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

GRAPH.TPU

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

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

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

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

Uses Graph;

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

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

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

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

Program Ex_1;

Uses Graph;

Var Gd, Gm: integer;

Begin

Gd:=VGA; { графический адаптер VGA }

Gm:=VGAhi; { графический режим VGAhi (640x480)x16 }

Initgraph(Gd,Gm,''); { Включить графический режим

Драйвер в текущем каталоге. }

if GraphResult = grOk then { Если режим включился успешно }

begin

line(0,0,639,479); { нарисовать отрезок прямой }

Readln;

CloseGraph; { выключений графического режима }

end;

End.

InitGraph(Gd,Gm:integer; Path:string);

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

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

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

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

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

GraphResult: integer;

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

CloseGraph

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

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

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

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

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

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

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

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

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

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

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

ClearDevice; {очистка экрана}

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

CloseGraph; {закрытие графики}

InitGraph (gd,gm: integer; Path: string); {инициализация графики, где

gd - графический драйвер,

gm - графический режим,

Path - путь размещения файла

с расширением. bgi. }

Line (x1,y1,x2,y2: integer); {рисование линии, проходящей через две точки: с координатами (x1,y1) и (x2,y2) }

LineRel (dx,dy: integer); {рисование линии: dx, dy - приращения координат к координатам текущей позиции курсора в соответствии с рисунком 4}

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

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

позицию курсора и точку с координатами (x,y) }

Moveto (x,y: integer); {задание координат текущей точки}

OutText (T: string); {вывод текста в текущую точку}

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

Rectangle (x1,y1,x2,y2: integer); {рисование прямоугольника: (x1,y1) и (x2,y2) - координаты противоположных вершин в соответствии с рисунком 5}

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

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

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

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

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

GetX - координата текущей позиции курсора по оси x.

GetY - координата текущей позиции курсора по оси y.

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

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

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

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

xm=x0+x*Mx,

ym=y0-y*My,

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

x, y - физические координаты точки,

xm, ym - машинные координаты точки,

x0, 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 экраном (возможно также использование и и других типов видеоадаптеров).

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

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

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

Uses crt, graph;

var Gd, Gm: Integer;

begin

Gd: = Detect;

InitGraph (Gd, Gm, 'c: \bp\bgi');

...

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

...

ReadKey;

CloseGraph;

end.

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

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

Построение фигур

PutPixel (x,y,c) - отображает на экране точку с координатами (x,y) и цветом c

Line (x1,y1,x2,y2) - рисует линию с началом в точке (x1,y1) и концом - (x2,y2)

Rectangle (x1,y1,x2,y2) - рисует контур прямоугольника с диагональю (x1,y1) - (x2,y2)

Bar (x1,y1,x2,y2) - рисует закрашенный прямоугольник с диагональю (x1,y1) - (x2,y2)

Circle (x,y,r) - рисует окружность с центром (x,y) и радиусом r

Ellipse (x,y,ba,ea,xr,yr) - рисует дугу эллипса с центром в (x,y), горизонтальным и вертикальным радиусом xr и yr, и начальным и конечным углом ba и ea

FillEllipse (x,y,xr,yr) - рисует закрашенный эллипс с центром в (x,y), горизонтальным и вертикальным радиусом xr и yr

Определение цветов и стилей

GetPixel (x,y) - возвращает цвет пиксела с координатами (x,y)

SetColor (c) - устанавливает цвет изображения (для линий)

SetFillStyle (p,c) - устанавливает текущий стиль p и цвет c (для "закрашенных" фигур)

FloodFill (x,y,b) - закрашивает замкнутую область с внутренней точкой (x,y) и цветом контура b

Работа с текстом

OutTextXY (x,y,st) - выводит на экран строку st с позиции (x,y)

SetTextStyle (f,d,s) - устанавливает шрифт f, его направление d и размер

Сообщения об ошибках

function GraphErrorMsg (ErrorCode: integer): String; Возвращает строку сообщения об ошибке для заданного кода ErrorCode.

function GraphResult: integer; Возвращает код ошибки для последней графической операции.

Определение адаптера, инициализация и переход между текстом и графикой

procedure DetectGraph (var GraphDriver, GraphMode: integer); Проверяет аппаратуру и определяет какой графический драйвер и в каком режиме используется (тип адаптера - в GraphDriver, режим - GraphMode).

function GetDriverName: string; oзвращает строку с именем текущего драйвера.

procedure 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. В случае ошибки функция возвращает отрицательное значение.

function RegisterBGIdriver (Driver: pointer): integer; Регистрирует драйвер BGI для графической системы. Зарегистрированный драйвер будет использоваться процедурой InitGraph. Он может быть загружен с диска в кучу или преобразован в. obj файл (с помощью binobj. exe) и связан в файл. exe. В случае ошибки функция возвращает отрицательное значение.

function InstallUserDriver (DriverFileName: string; AutoDetectPtr: pointer): integer; Устанавливает пользовательский драйвер устройства в BGI таблицу драйверов устройств.

function InstallUserFont (FontFileName: string): integer; Устанавливает новый шрифт, который не встроен в BGI систему.

procedure SetGraphBufSize (BufSize: word); Позволяет изменить размер буфера для функций заполнения (закрасок). Буфер с размером BufSize байт размещается в куче при обращении к InitGraph. По умолчанию размер 4К, что достаточно для построения многоугольника с 650 линиями.

function GetMaxMode: integer; Возвращает номер максимального режима текущего загруженного драйвера.

procedure GetModeRange (GraphDriver: integer; var LoMode, HiMode: integer); Возвращает минимальный и максимальный графические режимы для данного драйвера.

function GetModeName (GraphMode: integer): string; Возвращает строку с именем указанного графического режима.

procedure SetGraphMode (Mode: integer); Переводит систему в указанный графический режим и очищает экран.

function GetGraphMode: integer; Возвращает текущий графический режим.

procedure GraphDefaults; Устанавливает текущий указатель (CP) в исходную позицию (т.е. точку 0,0) и сбрасывает все устанавливаемые пользователем режимы в исходное состояние, в т. ч. окна, палитру, основной цвет и цвет фона, стиль линий, шрифт, выравнивание текста, размер символов и стиль выводимого текста. Система должна находиться в графическом режиме.

procedure RestoreCrtMode; Восстанавливает текстовый видеорежим, который был до инициализации графики. Не освобождает буфер и не обнуляет установленные переменные.

procedure CloseGraph; Закрывает графическую систему. Восстанавливает текстовый видеорежим, который был до инициализации графики. Освобождает буфер и сбрасывает все графические переменные.

Координаты графического курсора

function GetX: integer; Возвращает координату X текущей позиции (CP).

function GetY: integer; Возвращает координату Y текущей позиции (СР).

function GetMaxX: integer; Возврашает максимальный Х (разрешение по горизонтали) для текущего графического драйвера и режима.

function GetMaxY: integer; Возвращает максимальный Y (разрешение по вертикали) для текущего графического драйвера и режима.

3. Плоскостная графика

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

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

3.1 Перенос объекта

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

X = х + dx,

Y = у + dy

Так как графический объект представляет собой множество точек, то его можно переносить, применяя уравнение переноса к каждой точке в соответствии с рисунком 8.

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

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

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

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

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

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

Пример.

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

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

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

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

setcolor(0); {рисуем объект цветом фона экрана}

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

setcolor (6); {рисуем объект выбранным цветом, изменив его координаты}

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

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

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

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

Пример.

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

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

setcolor(6);

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

repeat

moveto(0+i, 50); lineto(60+i, 50);

lineto(30+i, 0); lineto(0+i, 50);

setfillstyle(1, 6); floodfill(30+ i , 20, 6);

i:=i+60

until i>640;

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

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

setcolor(6);

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

repeat

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

repeat

moveto(0+i, 50+j); lineto(60+i, 50+j);

lineto(30 + i, 0 + j); lineto(0+i,50+j);

setfillstyle(1, 6); floodfill (30 + i, 20 + j, 6);

i:=i+60

until i > 640;

j:=j+50

until j>479;

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

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

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

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

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

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

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

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

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

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

х:= х + dx}

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

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

begin

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

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

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

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

setcolor(0); {рисуем объект цветом фона экрана}

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

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

end;

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

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

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

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

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

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

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

X = а + х,

У = b - y

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

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

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

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

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

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

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

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

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

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

Пример.

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

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

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

moveto(320, 240); lineto(60+320, 240);

lineto(30+320, 240-50); lineto(320, 240);

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

setcolor(0); {рисуем объект цветом фона экрана};

moveto(320, 240); lineto (60+320, 240);

lineto(30+320, 240-50); lineto(320, 240);

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

setcolor(6);

x1:=0*cos(pi/2)-0*sin(pi/2); y1:=0*sin(pi/2)+0*cos(pi/2);

moveto(320+round(x1), 240-round(y1));

x1:=60*cos(pi/2)-0*sin(pi/2); y1:=60*sin(pi/2)+0*cos(pi/2);

lineto(320+round(x1), 240-round(y1));

x1:=30*cos(pi/2)-50*sin(pi/2); y1:=30*sin(pi/2)+50*cos(pi/2);

lineto(320+round(x1), 240-round(у1));

x1:=0*cos(pi/2)-0*sin(pi/2); y1:=0*sin(pi/2)+0*cos(pi/2);

lineto(320+round(x1), 240-round(y1));

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

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

begin

х:=round(a+cos(c*pi/180)-b*sin(c*pi/180));

end;

function y(a, b, c: integer): integer;

begin

y:=round(a*sin(c*pi/180)+b*cos(c*pi/180));

end;

moveto(320+x(0, 0, 90), 240-y(0, 0, 90));

lineto(320+x(60, 0, 90), 240-y(60, 0, 90));

lineto(320+x(30, 50, 90), 240-y(30, 50, 90));

lineto(320+x(0, 0, 90), 240-y(0, 0, 90));

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

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

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

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

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

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

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

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

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

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

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

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

i:= i + di}

Пример.

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

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

begin

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

moveto{320+х(0, 0, i), 240-у(0, 0, i));

lineto(320+х(60, 0, i), 240-у(60, 0, i));

lineto(320+х(30, 50, i), 240-у(30, 50, i));

lineto(320+х(0, 0, i), 240-у(0, 0, i));

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

setcolor(O); (рисуем объект цветом фона экрана)

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

lineto(320+х(60, 0, i), 240-у(60, 0, i));

lineto(320+х(30, 50, i), 240-у(30, 50, i));

lineto(320+х(0, 0, i), 240-у(0, 0, i));

end;

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

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

Пример.

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

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

moveto(100, 50); lineto(70, 100); lineto(130, 100); lineto(100, 50);

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

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

lineto(round(1.5*70) , round(1.5*100));

lineto(round(1.5*130) , round(1.5*100));

lineto(round(1.5*100), round(1.5*50))

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

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

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

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

2. Составить программу построения фигур, образованных последовательным поворотом на 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 (скаляр)

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

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

E(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))

4.1 Перенос

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

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

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

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

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

4.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.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

5.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 году в работе Феликса Хаусдорфа. Тем не менее, именно Мандельброт объединил эти идеи и положил начало систематическому изучению фракталов и их приложений.

5.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 площади исходного. Рассуждая таким образом, мы убеждаемся, что полная доля выкинутой площади составила:

1/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 - Построение губки Менгера

5.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-х итераций.

5.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.

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

Сумма длин интервалов, удаленных при построении множества С, в точности равна 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 + …-),

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

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

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


Подобные документы

  • Основные понятия и структура обработчика на языке Pascal. Элективные курсы по информатике в системе профильного обучения. Элективный курс "Программирование в среде Delphi". Методические материалы по изучению программирования на языке Object Pascal.

    методичка [55,4 K], добавлен 08.12.2010

  • Схема разбора арифметического и логического выражения. Внешняя спецификация конвертора и алгоритм перевода программ на языке Паскаль в текст на языке Си. Назначение подпрограмм, особенности констант и переменных. Код программы и ее тестирование.

    курсовая работа [567,5 K], добавлен 03.07.2011

  • История появления и распространения Turbo Pascal - среды разработки для языка программирования Паскаль. Общий вид объявления файлового типа. Входная, выходная и промежуточная информация. Алгоритм решения задачи: словесный алгоритм, блок-схема, программа.

    курсовая работа [359,4 K], добавлен 05.01.2010

  • Основы создания фрактальных композиций при помощи среды программирования Паскаль. Сущность и основа фрактальной графики. Графические возможности и операторы для рисования геометрических фигур в среде Паскаль. Примеры обозначения цветов на языке Паскаль.

    лабораторная работа [15,7 K], добавлен 12.06.2010

  • Язык программирования Турбо Паскаль. Запись алгоритма на языке программирования и отладка программы. Правила записи арифметических выражений. Стандартное расширение имени файла, созданного системным редактором. Составной оператор и вложенные условия.

    курсовая работа [75,0 K], добавлен 21.03.2013

  • Паскаль как язык профессионального программирования, который назван в честь французского математика и философа Блеза Паскаля, история его разработки и функциональные особенности. Задача с использованием двумерного массива, составление блок-схемы решения.

    контрольная работа [819,0 K], добавлен 12.03.2014

  • Понятие программы и ее основные составляющие. Операторы ввода и вывода. Разветвляющиеся алгоритмы. Цикл как многократное выполнение одинаковых действий. Особенности использования оператора выбора. Графики функций и системы координат. Рекурсия и анимация.

    презентация [663,7 K], добавлен 24.12.2010

  • Методы численного интегрирования. Характеристика основных составляющих структурного программирования. Решение задания на языке высокого уровня Паскаль. Построение графического решения задачи в пакете Matlab. Решение задания на языке высокого уровня C.

    курсовая работа [381,7 K], добавлен 10.05.2018

  • Особенности программирования на языке Паскаль в среде Турбо Паскаль. Линейные алгоритмы, процедуры и функции. Структура данных: массивы, строки, записи. Модульное программирование, прямая и косвенная рекурсия. Бинарный поиск, организация списков.

    отчет по практике [913,8 K], добавлен 21.07.2012

  • Приобретение теоретических и практических навыков программирования на языке Паскаль. Математическая формулировка задачи и выбор метода обработки информации. Разработка алгоритма и его описание. Описание программы. Форма представления исходных данных.

    курсовая работа [224,3 K], добавлен 11.02.2016

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.