Форум программистов, компьютерный форум CyberForum.ru

Множество Мандельброта - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 26, средняя оценка - 4.77
14091994San9
1 / 1 / 0
Регистрация: 18.04.2010
Сообщений: 19
31.05.2012, 06:01     Множество Мандельброта #1
Необходимо написать программу выполняющую построение фрагтала Мондельброта задающегося следующимися формулами:
Zj+1 = Zj^2 + C j = 1, 2, …N (1)
Где Zj = Xj + i*Yj Z1=0 ( X1=0, Y1=0)
C = a + i*b
Z^2j = X^2j – Y^2j + i*2* Xj * Yj
|Zj|= (X^2j + Y^2j)^(1/2)
Числа Zj и число С – комплексные числа.
Алгоритм вычислений и построения картинки
1. Для заданного значения С (т.е. для заданных чисел а и b - значения а и b лежат в интервале [-3, 3]) выполняем итерационные вычисления по формуле (1) и считаем число итераций, пока |Zj| не превысит 2 либо число выполненных итераций не станет больше заданного значения N (достаточно задать значение в интервале [50, 100] ).
2. На экране компьютера строим точку с координатами
(Целое(a*Mx) + сдвиг_по_X, Целое(b*My) + сдвиг_по_Y, Цвет),
где
Mx, Мy – масштабные коэффициенты, определяющие размер графической области изображения;
сдвиг_по_X и сдвиг_по_Y задают сдвиг начальной точки отсчета координат (на графическом экране точка с координатами (0, 0) находится в левом верхнем углу области для рисования);
Цвет – цвет текущей точки, определяющийся формулой:
Цвет = количество_выполненных_итераций*Const.
Здесь Const – постоянное целое число: чем оно больше единицы, тем большее количество цветов будет в построенном изображении.

Прошу помочь в решении данной задачи, только не очень заумный код пжлст
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.05.2012, 06:01     Множество Мандельброта
Посмотрите здесь:

C++ множество точек
C++ Реализация алгоритма Мандельброта
C++ Множество точек.Найти множество треугльники
C++ Класс Множество
C++ Множество точек m
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
vxg
Модератор
 Аватар для vxg
2669 / 1680 / 158
Регистрация: 13.01.2012
Сообщений: 6,279
31.05.2012, 22:36     Множество Мандельброта #2
см. прикрепленный файл. можете еще поиграться с закомментированными стоками - там несколько из бесчисленного множества вариантов закраски. и почему вам самим не интересно сделать это?
Вложения
Тип файла: rar fractal.rar (212.6 Кб, 412 просмотров)
14091994San9
1 / 1 / 0
Регистрация: 18.04.2010
Сообщений: 19
01.06.2012, 13:08  [ТС]     Множество Мандельброта #3
а подскажите пожалуйста где именно нада изменить чтобы поменялся цвет?

Добавлено через 55 минут
и ещё можно вас пропросить сделать кпопки с увеличением и уменьшением фрагтала в 2/4/6 раз
vxg
Модератор
 Аватар для vxg
2669 / 1680 / 158
Регистрация: 13.01.2012
Сообщений: 6,279
01.06.2012, 17:28     Множество Мандельброта #4
в программе ровно столько строк что бы вы не смогли запутаться. если дело не идет на этом количестве строк никакие танцы не помогут. кнопку сделать не могу. могу подсказать как сделать)
14091994San9
1 / 1 / 0
Регистрация: 18.04.2010
Сообщений: 19
01.06.2012, 19:01  [ТС]     Множество Мандельброта #5
ну тогда подскажите как это сделать)
vxg
Модератор
 Аватар для vxg
2669 / 1680 / 158
Регистрация: 13.01.2012
Сообщений: 6,279
01.06.2012, 22:30     Множество Мандельброта #6
что бы поменялся цвет шаманим прямо перед return функции get_color. например вот такое я делал на delphi - очень красиво выходило
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
function voltaic_arc_paint(z_Re, z_Im: Double;
  k, k_max: Integer): TColor;
var
  t: Integer;
  edge, co_color, r, g, b: Byte;
begin
  //путь (r, g, b): (1, 1, 0) - (0, 1, 0) - (0, 1, 1) - (0, 0, 1) - дальше
  //косое ребро по направлению (1, 0, 0);
  //1170 = 1024 + 128 + 16 + 2 - красиво;
  //4 основных рёбра по 256, последнее ребро 146; нулевое ребро - чёрное;
  //четвёртое ребро косое
 
  t := Trunc(1170 * (k_max - k) / k_max);
 
  edge := t div 256;
  co_color := t mod 256;
 
  r := 0;
  g := 0;
  b := 0;
 
  if edge = 1 then
  begin
    g := 255;
    r := 255 - co_color;
  end
  else if edge = 2 then
  begin
    g := 255;
    b := co_color;
  end
  else if edge = 3 then
  begin
    b := 255;
    g := 255 - co_color;
  end
  else if edge = 4 then
  begin
    b := 255 - co_color;
    r := co_color;
  end;
 
  Result := RGB(r, g, b);
end;
для масштабирования - размещаем кнопку на форме. в обработчике клика на эту кнопку пишем нечто изменяющее area_width и area_height в нужное количество раз.

Добавлено через 22 секунды
что бы поменялся цвет шаманим прямо перед return функции get_color. например вот такое я делал на delphi - очень красиво выходило
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
function voltaic_arc_paint(z_Re, z_Im: Double;
  k, k_max: Integer): TColor;
var
  t: Integer;
  edge, co_color, r, g, b: Byte;
begin
  //путь (r, g, b): (1, 1, 0) - (0, 1, 0) - (0, 1, 1) - (0, 0, 1) - дальше
  //косое ребро по направлению (1, 0, 0);
  //1170 = 1024 + 128 + 16 + 2 - красиво;
  //4 основных рёбра по 256, последнее ребро 146; нулевое ребро - чёрное;
  //четвёртое ребро косое
 
  t := Trunc(1170 * (k_max - k) / k_max);
 
  edge := t div 256;
  co_color := t mod 256;
 
  r := 0;
  g := 0;
  b := 0;
 
  if edge = 1 then
  begin
    g := 255;
    r := 255 - co_color;
  end
  else if edge = 2 then
  begin
    g := 255;
    b := co_color;
  end
  else if edge = 3 then
  begin
    b := 255;
    g := 255 - co_color;
  end
  else if edge = 4 then
  begin
    b := 255 - co_color;
    r := co_color;
  end;
 
  Result := RGB(r, g, b);
end;
для масштабирования - размещаем кнопку на форме. в обработчике клика на эту кнопку пишем нечто изменяющее area_width и area_height в нужное количество раз.

Добавлено через 10 минут
более красочно по фракталам http://alphacity.netii.net/tree/prjs-graph.htm

Добавлено через 12 секунд
более красочно по фракталам http://alphacity.netii.net/tree/prjs-graph.htm
Yandex
Объявления
01.06.2012, 22:30     Множество Мандельброта
Ответ Создать тему
Опции темы

Текущее время: 01:07. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru