Вход

Просмотр полной версии : Какую итерацию кривой дракона можно написать на 48К спеке?



Духовитин
26.12.2022, 21:15
Доброго дня Товарищи!

С дитём тут кривую дракона рисуем.
Сперва он на бейсике написал с использованием массива в 8192 элемента. Соответственно до 13-ой итерации дошёл.
Потом мы с ним переделали на PEEK и POKE - дошли до 15-ой итерации.
Дальше сделали хранение в одном байте по 4 элемента побитно - дошли до 17-ой.
В целом дойдя до 17-ой и идя обратно, построить можно и 18.

Есть у вас варианты, как написать >18 итерации?

Barmaley_m
28.12.2022, 18:27
А какой там алгоритм расчета? Обязательно ли запоминать промежуточные результаты, или их можно заново рассчитать, когда они понадобятся?

Духовитин
28.12.2022, 20:39
Алгоритм расчёта, простой.
Начальное состояние (0-ой шаг) - один отрезок.
Затем каждая итерация (n+1) строится на базе предыдущей (n), следующим образом: К концу n-ой итерации, пририсовываем последовательно её элементы (отрезки) с последней к первой, повёрнутые на PI/2 против часовой стрелки.

Т.е. каждый отрезок кривой можно закодировать 4-мя состояниями (вверх, влево, вниз, вправо).

По поводу расчёта, в том и дело, что каждая итерация строится на основе предыдущей, и вроде как последующую можно построить только сперва построив предыдущую. Соответственно из построения понятно, что n-ая итерация состоит из 2^n элементов.

CodeMaster
28.12.2022, 23:04
рисуем

дошли до 17-ой.
А как она у вас на экране Спека помещается? Даже если брать отрезок в 2 пикселя - 17 итераций не поместятся.

Духовитин
29.12.2022, 09:15
А как она у вас на экране Спека помещается? Даже если брать отрезок в 2 пикселя - 17 итераций не поместятся.
Расчётом размеров ширины и высоты в отрезках и расчётом длины отрезка. Там лепится уже в одной точке, несколько линий, но смысл в достижении большей итерации. Дальше может дойдём до навигации по кривой, т.е. отрисовки только видимого куска.

По расчёту - вроде в голову пришла схема, что ориентацию i-го элемента кривой (итерация тут вроде даже не важна) можно рекурсивно вычислить спускаясь к первому элементу.
Т.е. чтобы i-ый элемент расчитать, мы знаем что он на PI/2 повёрнут относительно элемента который находится на том же расстоянии от ближайшего элемента номер которого является степенью двойки.

Так что походу есть вариант расчёта можно сказать произвольной итерации. Осталось это проверить. Пока в голове только придумалось.

AlexG
29.12.2022, 14:07
фотку результата можно увидеть? а то фантазии не хватает "о чём речь" в конкретном случае

CodeMaster
30.12.2022, 13:11
походу есть вариант расчёта можно сказать произвольной итерации.
Если не надо рисовать (ну, или условно рисовать "всё в кучу"), то математически считать можно бесконечно. Практически как число Пи без вывода его значения, до тех пор пока аргументы формулы будут умещаться в памяти.

Destr
09.01.2023, 05:20
В ZX-Ревю №5-6 1997 (https://zxpress.ru/article.php?id=1668) был этот Дракон, сколько там у них получилось итераций?

ivagor
10.01.2023, 19:26
Программа из zx-ревю рисует дракона 8 порядка. Если увеличить разрядность счетчика, то можно и больше (и 18 и намного больше, правда уместить таких монстров на экране даже при шаге 1 не получится). Еще конечно стоит исправить небольшие недоработки и в целом там реализация (да простит меня автор) "школьная", можно заметно улучшить. Для примера три картинки (это не спек, но на базе той программы). 8 и 11 построены с шагом 3, 15 - с шагом 1, как в zx-ревю. У 8 и 11 одинаковая начальная точка, у 15 пришлось сместить чтобы влезло в экран.

Destr
11.01.2023, 11:16
можно заметно улучшить
Ну так на здоровьичко!
К тому-же ничего нигде хранить не надо...
(я-то в далёком 97-м набил этот дамп и голову ломал что это такое, только теперь когда вики есть увидел тему и понял что это фрактал такой :D )