Имя
модуля
|
Функции,
которые выполняет
|
MAIN
|
Главный
модуль, который отвечает за вызов процедур генерации и изменения ландшафта, а
также здесь описаны все процедуры взаимодействия пользователя и программы
через клавиатуру.
|
DISPLAY
|
Модуль
для отображения ландшафта в текущем окне и режиме с текущими параметрами.
|
DATABASE
|
Модуль
для хранения рядов вершин.
|
OPTIONS
|
Модуль
хранящий в себе формы настроек ландшафта.
|
GLOBAL
|
Модуль
определяющий систему двумерных логических адресов TTriple
и TVertex
в «треугольном» массиве.
|
Модуль MAIN.PAS состоит из процедур и функций:
1. procedure
FileNew(Sender:
TObject) - процедура
генерирует новый ландшафт.
2. procedure
FileOpen(Sender:
TObject) - процедура
открывает ранее созданный ландшафт.
3. procedure FileSaveAs(Sender:
TObject) - процедура сохраняет
ландшафт.
. procedure FilePrint(Sender:
TObject)
- процедура выводит на печать ландшафт.
. procedure
FilePrintSetup(Sender: TObject) - процедура вызывающая
настройку печати.
. procedure FileExit(Sender:
TObject)
- процедура выхода из программы.
. procedure EditCopy(Sender:
TObject) - процедура копирования
ландшафта
в
буфер
обмена.
. procedure
FormResize(Sender: TObject) - процедура
создание
формы.
. procedure
FormKeyPress(Sender: TObject; var Key: Char) - процедура
обработки
кнопок
клавиатуры,
где
Key - символ
клавиатуры.
. procedure
DisplayOptions1Click(Sender: TObject) - процедура
открывает
настройки.
. procedure
ModeBtnClick(Sender: TObject) - процедура
генерирует
новый
ландшафт,
если
изменились
модификации.
. procedure
PlyBtnClick(Sender:
TObject) - процедура
генерирует новый ландшафт, если изменяется количество изгибов.
14. procedure
SealevelPnlResize(Sender: TObject) - процедура
уровня
моря.
. procedure
SeaLevelSldrScroll(Sender: TObject; ScrollCode: TScrollCode; var ScrollPos:
Integer) - процедура изменения
плоскости
уровня
моря,
где
ScrollCode - координаты при
изменении
плоскости;
ScrollPos-позиция ползунка.
. procedure
HelpMenuClick(Sender: TObject) - процедура
вызова
справки.
. procedure
DrawLandscape(Canvas: TCanvas; Height, Width: integer; Tag: string) - процедура
вывода
ландшафта
на
дисплей,
где
Canvas-поверхность
рисунка;
Height, Width-высота, ширина;
. procedure SetPlys(NewPlys:
integer) - процедура задания
количества
изгибов,
где
NewPlys- новый изгиб.
. procedure
SetDrawMode(NewDrawMode: DrawModes) - процедура
выбора
режима
отображения,
где
NewDrawMode - режим отображения
. procedure GenerateLandscape
- процедура
генерации
ландшафта.
. procedure ShowLandscape - процедура
вызова
ландшафта.
. procedure DrewSomeTriangles(N:
word) - процедура
рисования
треугольников,
где
N - коэффициент
умножения.
Модуль DISPLAY.PAS содержит процедуры и функции:
1. procedure ScreenColors - процедура
задаёт цвет элементам ландшафта.
2. procedure PrinterColors - процедура
задаёт цвет элементов ландшафта при печати.
3. function
Surface(Outline,
Fill: TColor):
Surfaces - функция
присваивает результату режим цвета, где Outline-только
границы; Fill-заливка.
4. function
FloatTriple(T:
TTriple): TFloatTriple
- функция вычисления координат, где Т - преобразует в тип TTriple;
TFloatTriple - координаты x,
y,z.
5. function
Project(const
Tr: TTriple):
TPixel - эта функция
проводит линию между двумя точками : текущей и точкой перспективы и определяет,
где эта линия пересекается с плоскостью экрана, где Tr
- преобразует в тип TTriple.
6. procedure
DrawTriangle( Canvas:
TCanvas; const
A, B,
C: TVertex;
Plys: word;
PointDn: boolean)
- процедура рисования треугольников, где Canvas
форма для рисования; A,
B, C
- вершины треугольника, Plys
- изгиб, PointDn-
средняя точка.
7. procedure
DrawPixels(const
Canvas: TCanvas;const
A, B,
C, D:
TPixel; const
N: word;
const Surface:
Surfaces) - процедура
прорисовки каркаса, где Canvas
- форма для рисования; A,
B, C,
D - вершины; N
- чило для проверки условия, Surface
- земная поверхность.
8. procedure
CalcCrossing(var
Low, High,
Crossing: TTriple;
SetLow: boolean)
- процедура определяет расстояние от точки пересечения до вершины. Где Low,
High, Crossing
- нижняя, верхняя, пересечение координат; SetLow
- для проверки уровня моря.
9. procedure
DrawVerticals(Canvas: TCanvas) - процедура
преобразования
TTriple в
TPixel.
. procedure Step(const Start:
TVertex; var Front: Triad; var StepDn: GridCoordinate ) - процедура
смотрит
какая
из
точек
треугольника
находиться
в
море,
а
какая
нет,
где
Start - начало
координат;
Front -тройка
координат;
StepDn - координатная сетка.
. function InnerProduct( A,
B: TTriple): LongInt - функция
вычисляет
скалярное
произведение
вершин,
где
A, B - вершины
.
. function Delta(A, B:
TTriple): TTriple - функция
вычисления
разности
вершин,
где
A, B - вершины.
. function LandColor(const A,
B, C: TTriple): TColor - функция
определения
цвета
ландшафта,
где
A, B, C -вершины треугольника.
. procedure Draw3Vertices(
Canvas: TCanvas; const A, B, C: TVertex; Display: boolean) - процедура
реализует
уровень
моря,
Canvas - форма для
рисования;
A, B, C - вершины треугольника;
Display- количество вершин
под
водой
или
над
водой.
Модуль DATABASE.PAS содержит процедуры и
функции:
1. procedure ResetDB - процедура расчета
троек координат для параметров, зависящих от числа изгибов.
2. function
IMUL(A,
B: Int16):
LongInt - функция
умножения; А,В - числа
3. function
LoadLandscape(const
FileName: TFileName):
Boolean - функция загрузки
сохранённого ландшафта.
4. function SaveLandscape(const
FileName: TFileName): Boolean - функция
сохранения
ландшафта.
. procedure SwapTriples(var
A, B: TTriple) - процедура
замены
вершин,
A, B - вершины.
. procedure
FractureTriangle(const A, B, C: TVertex; Plys: word) - процедура
рисующая
треугольники,
если
число
изгибов
> 1, где
A, B, C - вершины треугольника,
Plys - изгиб.
. function
Unscale(ScaledCoordinate: LongInt): TCoordinate - функция
масштабирования.
. function IDIV(Numerator:
LongInt; Denominator: Int16): Int16 - функция
деления;
Numerator - числитель;
Denominator - знаменатель.
. function Rand(Envelope:
integer): integer - функция
нормального
распределения
в
интервале
2Envelope, Envelope - половина
стороны
отрезка.
. function
Vertices(N:
word): word
- функция подсчёта числа вершин, где N
- длина стороны.
11. procedure
FractureLine( var
vM: TVertex;
const vA,
vB: TVertex;
Envelope: integer
) - процедура для расчёта высот средних отрезков, где vM
- преобразованная вершина, vA,
vB -вершины, Envelope
- половина стороны отрезка.
Модуль GLOBAL.PAS содержит функции:
1. function
Triple(X,
Y, Z:
TCoordinate): TTriple
- функция получения координат, где X,
Y, Z
- координаты.
2. function Vertex(AB, BC, CA:
GridCoordinate): TVertex - функция
получения
отрезков,
где
AB, BC, CA - отрезки.
Модуль OPTIONS.PAS хранит формы настроек
ландшафта.
Описание алгоритмов
В этом пункте приведены алгоритмы, играющие
главную роль в генерации ландшафта. Прежде всего
это
процедуры:
procedure FractureLine (рисунок
7.) и
procedure FractureTriangle (Рисунок
8.)
Рисунок 7. - Алгоритм процедуры FractureLine.
Рисунок 8. - Алгоритм процедуры
FractureTriangle.
При генерации нового ландшафта вызываются
процедуры GenerateLandscape
(Рисунок 9.) и ShowLandscape
(Рисунок 10.). Которые и генерируют ландшафт.
Рисунок 9. - Алгоритм процедуры GenerateLandscape.
Рисунок 10. - Алгоритм процедуры ShowLandscape.
.5 Используемые технические средства
Персональный компьютер на базе Intel,
с установленной ОС Windows
XP.
Для сохранения результатов работы программы и их
последующего использования разработан специальный файл расширения *.fl
содержащий сведения о ландшафте. При сохранений результатов в данный файл
помещаются сведения о вершинах треугольников, данные о цвете и режиме
генерации. При открытии этого файла в программе, все сохраненные данные
считываются и отображается исходный ландшафт.
2.6 Вызов и загрузка
Программа запускается через файл FracLandscapes.exe.
3.
ОПИСАНИЕ ПРИМЕНЕНИЯ ПРОГРАММНОЙ ЕДИНИЦЫ
Программа FracLandscapes
может применяться для построения простейших изображений береговых линий и гор
на основе фракталов.
4.
ОПИСАНИЕ КОНТРОЛЬНОГО ПРИМЕРА
Программа FracLandscapes.exe
имеет уникальную пиктограмму (рисунок 11).
Рисунок 11. - Пиктограмма программы FracLandscapes.exe
После запуска программы на экране появиться
главное окно программы со сгенерированным ландшафтом (по умолчанию установлено
7 изгибов и режим каркасный). (Рисунок 12).
Рисунок 12. - Главное окно программы.
· Файл ;
· Правка;
· Опции;
· Справка;
Пункт меню Файл содержит подпункты:
· Новый
· Открыть…
· Сохранить как…
· Печать
· Настройка печати…
· Выход
Пункт Правка содержит подпункт Копирование.
Пункт Опции содержит подпункт Опции дисплея, при
нажатии на который вызывается окно Фрактальные параметры ландшафта (рисунок
13).
Пункт Справка вызывает информацию по
использованию программы и информацию о разработчике.
Рисунок 13. - Окнофрактальных параметров
ландшафта.
На главном окне расположены кнопки повторяющие
действия пункта Файл из меню (рисунок 13.1.).
Рисунок 13.1. - Кнопки пункта Файл из меню
Также сразу после них идут кнопки которые
отвечают за количество изгибов (рисунок 13.2.).
Рисунок 13.2. - Кнопки количества изгибов.
За ними следуют кнопки выбора режима отображения
ландшафта: O - каркасный, R
- заполненный, F - светотень
(рисунок 13.3.).
Рисунок 13.3. - Кнопки выбора режима отображения
ландшафта.
Справой стороны окна расположен ползунок, с
помощью которого регулируется плоскость «моря» (рисунок 13.4.).
Рисунок 13.4. - панель регуляции уровня моря.
Примеры построения ландшафта на программе FracLandscapes
с использованием различных режимов и количества изгибов (Рисунки 14,15,16).
Рисунок 14. - Каркасный ландшафт построенный с
помощью программы FracLandscapes.
Рисунок 15. - Заполненный ландшафт построенный с
помощью программы FracLandscapes.
Рисунок 16. - Светотеневой ландшафт построенный
с помощью программы FracLandscapes.