Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.11.2007, 12:25   #1
KEnt
 
Регистрация: 05.11.2007
Сообщений: 6
По умолчанию Delphi. Множество Мандельброта и Жюлиа

Уважаемые программисты . Может кто поможет с задачей

Множество Мандельброта строится в прямоугольнике с координатами xmin=-2.25, xmax=0.75, уmin=-1.5, ymax==1.5 (т. е. пиксель с координатами (0,0) представляет комплексное число -2.25 + i*1.5). Программа должна позволять пользователю менять координаты вершин прямоугольника, чтобы можно было изобразить в увеличенном виде отдельные фрагменты множества Мандельброта

Нашел в сети описание похожей программы .

function MandelBrot(a,b: real): TColor;
var
x,y,xy: real;
x2,y2: real;
r:real;
k: integer;
begin
r:=0;
x:=0; y:=0;
k:=100;
while (k>0)and(r<4) do
begin
x2:=x*x;
y2:=y*y;
xy:=x*y;
x:=x2-y2+a;
y:=2*xy+b;
r:=x2+y2;
dec(k)
end;
k:=round((k/100)*255);
result:=RGB(k,k,k);
end;

function Julia(x0,y0: real): TColor;
var
a,b,x,y,x2,y2,xy: real;
r:real;
speed,k: integer;
begin
r:=1;
a:=-0.55; b:=-0.55;
x:=x0; y:=y0;
k:=100;
while (k>0)and(r<4) do
begin
x2:=x*x;
y2:=y*y;
xy:=x*y;
x:=x2-y2+a;
y:=2*xy+b;
r:=x2+y2;
dec(k)
end;
k:=round((k/100)*255);
result:=RGB(k,k,k);
end;

Ниже приведен листинг функции отображающий данные множества.
procedure TForm1.BitBtn2Click(Sender: TObject);



var
x_min,y_min,x_max,y_max,hx,hy,x,y: real;
i,j,n: integer;
color: TColor;
begin
x_min:=-1.5; x_max:=2;
y_min:=-1.5; y_max:=1.5;
n:=300;
y:=y_min;
hx:=(x_max-x_min)/n;
hy:=(y_max-y_min)/n;
for j:=0 to n do
begin
x:=x_min;
for i:=0 to n do
begin
if rbM.Checked then color:=MandelBrot(x,y);
if rbJ.Checked then color:=Julia(x,y);
imPict.Picture.Bitmap.Canvas.Pixels[i,j]:=color;

x:=x+hx;
end;
y:=y+hy;
end;
end;



Но вот вопрос
if rbM.Checked then color:=MandelBrot(x,y);
if rbJ.Checked then color:=Julia(x,y);
imPict.Picture.Bitmap.Canvas.Pixels[i,j]:=color;


Возникант ошибка на данном шаге .
Вопрос как исправить или заменить данные действия .
KEnt вне форума Ответить с цитированием
Старый 05.11.2007, 15:03   #2
Virtson
Владимир М.
Участник клуба
 
Аватар для Virtson
 
Регистрация: 30.10.2006
Сообщений: 1,289
По умолчанию

так создай у себя компоненты -
rbM, rbJ : TCheckBox;
imPict: TPicture;

или замени и ничего не рисуй ..
Берегите друг друга!
Virtson вне форума Ответить с цитированием
Старый 05.11.2007, 15:05   #3
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Могу дать работающую программу. Фрактал Мандельброта с заданием координат и масштабом.
Mandelbrot.rar
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 05.11.2007, 16:42   #4
KEnt
 
Регистрация: 05.11.2007
Сообщений: 6
По умолчанию

mutabor Красавчег . Большое тебе спасибо .
Сейчас начну разбор программы
KEnt вне форума Ответить с цитированием
Старый 27.12.2007, 15:16   #5
KEnt
 
Регистрация: 05.11.2007
Сообщений: 6
По умолчанию

Вот как полностью звучит задачка:

Множество Мандельброта описывает поведение динамического процесса, определенного нa комплексных числах формулой: z(n+l) = z(n)*z(n)+с.
Опишем алгоритм построения окрашенного в черный цвет множества Мандельброта с окружением, раскрашенным в разные цвета. Для произвольного комплексного числа с=х+i*y положим z(0)=0 и устроим итерацию по вышеприведенной формуле. Максимальное число итераций Мах =150. Для последовательности z(n) имеются две возможности:
1. Числа становятся все большими и большими, стремясь к бесконечности.
2. Точки находятся и продолжают оставаться на расстоянии меньшем 2 от 0.
Так вот, множество Мандельброта - это множество тех чисел с, для которых выполняется вторая возможность. Граница множества сильно изрезанна. Причем под лупой она выглядит столь же изломанной, как и без нее. Она напоминает линию морского берега, многие естественные границы, которые становятся тем длиннее, чем более мелкий масштаб используется для измерения. Одной из характерных особенностей этой границы является её самоподобие. Если взглянуть на любой из её поворотов или заливов, то можно обнаружить что одна и та же форма встречается в различных местах и имеет разные размеры (рис. 1).


В программе каждая точка (пиксель) экрана представляет соответствующее комплексное число с. Если число Мах увеличить, то граница множества определится точнее, так как для некоторых точек с последовательности z(n) уйдут всё-таки на бесконечность. Все точки множества Мандельброта отметим черным цветом. Для всех других точек с соответствующая последовательность z(n) уходит на бесконечность, причем скорость ухода оценивается соответствующим цветом точки с, пропорциональным количеству итераций, достаточным для того, чтобы z(n)*z(n) стало большим 4.
Множество Мандельброта строится в прямоугольнике с координатами xmin=-2.25, xmax=0.75, уmin=-1.5, ymax==1.5 (т. е. пиксель с координатами (0,0) представляет комплексное число -2.25 + i*1.5). Программа должна позволять пользователю менять координаты вершин прямоугольника, чтобы можно было изобразить в увеличенном виде отдельные фрагменты множества Мандельброта.
Предусмотреть возможность сохранения полученной картинки в файл.






Есть пару вопросов , кто на них ответит ,тому буду очень благодареен.
(Программа не моя ,переделанная , но не до конца понятая)


1. Как изменить программу так чтоб множество Мандельброта строилась в прямоугольнике с координатами
xmin=-2.25, xmax=0.75, уmin=-1.5, ymax=1.5

2. За что отвечает каждая из переменных.
mxx,myy, mx,my, I1,I2,J1,J2:integer; // Экранные координаты
g, c_real, c_img, x1, X2,Y1,Y2:real; // 'бумажные' координаты
h,x, xx, zm, zr, zi, y: real;
code1, L: byte;
N:word;
Вложения
Тип файла: rar мандельброт.rar (230.4 Кб, 89 просмотров)
KEnt вне форума Ответить с цитированием
Старый 05.01.2008, 10:37   #6
KEnt
 
Регистрация: 05.11.2007
Сообщений: 6
По умолчанию

Люди подскажите юнному студенту.

Все понял ,со всем разобрался. Остается одна проблема.
как заставить множество строится в прямоугольнике с координатами xmin=-2.25, xmax=0.75, уmin=-1.5, ymax=1.5



procedure TForm1.FormCreate(Sender: TObject);
begin
with image1 do
begin
i1:=1;
i2:=width;
J1:=1;
j2:=height;
d:= -2.25 + i1*1.5
end;

n:=150;
{L:=4;}
x1:=-2.25;
x2:=0.75;
y1:=-1.5;
y2:=1.5;
g:=0.01;

ShowAxis;
end;



procedure TForm1.SetGrahic2;
var
cc: word;
begin
with image1.canvas do
begin
image1.canvas.FillRect(clientrect);
x:=x1;

while x<x2 do
begin
x:=x+g;
y:=y1;
c_real:=x1+x;
while y<y2 do
begin
y:=y+g;
c_img:=y1+y;


zr:=0;
zi:=0;
zm:=0;

for cc:=0 to n do
begin
xx:=zr;
zr:=zr*zr-zi*zi+c_real;
zi:=2*(xx)*zi+c_img;
zm:=zr*zr+zi*zi ;

if zm>4 then break;
end;
if zm<4 then pixels[ScaleOX(x),ScaleOY(y)]:=clblack
else pixels[ScaleOX(x),ScaleOY(y)]:=rgb(cc*6, cc*4, cc*2);
end;
end;
end;
end;
Вложения
Тип файла: rar Задача по ЭВМ.rar (233.1 Кб, 53 просмотров)

Последний раз редактировалось KEnt; 05.01.2008 в 10:42.
KEnt вне форума Ответить с цитированием
Старый 05.01.2008, 13:29   #7
Virtson
Владимир М.
Участник клуба
 
Аватар для Virtson
 
Регистрация: 30.10.2006
Сообщений: 1,289
По умолчанию

я пытался помочь, а вы проигнорировали ..
Берегите друг друга!
Virtson вне форума Ответить с цитированием
Старый 01.04.2010, 22:34   #8
Барбарис
 
Регистрация: 12.01.2010
Сообщений: 7
По умолчанию

Вот еще готовые фракталы на Delphi на сайте секты гагажей http://gagazh.ucoz.ru/forum/2-62-1
Барбарис вне форума Ответить с цитированием
Старый 07.12.2011, 23:54   #9
LockeD132
Новичок
Джуниор
 
Регистрация: 07.12.2011
Сообщений: 2
По умолчанию

Помогите построить Множетво Мандельброта имножество Жюлиа в паскале
LockeD132 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как задать множество 1234 Паскаль, Turbo Pascal, PascalABC.NET 7 25.05.2008 16:15
Множество браузеров LeoN Общие вопросы Delphi 0 01.05.2008 14:55
Что такое множество? ZhekON Помощь студентам 3 07.04.2008 20:22
Множество xxxPascalxxx Помощь студентам 11 24.02.2008 19:07