Как реализовать алгоритм ромбовидного квадрата?

Я читал это: http://www.gameprogrammer.com/fractal.html#diamond

И там сказано:

Это отправная точка для итеративной подпрограммы подразделения, которая состоит из двух этапов:

Ромбовидный шаг: взяв квадрат из четырех точек, сгенерируйте случайное значение в средней точке квадрата, где встречаются две диагонали. Среднее значение рассчитывается путем усреднения четырех угловых значений плюс случайная величина. Это дает вам алмазы, когда у вас есть несколько квадратов, расположенных в сетке.

Квадратный шаг: взяв каждый ромб с четырьмя точками, сгенерируйте случайное значение в центре ромба. Вычислите значение средней точки путем усреднения угловых значений плюс случайное значение, полученное в том же диапазоне, что и для алмазного шага. Это снова дает вам квадраты.

Я этого не понимаю. Каким образом, взяв середину каждого квадрата, получается ромб? Каким образом из середины каждого ромба получается квадрат?

Может ли кто-нибудь предоставить независимый от языка код, как это сделать?

Редактировать:

Шаг 1: у вас есть сетка и четыре угла сделайте одинаковой по высоте:

* ┬ ┬ ┬ *
├ ┼ ┼ ┼ ┤
├ ┼ ┼ ┼ ┤
├ ┼ ┼ ┼ ┤
* ┴ ┴ ┴ *

Шаг 2: вы берете среднюю точку квадрата и устанавливаете ее на среднее значение всех 4 углов плюс случайное значение:

* ┬ ┬ ┬ *
├ ┼ ┼ ┼ ┤
├ ┼ * ┼ ┤
├ ┼ ┼ ┼ ┤
* ┴ ┴ ┴ *

Что теперь? Я нигде не вижу алмаза


person Razor Storm    schedule 27.11.2011    source источник
comment
Начальная итерация несколько вырождена. Это станет более понятным, если вы посмотрите на шаги c- ›d-› e в этой ссылке.   -  person Oliver Charlesworth    schedule 28.11.2011
comment
Ромбы образуются только тогда, когда у вас есть несколько квадратов, расположенных в сетке. На данный момент забывая о случайном отклонении от центральной точки квадратов, ваш ромб выглядит следующим образом: если ваш первый квадрат A находится слева с вершинами Atl, Atr, Abl, Abr и средней точкой Ac, а ваш второй квадрат B находится справа с вершинами Btr, Btl, Bbr, Bbl и центром Bc, тогда у вашего ромба будут вершины Ac, Atr = Btl, Bc, Bbl = Abr. Маленькие буквы обозначают t-top, b-bottom, l-left, r-right, c-center.   -  person Nate Chandler    schedule 28.11.2011


Ответы (1)


Сложите два квадрата вместе: «это дает вам ромбы, когда у вас есть несколько квадратов в сетке». То же самое для над / под квадратом.

Шаг возведения в квадрат создает новый набор квадратов, смещенных от первого, с вершинами, определяемыми серединами ромба.

person Dave Newton    schedule 28.11.2011
comment
О, это теперь имеет смысл. - person Razor Storm; 28.11.2011
comment
@RazorStorm Проще нарисовать все на миллиметровой бумаге. Есть несколько забавных маленьких игр, в которые можно поиграть. - person Dave Newton; 28.11.2011
comment
О, это также объясняет, что означает ссылка, когда говорится, что рекурсивная реализация не дает достаточно информации о шаге ромбов - person Razor Storm; 28.11.2011