IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Разбираемся в коде. Фрактал.
GrukhvinEV
сообщение 15.12.2011 11:02
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 21
Пол: Мужской

Репутация: -  0  +


Хочу разобраться как строится фрактал Джулия, что понял сделал коментарии в программе, что не правильно исправьте пожалуйста, некоторые моменты непонятны, если не сложно обьясните.
program Zadanie_1;
uses Graph, Crt; {Команда подключения модулей}
type {Секция определения типов}
TComplex=record {Тип запись}
X:Real; {Переменная вещественного типа}
Y:Real; {Переменная вещественного типа}
end;
const {Секция объявления констант}
iter=50;{Максимальное количество итераций}
max=16;{Что это за переменная ? и почему именно так рассчитывается? Константа. Берем из расчета 640*0,005^2+480*0,005^2}
x0=-1;{Минимальная граница расчета по оси x}
xn=1;{Максимальная граница расчета по оси x}
y0=-1.2;{Минимальная граница расчета по оси y}
yn=1.2;{Максимальная граница расчета по оси y}
var {Секция объявления переменных}
z, t, c : TComplex; {Переменные типа TComplex, плоскость с осями х и у}
n : Integer; {Переменная целого типа, где n – текущее количество итераций}
Cancel : Boolean; {Логическая переменная, отвечает за выход из программы}
gd, gm : Integer; {Переменные целого типа, где переменная gd определяет тип драйвера адаптера, переменная gm определяет режим работы адаптера, по умолчанию выбирается старший режим (с самым высоким разрешением)}
msx,msy : Real; {Переменные вещественного типа}
x, y :Real; {Переменные вещественного типа, где x, y – координаты плоскости z}
xc, yc : Integer; {Переменные целого типа определяющие максимальное значение координаты x и y точек на экране для графического режима}
begin {Начало программы}
Cancel := false;{Присваиваем cancel значение false}
Randomize;{ Позволяет инициализировать встроенный генератор случайных чисел с произвольным значением}
gd := Detect; {Тип драйвера адаптера определяется автоматически, значение gm после команды gd:=detect; определяется автоматически}
InitGraph(gd,gm,'c:\bp\bgi');{Инициализация графики. В кавычках указывается путь к программе драйверу с расширением bgi}
// При использовании модуля Graph, обслуживающего графический режим, Pascal умеет работать с разрешениями экрана до 640x480 пикселов, поскольку для современных компьютеров это разрешение считается устаревшим, уменьшим максимальное значение координаты Х и Y с помощью оператора деления нацело (div) в двое.
xc:=GetMaxX div 2;{Функция GetMaxX возвращает максимальное значение координаты x для точки на экране для графического режима }
yc:=GetMaxY div 2; {Функция GetMaxY возвращает максимальное значение координаты y для точки на экране для графического режима}
msx:= xc/xn;{Вот это непонятно зачем мы это делаем и что такое msx? msy?}
msy:= yc/yn;
y:=y0;{Присваиваем координате y минимальную границу расчета по оси y, т.е. -1,2}
while y<=yn do {Пока условие y<=yn истинно выполняется оператор после do}
begin
x:=x0;{Присваиваем координате х минимальную границу расчета по оси x, т.е. -1}
while x<=xn do {Пока условие x<=xn истинно выполняется оператор после do}
begin
n := 0;{Начальное количество итераций}
z.x := x*msx * 0.005;{Вот это непонятно зачем мы это делаем и что такое ? И что за число 0.005? Откуда взялось ?}
z.y := y*msy * 0.005;
c.x := 0.11;{как правильно обозвать это число ?}
c.y := -0.66;{как правильно обозвать это число ?}
//c.x, c.y – константы, изменяя которые мы можем получить множество форм фрактала Джулии, методом подбора примем значения 0.11 и -0.66 для того чтобы получить красивую картинку.
while (sqr(z.x) + sqr(z.y) < max) and (n < iter) do {Пока выражние sqr(z.x) + sqr(z.y) меньше max и текущее количество итераций меньше максимального выполняется оператор после do, sqr – функция возведения в квадрат}
begin
t := z;{Присваиваем плоскости t значение плоскости z}
z.x := sqr(t.x) - sqr(t.y) + c.x;{Это я вообще представить не могу чему равно, поясните плиз}
z.y := 2*t.x*t.y + c.y;
Inc(n);{Увеличиваем начальное количество итераций на единицу}
if keypressed {Если нажата клавиша то переходим к оператору после then}
then
cancel := true;{Переменной cancel присваиваем значение true}
end;
if n < iter {Если условие n < iter (текущее значение итераций меньше максимального значения) истинно, то выполняется оператор после then}
then
begin
PutPixel(xc+round(x*msx),yc+round(y*msy), (n mod 16));{Процедура PutPixel перекрашивает пиксел с координатами (xc+round(x*msx),yc+round(y*msy) в цвет (n mod 16),функция round округляет значение до целого числа. Модуль Graph позволяет удобно использовать только 16 цветов, которые имеют значения от 0 до 15. Цвет будет определяться как остаток от деления количества итераций на 16, чтобы были задействованы все возможные цвета которые удобно использовать}
end;
if cancel {Если значение cancel равено true переходим к оператору после then}
then
exit;{Выход из программы}
x:=x+0.00156;{Увеличиваем х на 0,00156 из расчета 1/640 т.е. передвигаемся по оси х, с шагом 0,00156}
end;
y:=y+0.00208; {Увеличиваем y на 0,00208 из расчета 1/480 т.е. передвигаемся по оси y, с шагом 0,00208}
end;
Readkey;{Функция Readkey служит для считывания нажатых клавиш}
end.

и еще константу c можно рассчитать из c.x := 0.11, c.y := -0.66, как с=(c.x^2- c.y^2)+2 c.y*i=0,42-1,32i Верно ?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 20.07.2025 2:33
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"