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

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

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

 
 Ответить  Открыть новую тему 
> Разбираемся в коде. Фрактал.
сообщение
Сообщение #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

 





- Текстовая версия 11.01.2025 4:58
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name