|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
23.07.2011, 12:21 | #1 |
Форумчанин
Регистрация: 15.06.2010
Сообщений: 740
|
Целочисленный фрактал Мандельброта
Случайно никто не подскажет целочисленный алгоритм построения фрактала Мандельброта? То есть без использования вещественных чисел.
Полагаю, что нужно подобрать некие коффициенты для умножения/деления в основной формуле. Если это важно, нужно для разрешения 320x240. То, что это можно сделать доказывает приложенный файл на ассемблере размером 65 байт, который использует только 16-битные регистры и целочисленные операции. Но по нему очень все-таки трудно понять или восстановить оригинальный алгоритм на языке высокого уровня (дельфи или паскаль, например). Меня бы вполне устроила картинка, которая получается с помощью этой программы.
Чтобы понять рекурсию, сперва нужно понять рекурсию.
|
23.07.2011, 13:30 | #2 |
Участник клуба
Регистрация: 03.06.2009
Сообщений: 1,814
|
Вот программа, рисующая множество мандельброта
там нужно подбирать коэффициенты C1 и C2. Думаю, поможет. Комментарии отображаются нормально под DOS'ом. Код:
Программирование - это единственный способ заставить компьютер делать то, что тебе хочется, а не то, что приходится.
|
23.07.2011, 14:11 | #3 | |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,709
|
Цитата:
Код:
|
|
23.07.2011, 14:28 | #4 |
Участник клуба
Регистрация: 03.06.2009
Сообщений: 1,814
|
Знаю, что тип переменных не тот, что просили. Но как ещё множество Мандельброта нарисвоать? Если это задание было на зачёт, то, видать, препод просто постебался над вами. Во всяком случае, можно поработать с округлением в этих строках - вот вам и будет целочисленный фрактал. Уравнения есть, а дальше дело за вашей фантазией. А вот скриншот очень уж похожий на тот, что моя программа выдаёт...задумайтесь...
Программирование - это единственный способ заставить компьютер делать то, что тебе хочется, а не то, что приходится.
|
23.07.2011, 14:38 | #5 |
Форумчанин
Регистрация: 15.06.2010
Сообщений: 740
|
Да не, ну представьте, что в паскале/дельфях нет типа REAL, EXTENDED и прочих. И соответственно нет Round и Trunc. Есть только скажем WORD, или INTEGER. То, что можно используя лишь эти типы построить фрактал - это точно, это доказывает программа на ассемблере.
Щаз вот ознакомился со статьей http://habrahabr.ru/blogs/crazydev/62043/ , попробовал перевести все на паскаль, но в итоге не работает. На ассемблерные вставки не смотрите, просто влом было с Graph возиться. Там просто процедура вывода точки на экран и ожидания нажатия любой клавиши. Код:
Чтобы понять рекурсию, сперва нужно понять рекурсию.
|
23.07.2011, 16:21 | #6 |
Старожил
Регистрация: 03.01.2011
Сообщений: 2,508
|
перевёл оригинальный ассемблерный код в более-менее читаемый исходник, вроде рисует. По пути немного прокомментировал, что где. Ширину и высоту можно менять, как и набор цветов. Так же, как и сдвиг по вертикали/горизонтали (см. комменты в коде).
Код:
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
Последний раз редактировалось veniside; 23.07.2011 в 16:32. |
23.07.2011, 16:32 | #7 |
Форумчанин
Регистрация: 15.06.2010
Сообщений: 740
|
Жестока ) Спасибо, буду разбираться. О результатах отпишусь.
Чтобы понять рекурсию, сперва нужно понять рекурсию.
|
23.07.2011, 18:28 | #8 |
Старожил
Регистрация: 03.01.2011
Сообщений: 2,508
|
Слегка доработал. Упрощать уже вроде некуда. Не скажу, что стало всё ясно, но понятно, что для каждого пиксела оно крутит цикл по цвету, пока y не выйдет за диапазон [-255..255] (или пока цвета не закончатся), после чего рисует пиксель в [Column, Row] с тем цветом, который оказался при выходе из цикла.
Код:
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
Последний раз редактировалось veniside; 23.07.2011 в 18:34. |
24.07.2011, 11:00 | #9 |
Форумчанин
Регистрация: 15.06.2010
Сообщений: 740
|
Спасибо за перевод исходника. Теперь бы вообще избавиться от integer, и оставить только word тип данных... Пока это не получается сделать.
Кстати, тот исходник, что я переводил со статьи хабра из бат-файла, таки заработал. Оказалось, что у меня процедура рисования точки глючила. На всякий случай оставлю его здесь, вдруг кто-то через поиск сюда выйдет. Код:
Чтобы понять рекурсию, сперва нужно понять рекурсию.
|
24.07.2011, 12:10 | #10 |
Старожил
Регистрация: 03.01.2011
Сообщений: 2,508
|
> вообще избавиться от integer
можно и так: Код:
У хабра-исходника, кстати, похожий алгоритм, только div вместо shr и немного другие коэффициенты.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Delphi. Множество Мандельброта и Жюлиа | KEnt | Помощь студентам | 8 | 07.12.2011 23:54 |
снежинка Мандельброта | NiCola999 | Общие вопросы C/C++ | 5 | 25.09.2010 16:17 |
Фрактал на PHP | Alter | PHP | 5 | 29.10.2008 15:24 |