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