Comments 41
А что станет с прямой линией?
p.s. понимаю, глупый вопрос
p.s. понимаю, глупый вопрос
+1
У меня от этой штуки Firefox умер, когда я поменял «Fractal iterations» на 5 (два раза пробовал).
Как можно этого избежать?
Как можно этого избежать?
0
Странно, я тестировал на Firefox под убунтой. На какой версии падает, на какой платформе, сколько точек было в базовой линии?
+1
20 точек. Видимо происходит расчет (одно из ядер ЦП загружено на 100%), но вешается весь браузер.
Firefox 22.0, Window 7 Enterprise 64-bit, Intel Core i5-2540M 2.60 GHz, 16 GB RAM
Расчеты могут быть требовательны к ресурсам, но хотелось бы иметь возможность их прервать не убивая браузер. :-)
Firefox 22.0, Window 7 Enterprise 64-bit, Intel Core i5-2540M 2.60 GHz, 16 GB RAM
Расчеты могут быть требовательны к ресурсам, но хотелось бы иметь возможность их прервать не убивая браузер. :-)
0
Ну да, 20 точек в 5 степени — 3.2 миллиона точек. С одной стороны много, с другой стороны — современные компьютеры умеют и не такое. Можно вычисления вынести отдельно и добавить кнопочку cancel. Тоже забавная задача, может сегодня вечером займусь. А может html canvas не готов к такому количеству lineTo.
+1
Убрал рекурсию. Добавил прогресс бар и кнопку отмены. Теперь рисует не более 10 тысяч отрезков за раз. Вешать браузер не должно. :)
+1
Знаю, что скажу бред, но фрактал из шапки чем-то напоминает Game Of Life.
0
Что-то в Хроме никаких фракталов не видно. Просто пустой квадрат.
+3
Shift + левая кнопка мыши на базовой линии — добавление новой вершины;
Ctrl + ЛКМ на вершине — удаление вершины;
ЛКМ на вершине — перемещение;
ЛКМ на сегменте — использование отражения на данном сегменте;
ЛКМ на пустом месте — передвижение всей фигуры целиком.
Ctrl + ЛКМ на вершине — удаление вершины;
ЛКМ на вершине — перемещение;
ЛКМ на сегменте — использование отражения на данном сегменте;
ЛКМ на пустом месте — передвижение всей фигуры целиком.
0
Базовой линии вообще не видно в Хроме, некуда кликать.
+1
Подтверждаю, пустой экран. GoogleChrome 28.0.1500.72 m, Windows 8 Профессиональная 6.2.9200
0
Та же фигня. Пусто
0
Интересно.
А что если на каждой итерации брать не первоначальную фигуру в качестве продолжения фрактала, а фигуру, получающуюся на n-1 итерации? Конечно, он будет очень быстро расти, но какая при этом будет образовываться форма?
А что если на каждой итерации брать не первоначальную фигуру в качестве продолжения фрактала, а фигуру, получающуюся на n-1 итерации? Конечно, он будет очень быстро расти, но какая при этом будет образовываться форма?
0
Кстати, чтобы самому ничего не скачивать, можно было бы сразу в jsfiddle.net разместить для демонстрации (правда там почему-то не работает). Также у вас есть небольшие ошибки в скрипте.
0
Для того, чтобы имитировать класс, вам следовало бы определять методы внутри прототипа конструктора, например так:
Экземпляр класса fracObject инстанцировать с помощью оператора
Ну и производить инициализацию внутри конструктора. Правда в таком случае, в отличии от вашего, свойства будут доступны снаружи.
Конструкторы, кстати, принято именовать с большой буквы.
fracObject.prototype.redraw = function () { ... };
fracObject.prototype.getBaseline = function () { ... };
fracObject.prototype.getInverse = function () { ... };
Экземпляр класса fracObject инстанцировать с помощью оператора
new
document.body.onload = function() {
var frac = new fracObject();
...
};
Ну и производить инициализацию внутри конструктора. Правда в таком случае, в отличии от вашего, свойства будут доступны снаружи.
function fracObject() {
this.baseline = [ { x: 50, y: 450 }, { x: 550, y: 450 } ];
this.normalized = [];
this.fracDepth = 0;
...
};
Конструкторы, кстати, принято именовать с большой буквы.
0
Как пользоваться конструкторами и прототипами я прочитал… Потом еще раз прочитал… Потом решил, что пойму это как-нибудь в следующий раз, а пока сделаю функцию, которая создает два объекта: один возвращает, а второй замыкает. Так что fracObject — это именно функция и маленькая буква здесь к месту.
Возможно уже завтра озарение настигнет меня и я пойму, что все сделал неправильно.
Возможно уже завтра озарение настигнет меня и я пойму, что все сделал неправильно.
+2
в сафари под макосью очень печально медленно
0
Есть проблема: можно добавить одну ноду и вытянуть её так, что длина рёбер будет больше, чем расстояние между концами ломаной. Условие «as needed» никогда не сработает, т.к.отображение получилось несжимающее, и вообще говоря это уже не фрактал.
Если сделать одно ребро «почти равным» расстоянию между точками, тоже видно, что логика «готовности» у вас хромает. Браузер так можно и на пять минут подвесить.
Разумно было бы ограничивать не число итераций, а останавливать разбиение ребра, когда его длина становится равной 1 px, т.е. более тонкую картинку уже невозможно отобразить.
Если сделать одно ребро «почти равным» расстоянию между точками, тоже видно, что логика «готовности» у вас хромает. Браузер так можно и на пять минут подвесить.
Разумно было бы ограничивать не число итераций, а останавливать разбиение ребра, когда его длина становится равной 1 px, т.е. более тонкую картинку уже невозможно отобразить.
0
«as needed» как раз повторяет итерации до тех пор, пока длина очередного отрезка не станет меньше 3 px. Но при этом не более 10 итераций в глубину, что позволяет остановиться в случае несжимающих отображений. Так что алгоритмически обработка в любом случае конечна. Но увы, конечная не значит быстрая. То, что программка при достаточном числе узлов и итераций может ввести в кому браузер мы уже выяснили, да…
0
На Mac клик с зажатым Ctrl считается кликом правой кнопкой мыши. К сожалению, похоже, быстро сделать обработку Cmd не получится, поэтому, наверное, самым легким решением будет добавить
altKey
параллельно с ctrlKey
. Спасибо :)0
del
0
Было бы здорово, если бы предусматривалась возможность генерировать фракталы, которые задаются не базовыми линиями, а сжимающими отображениями. Скажем, изначально есть прямоугольник, мы его сжимаем и двигаем, получаем другой прямоугольник. Потом возвращаемся к изначальному, снова сжимаем и двигаем. Таким образом мы задаем систему сжатий. Потом, как гласит фрактальная геометрия, если взять любой компакт (к примеру, любую точку), и применять к ней эти отображения (сжатия и сдвиги), потом применять их к тем точкам, которые получились, и так далее — то будет вырисовываться фрактал. А ускориться можно согласно теории хаоса на фракталах — возмем просто случайную последовательность из индексов сжимающих отображений и будем применять к точке, должен получиться тот же фрактал.
0
Классная идея с рисованием в браузере!
Сразу вспомнил студенчество и свою подобную десктопную программу в качестве курсовика. Только я делал задание начальной аксиомы и правил трансформации в виде текста. Плюс для красоты некоторых фракталов реализовал полутона.
Если добавить возможность прерывать линии, то можно получить другие интересные узоры, например: мозаика
Если кому интересно — вот программа с примерами разных фракталов в каталоге Samples.
Сразу вспомнил студенчество и свою подобную десктопную программу в качестве курсовика. Только я делал задание начальной аксиомы и правил трансформации в виде текста. Плюс для красоты некоторых фракталов реализовал полутона.
Если добавить возможность прерывать линии, то можно получить другие интересные узоры, например: мозаика
Если кому интересно — вот программа с примерами разных фракталов в каталоге Samples.
+2
Фрактал, это когда фигура повторяет сама себя, каким образом тогда в «мозайке» из прямоугольника получился квадрат в центре?
0
Во-первых, у вас неверное определение фрактала. Бывают нерегулярные фракталы.
Во-вторых, ничего удивительного нет в «квадрате из прямоугольника». Вон, из ломаной же получаются картинки вроде той, что выше.
Во-вторых, ничего удивительного нет в «квадрате из прямоугольника». Вон, из ломаной же получаются картинки вроде той, что выше.
0
Для фракталов на базе L-систем можно. Вообще зависит от «навороченности» правила и возможных поддерживаемых конструкций рисования. Их может быть достаточно много.
en.wikipedia.org/wiki/L-system#Example_7:_Fractal_plant
Example 7: Fractal plant
variables: X F
constants: + − [ ]
start: X
rules: (X → F-[[X]+X]+F[+FX]-X), (F → FF)
angle: 25°
Here, F means «draw forward», — means «turn left 25°», and + means «turn right 25°». X does not correspond to any drawing action and is used to control the evolution of the curve. [ corresponds to saving the current values for position and angle, which are restored when the corresponding ] is executed.
en.wikipedia.org/wiki/L-system#Example_7:_Fractal_plant
Example 7: Fractal plant
variables: X F
constants: + − [ ]
start: X
rules: (X → F-[[X]+X]+F[+FX]-X), (F → FF)
angle: 25°
Here, F means «draw forward», — means «turn left 25°», and + means «turn right 25°». X does not correspond to any drawing action and is used to control the evolution of the curve. [ corresponds to saving the current values for position and angle, which are restored when the corresponding ] is executed.
0
Sign up to leave a comment.
Самые простые фракталы на JavaScript