Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.86/91: Рейтинг темы: голосов - 91, средняя оценка - 4.86
 Аватар для SeryZone
56 / 28 / 18
Регистрация: 09.03.2012
Сообщений: 726
Записей в блоге: 1

Построение фрактала Мандельброта

20.01.2013, 18:45. Показов 21716. Ответов 220
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добавил поток для построения, но рано обрадовался: прога как зависала, так виснет и сейчас.
И как использовать все ядра процессора на все 100? Кто-нибудь знает?
Вложения
Тип файла: zip Mandelbrot.zip (847.5 Кб, 103 просмотров)
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
20.01.2013, 18:45
Ответы с готовыми решениями:

Построение фрактала Коха (основа - правильный треугольник)
помогите пожалуйста надо сделать так, что бы производилось построение фрактала Коха основа правильный триугольник исходя из различных...

Масштабирование фрактала Мандельброта
Помогите, пожалуйста, есть программа рисующая фрактал Мандельброта, которое выполняет масштабирование, там используются комплексные числа. ...

Генерация фрактала Мандельброта. NASM + OpenGL
Всем здравия! Помогите мне, нужна помощь опытных людей. Замучился совсем. Вроде делаю всё как надо, но выводит непонятно что. Основная...

220
Модератор
 Аватар для FIL
3492 / 2614 / 742
Регистрация: 19.09.2012
Сообщений: 7,977
08.05.2013, 20:25
Студворк — интернет-сервис помощи студентам
SeryZone, доделал в твоем варианте сохранение n и Z в массивы, а массивы в файлы:
Вложения
Тип файла: rar The Mandelbrot Set_20130503.rar (2.93 Мб, 6 просмотров)
1
Модератор
 Аватар для FIL
3492 / 2614 / 742
Регистрация: 19.09.2012
Сообщений: 7,977
10.05.2013, 23:14
Новый вариант делает до 220 зумов:
Вложения
Тип файла: rar Project1_256.rar (638.5 Кб, 8 просмотров)
0
 Аватар для SeryZone
56 / 28 / 18
Регистрация: 09.03.2012
Сообщений: 726
Записей в блоге: 1
10.05.2013, 23:36  [ТС]
FIL, Как???? Кстати, я гораздо раньше с сохранением разобрался. Но я считаю, что эти методы сохранения никак не дадут нормального увеличения. Потому что надо преобразовывать каждую точку не BitMap, а Iteration даты. А это непросто - переписывать операцию StretchDraw для Iteration даты заново, весь геморрой с итерациями и т. д.
Я предлагаю, чтобы программа рендерила проекции Меркатора и сохраняла IterDat'у в файл. Потом я разберусь.
В чём нужна помощь - надо реализовать формулу Z = Z2+coord+exp(C) Помогите, а? А то у меня какая-то хрень получается...
Coord - это конечные координаты увеличения.
0
Модератор
 Аватар для FIL
3492 / 2614 / 742
Регистрация: 19.09.2012
Сообщений: 7,977
11.05.2013, 10:31
Не понятно, что такое "конечные координаты увеличения" и откуда они берутся.
0
 Аватар для SeryZone
56 / 28 / 18
Регистрация: 09.03.2012
Сообщений: 726
Записей в блоге: 1
11.05.2013, 17:05  [ТС]
FIL, Допустим, увеличиваем до определённого места... Да короче, вот видео, там показано:
http://www.youtube.com/watch?v=C_TLRAkWO_k
Там не в моей проге, но там увидишь, что с координатами
0
Модератор
 Аватар для FIL
3492 / 2614 / 742
Регистрация: 19.09.2012
Сообщений: 7,977
11.05.2013, 20:06
Ну меняется система координат на видео. Ясности это совсем не добавляет.
0
 Аватар для SeryZone
56 / 28 / 18
Регистрация: 09.03.2012
Сообщений: 726
Записей в блоге: 1
11.05.2013, 21:29  [ТС]
Ну, как тут не понять? Вот, смотри, твоя прога не выдаёт координат центра Re и Im. А вообще, должна выводить. Координаты изображения и степень увеличения.

Тут нашёл модуль работы с комплексными числами. Только не компилит чёт... да и как в XE3 скомпилить модуль??? http://www.delphisources.ru/pa... _unit.html
Мне важны функции ln и exp
0
Модератор
 Аватар для FIL
3492 / 2614 / 742
Регистрация: 19.09.2012
Сообщений: 7,977
11.05.2013, 22:04
Моя прога не выдаёт координат центра, т.к. они не нужны для построения фрактала.
А с модулем все просто:
Копируешь текст в файл cmplx.pas, сохраняешь в папку с прогой и подключаешь в uses.
Либо просто копируешь нужные тебе функции в свой код.
0
 Аватар для SeryZone
56 / 28 / 18
Регистрация: 09.03.2012
Сообщений: 726
Записей в блоге: 1
12.05.2013, 11:14  [ТС]
FIL, та я уже разобрался))) Но в теме "полярные координаты" надо правильно реализовать функцию ln(z)
а то у меня лажа там какая-то.
0
 Аватар для SeryZone
56 / 28 / 18
Регистрация: 09.03.2012
Сообщений: 726
Записей в блоге: 1
13.05.2013, 19:20  [ТС]
они не нужны для построения фрактала.
ОМГ! Я не желаю спорить... Но они нужны. По ним и увеличению мы вычисляем участок плоскости для построения того или иного момента фрактала.
0
 Аватар для SeryZone
56 / 28 / 18
Регистрация: 09.03.2012
Сообщений: 726
Записей в блоге: 1
30.05.2013, 11:34  [ТС]
FIL, Доброго времени суток... Помоги пожалуйста с одни маленьким условием.
If ZZ.re = Z.re and ZZ.im = Z.im then exit(-numIter). на ассемблере написать. Я не пойму как там условия делать
Надеюсь ты понял, что ZZ - это текущее Z, а NumIter - это текущий цикл (итерация). Z.re и Z.im - это координата на плоскости. Помогите. И ещё. У меня множество строило буквально за 190-200 мс в среднем. А щас - 280-310. Что могло так замедлить?
Вложения
Тип файла: zip The Mandelbrot Set.zip (3.07 Мб, 5 просмотров)
0
Модератор
 Аватар для FIL
3492 / 2614 / 742
Регистрация: 19.09.2012
Сообщений: 7,977
30.05.2013, 13:15
Это условие может выполняться только при первом проходе (когда NumIter = 1), при этом |Z| должет сразу получиться >= 128, что вообще нереально. Так в чем смысл всего этого?
0
 Аватар для SeryZone
56 / 28 / 18
Регистрация: 09.03.2012
Сообщений: 726
Записей в блоге: 1
30.05.2013, 14:00  [ТС]
FIL, нет. Тут надо:
Если Z.re = C.re и Z.im = C.im (проверяем в цикле) - то выходим. Не надо проверять |Z|>=128. То уже ПОСЛЕ этой проверки.

Добавлено через 5 минут
Допустим прога:
Code
1
2
3
4
5
6
7
function Mandelbrot(double C.re, C.im или complex C) ... и т.д.
for i:=1 to iter do
begin
    Z:=Z^2 + C;
    If (Z.re = C.re) and (Z.im = C.im) then exit(-i);  //Отриц. значения - значит периоды))
    If (Z.re*Z.re + Z.im*Z.im >= 128) then exit(i);
end;
Так яснее? Это чтоб пропускать чёрные места множества.
0
Модератор
 Аватар для FIL
3492 / 2614 / 742
Регистрация: 19.09.2012
Сообщений: 7,977
30.05.2013, 14:29
Я тебе о том же и говорю. При первом проходе Z ВСЕГДА = С. Это видно из формул:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
function Fractal_Mandelbrot(const c: TComplex): Longint;
var 
  z: TComplex;
  Re: Extended;
 
begin
  z.Re := 0;
  z.im := 0;
 
  for Result := 0 to Iterations - 1 do
  begin
    Re := Sqr(z.Re) - Sqr(z.Im);
    z.Im := z.Re * z.Im + z.Im * z.Re + c.Im;
    z.Re := Re + c.Re;
    if Sqr(z.Re) + Sqr(z.Im) > 4 then Exit;
  end;
  Result := Iterations;
end;
0
 Аватар для SeryZone
56 / 28 / 18
Регистрация: 09.03.2012
Сообщений: 726
Записей в блоге: 1
30.05.2013, 14:57  [ТС]
FIL, Может... Надо поставить условие на первую итерацию или... Даже не знаю...
0
Модератор
 Аватар для FIL
3492 / 2614 / 742
Регистрация: 19.09.2012
Сообщений: 7,977
30.05.2013, 15:04
Нет смысла в этом условии, т.к. на первой итерации оно всегда выполняется, а на последующих - никогда (либо вероятность этого ничтожно мала).
0
 Аватар для SeryZone
56 / 28 / 18
Регистрация: 09.03.2012
Сообщений: 726
Записей в блоге: 1
30.05.2013, 15:17  [ТС]
FIL, значит что-то я напутал...
Тут есть пропуск чёрных мест:
C++
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
static unsigned mandel_double_period(double cr, double ci)
{
    double zr = cr, zi = ci;
    double tmp;
    
    double ckr, cki;
    
    unsigned p = 0, ptot = 8;
    
    do
    {
        ckr = zr;
        cki = zi;
 
        ptot += ptot;
        if (ptot > MAX_ITER) ptot = MAX_ITER;
        
        for (p = 0; p < ptot; p++)
        {
            tmp = zr * zr - zi * zi + cr;
            zi *= 2 * zr;
            zi += ci;
            zr = tmp;
 
            if (zr * zr + zi * zi > 4.0) return p;
 
            if ((zr == ckr) && (zi == cki)) return MAX_ITER;
        }
    }
    while (ptot != MAX_ITER);
    
    return MAX_ITER;
}
Только ж блин... На каком языке оно))))
0
Модератор
 Аватар для FIL
3492 / 2614 / 742
Регистрация: 19.09.2012
Сообщений: 7,977
30.05.2013, 23:11
Тут идея следующая:
Берется первое значение Z и сравнивается с последующими. Если в течение некоторого количества циклов (ptot) ни одно из условий не выполняется, то берется текущее значение Z и сравнивается с последующими. Если обнаруживается равенство текущего Z с запомненным, значит имеется зацикленность, т.е. значения Z повторяются с определенной периодичностью, что говорит о попадании в темную область фрактала.
0
 Аватар для SeryZone
56 / 28 / 18
Регистрация: 09.03.2012
Сообщений: 726
Записей в блоге: 1
31.05.2013, 22:40  [ТС]
FIL, Ну так что... Попробуем реализовать?

Добавлено через 5 минут
Сначала на обычном дельфийском синтаксисе. Поставим макс. итераций - 1,000,000 и посмотрим... На отом коде, что вначале был, что мог строить прогрессивно. Там только пару циклов добавить, а прогрессивное построение покажет результат. Если получится - перепишем на asm. Кстати, если не все процессоры поддерживают SSE3 и SSE4, то как тогда юзать прогу? Замедлений не будет?
0
Модератор
 Аватар для FIL
3492 / 2614 / 742
Регистрация: 19.09.2012
Сообщений: 7,977
31.05.2013, 23:33
Попробуем, когда время свободное будет.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
31.05.2013, 23:33

Написать код для создания фрактала Мандельброта и Кантора
Кто может предоставить код для создания фрактала Мандельброта и Кантора. Не могу найти реализацию этих двух фракталов на C#.

Построение фрактала
При нажатие на btn2 выдает ошибку ссылаясь на строку 55 и выдает такое сообщение ...

Анимационное построение звёдного фрактала
Необходимо нарисовать звёздный фрактал с использованием анимации. Есть программа рисующая фрактал без анимации.

Построение трехмерного фрактала: как установить точки
Хотел построить трехмерный фрактал в wpf как установить точки? пробовал кубы рисовать вокруг точек но получается слишком большой массив...

Построение фрактала «Треугольник Серпинского» с возможностью изменения числа образующих примитивов с помощью клавиш
Доброго времени суток. Помогите реализовать программу на языке Java реализующую построение фрактала «Треугольник Серпинского» с...


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

Или воспользуйтесь поиском по форуму:
180
Ответ Создать тему
Новые блоги и статьи
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
Создание формы заимствованного документа
Maks 03.08.2026
Задача: Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также табличная часть со следующими реквизитами: - Расчетный счет покупателя. . .
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача: В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
Почему SEO не начинается с ключевых слов: что проверить до написания текстов
Neotwalker 01.08.2026
Когда владельцу сайта предлагают заняться SEO, первым шагом часто становится сбор запросов и написание текстов. Логика кажется понятной: 1. Находим ключевые слова. 2. Добавляем их на. . .
Знание — сила: Доктрина интенциональности знаний, углубление в формулу
Hrethgir 01.08.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11957&stc=1&d=1785567302 Знаменитый афоризм Фрэнсиса Бэкона «Знание — сила» (Scientia potentia est) в массовой культуре принято понимать. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru