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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 26, средняя оценка - 4.77
14091994San9
1 / 1 / 0
Регистрация: 18.04.2010
Сообщений: 19
#1

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

31.05.2012, 06:01. Просмотров 3325. Ответов 5
Метки нет (Все метки)

Необходимо написать программу выполняющую построение фрагтала Мондельброта задающегося следующимися формулами:
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++ Класс Множество
C++ Множество точек m
C++ Тип множество
C++ На плоскости задано множество точек. Выбрать три различные точки так, чтобы проходящая через них окружность делила это множество на группы
Класс – множество C++
Сформировать множество [К, 2К, 3К, 4К] C++
Множество Man C++
Исправить ошибку в коде, рисующую фрактал Мандельброта с помощью CUDA C++

Искать еще темы с ответами

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

Добавлено через 55 минут
и ещё можно вас пропросить сделать кпопки с увеличением и уменьшением фрагтала в 2/4/6 раз
vxg
Модератор
 Аватар для vxg
2858 / 1791 / 182
Регистрация: 13.01.2012
Сообщений: 6,767
01.06.2012, 17:28     Множество Мандельброта #4
в программе ровно столько строк что бы вы не смогли запутаться. если дело не идет на этом количестве строк никакие танцы не помогут. кнопку сделать не могу. могу подсказать как сделать)
14091994San9
1 / 1 / 0
Регистрация: 18.04.2010
Сообщений: 19
01.06.2012, 19:01  [ТС]     Множество Мандельброта #5
ну тогда подскажите как это сделать)
vxg
Модератор
 Аватар для vxg
2858 / 1791 / 182
Регистрация: 13.01.2012
Сообщений: 6,767
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     Множество Мандельброта
Ответ Создать тему
Опции темы

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