|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
05.11.2007, 12:25 | #1 |
Регистрация: 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; Возникант ошибка на данном шаге . Вопрос как исправить или заменить данные действия . |
05.11.2007, 15:03 | #2 |
Владимир М.
Участник клуба
Регистрация: 30.10.2006
Сообщений: 1,289
|
так создай у себя компоненты -
rbM, rbJ : TCheckBox; imPict: TPicture; или замени и ничего не рисуй ..
Берегите друг друга!
|
05.11.2007, 15:05 | #3 |
Телепат с дипломом
Старожил
Регистрация: 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)
Проверь себя! Онлайн тестирование | Мой блог |
05.11.2007, 16:42 | #4 |
Регистрация: 05.11.2007
Сообщений: 6
|
mutabor Красавчег . Большое тебе спасибо .
Сейчас начну разбор программы |
27.12.2007, 15:16 | #5 |
Регистрация: 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; |
05.01.2008, 10:37 | #6 |
Регистрация: 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; Последний раз редактировалось KEnt; 05.01.2008 в 10:42. |
05.01.2008, 13:29 | #7 |
Владимир М.
Участник клуба
Регистрация: 30.10.2006
Сообщений: 1,289
|
я пытался помочь, а вы проигнорировали ..
Берегите друг друга!
|
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 |
Новичок
Джуниор
Регистрация: 07.12.2011
Сообщений: 2
|
Помогите построить Множетво Мандельброта имножество Жюлиа в паскале
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как задать множество | 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 |