Целочисленная математика может генерировать удивительные шаблоны, когда выкладывается по сетке. Даже самые основные функции могут привести к потрясающе сложным проектам!
Ваш вызов
Напишите 3 тела функции Tweetable (т.е. 140 символов или менее) для значений красного, зеленого и синего для изображения 1024x1024.
Входными данными для функций будут два целых числа i (номер столбца для данного пикселя) и j (номер строки для данного пикселя), а на выходе будет короткое число без знака от 0 до 1023 включительно, которое представляет сумму заданного цвет присутствует в пикселе (i, j).
Например, следующие три функции создают картинку ниже:
/* RED */
return (unsigned short)sqrt((double)(_sq(i-DIM/2)*_sq(j-DIM/2))*2.0);
/* GREEN */
return (unsigned short)sqrt((double)(
(_sq(i-DIM/2)|_sq(j-DIM/2))*
(_sq(i-DIM/2)&_sq(j-DIM/2))
));
/* BLUE */
return (unsigned short)sqrt((double)(_sq(i-DIM/2)&_sq(j-DIM/2))*2.0);
/* RED */
return i&&j?(i%j)&(j%i):0;
/* GREEN */
return i&&j?(i%j)+(j%i):0;
/* BLUE */
return i&&j?(i%j)|(j%i):0;
Правила
- Учитывая этот код C ++ , подставьте в свои функции. Я предоставил несколько макросов и включил библиотеку, и вы можете включить complex.h. Вы можете использовать любые функции из этих библиотек и / или моих макросов. Пожалуйста, не используйте никаких внешних ресурсов, кроме этого.
Если эта версия не работает для вас, убедитесь, что вы компилируете с:
g++ filename.cpp -std=c++11
Если это не сработает, используйте альтернативную версию с использованием беззнаковых символов вместо беззнаковых.
Michaelangelo предоставил исправленную 24-битную или 48-битную версию цветного вывода .
- Вы можете реализовать свою собственную версию на другом языке, но она должна вести себя так же, как предоставленная версия C ++, и только функции из встроенных компонентов C ++, библиотеки или предоставленных макросов могут быть использованы для обеспечения ее справедливости.
- Размещайте только три ваших функциональных тела - пожалуйста, не включайте мой код в ваше сообщение
- Пожалуйста, включите уменьшенную версию или встроенную копию вашего изображения. Они сделаны в формате ppm и, возможно, должны быть преобразованы в другой для правильного просмотра на stackexchange.
- Тела функций (не включая подпись) должны содержать не более 140 символов.
- Это конкурс популярности - большинство голосов выигрывает
источник
Ответы:
Мандельброт 3 х 133 символа
Первое, что пришло мне в голову, было «Мандельброт!».
Да, я знаю, что уже есть представление Мандельброта. После подтверждения того, что я могу получить его длиной менее 140 символов, я применил уловки и оптимизации этого решения (спасибо Мартину и Тодду). Оставалось место для выбора интересного местоположения и масштабирования, а также приятной цветовой темы:
Всего 132 символа
Я попытался снизить его до 140 для всех 3 каналов. Рядом с краем есть немного цветового шума, и местоположение не так интересно, как первый, но: 132 символа
источник
Скатерти
Плоский
Я начал рисовать узор в клетку / ситцевом кресле, как бескрайнюю скатерть:
пульсация
Затем я представил рябь (не совсем правильная перспектива, но все же в 140 символов):
Цвет
Затем я сделал некоторые цвета более мелкозернистыми, чтобы придать детализации более широкому диапазону масштабов и сделать картинку более красочной ...
В движении
Немного большее уменьшение кода позволяет определить фазу волны P с двумя десятичными знаками, что достаточно для кадров, достаточно близких для плавной анимации. На этой стадии я уменьшил амплитуду, чтобы избежать морской болезни, и сдвинул все изображение еще на 151 пиксель (за счет одного лишнего символа), чтобы вытеснить алиасинг с верхней части изображения. Анимированные псевдонимы завораживают.
источник
#define P
. Это потребовало игры в гольф, чтобы допустить дополнительных персонажей#define P 6.03
.Случайный художник
Вот случайная запись. Для около 0,1% пикселей он выбирает случайный цвет, для других он использует тот же цвет, что и случайный соседний пиксель. Обратите внимание, что каждый цвет делает это независимо, так что на самом деле это просто наложение случайного зеленого, синего и красного изображения. Чтобы получить разные результаты на разных прогонах, вам нужно добавить
srand(time(NULL))
вmain
функцию.Теперь о некоторых вариациях.
Пропуская пиксели, мы можем сделать его более размытым.
И тогда мы можем медленно менять цвета, где переполнение приводит к резким изменениям, которые делают это еще более похожим на мазки кисти
Вещи, которые мне нужно выяснить:
srand
эти функции без ошибки.Вы также можете сделать случайную прогулку изотропной, как
чтобы дать тебе
Более случайные картины
Я немного поиграл с этим и создал несколько других случайных картин. Не все из них возможны в рамках ограничений этой задачи, поэтому я не хочу включать их здесь. Но вы можете увидеть их в этой галерее imgur вместе с некоторыми описаниями того, как я их создал.
Я испытываю желание развить все эти возможности в рамках и положить его на GitHub. (Не то чтобы такого не было, но все равно весело!)
источник
Некоторые острые вещи
Да, я точно знал, как это назвать.
РЕДАКТИРОВАТЬ: больше не использует
pow
. РЕДАКТИРОВАТЬ 2: @PhiNotPi указал, что мне не нужно использовать пресс столько же.Вы можете довольно легко изменить контрольные точки, чтобы получить другую картину:
@EricTressler указал, что на моих фотографиях есть Бэтмен.
источник
Конечно, Мандельброт должен быть представлен.
Пытаюсь улучшить цветовую схему сейчас. Это обман, если я определю вычисление как макрос
red_fn
и использую этот макрос в двух других, чтобы у меня было больше символов для необычного выбора цвета в зеленом и синем?Изменить: действительно трудно придумать приличные цветовые схемы с этими немногими оставшимися байтами. Вот еще одна версия:
И согласно предложению githubphagocyte и с улучшениями Тодда Лемана, мы можем легко выбрать меньшие секции:
Например
дает
источник
Юлия сет
Если есть Мандельброт, там тоже должен быть набор Джулии.
Вы можете часами настраивать параметры и функции, так что это всего лишь быстрый, который выглядит прилично.
Вдохновленный участием Мартина.
Хотите немного ГСЧ?
Хорошо, комментарий Спарра поставил меня на путь, чтобы рандомизировать параметры этих маленьких Джулиас. Сначала я попытался взломать на битовом уровне результат,
time(0)
но C ++ не допускает шестнадцатеричные литералы с плавающей точкой, так что это был тупик (по крайней мере, с моими ограниченными знаниями). Я мог бы использовать для этого тяжелое приведение, но это не вписалось бы в 140 байтов.В любом случае у меня осталось не так много места, поэтому я должен был бросить красную Джулию, чтобы поставить свои макросы и получить более обычный ГСЧ ( буду
time
посевным и реальнымrand()
, ууууу!).К сожалению, чего-то не хватает. Очевидно, что эти параметры должны быть статическими, иначе у вас будут какие-то странные результаты (но забавно, может быть, я рассмотрю немного позже, если найду что-нибудь интересное).
Итак, мы с зелеными и синими каналами:
Теперь давайте добавим простой красный шаблон, чтобы заполнить пустоту. Не очень творчески, но я не графический программист ... пока :-)
И, наконец, новый код со случайными параметрами:
Там еще осталось место ...
источник
Это интересно, потому что в нем вообще не используются параметры i, j. Вместо этого он запоминает состояние в статической переменной.
источник
источник
Буддхаброт (+ Антибуддхаброт)
Редактировать: Теперь это настоящий Буддхаброт!
Изменить: мне удалось ограничить интенсивность цвета в пределах байтового предела, так что больше нет ложных черных пикселей из-за переполнения.
Я действительно хотел остановиться после четырех ... но ...
Это слегка сжимается во время загрузки (и сокращается при встраивании), поэтому, если вы хотите полюбоваться всеми деталями, вот интересный обрезанный 512x512 (который не сжимается и отображается в полном размере):
Спасибо githubphagocyte за идею. Это потребовало довольно сложного злоупотребления всеми тремя функциями цвета:
Для лучшей цветовой схемы осталось несколько байтов, но пока я не нашел ничего, что превосходит изображение в оттенках серого.
Приведенный код использует исходные точки 4096x4096 и выполняет до 500 000 итераций на каждой из них, чтобы определить, удаляются или нет траектории. Это заняло от 6 до 7 часов на моей машине. Вы можете получить приличные результаты с сеткой 2k на 2k и итерациями 10k, что занимает две минуты, и даже просто сетка 1k на 1k с итерациями 1k выглядит довольно хорошо (это занимает около 3 секунд). Если вы хотите поиграть с этими параметрами, есть несколько мест, которые нужно изменить:
5e5
inBL
на свое количество итераций.4096
вRD
до нужного разрешения и1024.
инGR
на тот же фактор для поддержания правильного масштабирования.return c[i][j]
в системуGR
так , что содержит только абсолютное число посещений каждого пикселя. Максимальный цвет, по-видимому, в основном не зависит от количества итераций и линейно масштабируется с общим числом начальных точек. Поэтому, если вы хотите использовать сетку 1 к 1, вы можете захотеть использовать ееreturn c[i][j]*16;
или подобную, но этот фактор иногда требует некоторых усилий.Для тех, кто не знаком с Буддхабротом (как и я пару дней назад), он основан на вычислении Мандельброта, но интенсивность каждого пикселя - это то, как часто этот пиксель посещался на итерациях траекторий ухода. Если мы подсчитываем посещения во время неходовых траекторий, то это Антибуддхаброт. Существует еще более сложная версия под названием Nebulabrot, в которой вы используете различную глубину рекурсии для каждого цветового канала. Но я оставлю это кому-то еще. Для получения дополнительной информации, как всегда, Википедия .
Первоначально я не проводил различий между побегами и не побегами. Это породило заговор, который представляет собой союз Буддхаброта и Антибуддхаброта (на что указывает гитубфагоцит).
Этот выглядит немного как выцветшая фотография ... Мне это нравится.
источник
Серпинский Пентагон
Возможно, вы видели игровой метод приближения треугольника Серпинского путем построения точек на полпути к случайно выбранной вершине. Здесь я применил тот же подход, используя 5 вершин. Самый короткий код, на котором я мог остановиться, включал жесткое кодирование 5 вершин, и я никак не мог уместить все это в 140 символов. Поэтому я делегировал красный компонент простому фону и использовал свободное место в красной функции, чтобы определить макрос, чтобы другие две функции тоже стали меньше 140. Таким образом, все действует за счет отсутствия красного компонента в пятиугольнике.
Спасибо Мартину Бюттнеру за идею, упомянутую в комментариях к вопросу об определении макроса в одной функции для последующего использования в другой, а также за использование запоминания для заполнения пикселей в произвольном порядке, а не ограничения растровым порядком основной функции. ,
Размер изображения превышает 500 КБ, поэтому он автоматически преобразуется в формат jpg путем замены стека. Это размывает некоторые мелкие детали, поэтому я также включил верхнюю правую четверть в виде png, чтобы показать оригинальный вид:
источник
Ноты
Музыка Серпинского. : D Парни в чате говорят, что это больше похоже на перфорированную бумагу для музыкальных шкатулок.
Некоторые подробности о том, как это работает ... на самом деле, это просто увеличение рендера некоторых волнистых треугольников Серпинского. Внешний вид нот (а также блочность) является результатом целочисленного усечения. Если я изменю красную функцию, скажем,
усечение удаляется, и мы получаем рендер с полным разрешением:
Так что да, это интересно.
источник
Генератор случайных диаграмм Вороного кто-нибудь?
ОК, это доставило мне неприятности. Я думаю, что это довольно приятно, даже если результаты не так артистичны, как некоторые другие. Это сделка со случайностью. Возможно, некоторые промежуточные изображения выглядят лучше, но я действительно хотел иметь полностью работающий алгоритм с диаграммами вороного.
Редактировать:
Это один из примеров окончательного алгоритма. Изображение в основном представляет собой суперпозицию трех вороновых диаграмм, по одной для каждого цветового компонента (красный, зеленый, синий).
Код
ungolfed, прокомментированная версия в конце
Мне потребовалось много усилий, поэтому я чувствую, что хочу поделиться результатами на разных этапах, и есть хорошие (неправильные), которые можно показать.
Первый шаг: расположить несколько точек случайным образом, с
x=y
Я преобразовал его в jpeg, потому что исходный png был слишком тяжел для загрузки (
>2MB
), я уверен, что это более 50 оттенков серого!Второе: иметь лучшую координату у
Я не мог позволить себе создать другую таблицу координат, случайно сгенерированную для
y
оси, поэтому мне нужен был простой способ получить " случайные " из как можно меньшего числа символов. Я использовалx
координату другой точки в таблице, выполнив побитовоеAND
управление индексом точки.3-е: я не помню, но становится лучше
Но в то время у меня было более 140 символов, поэтому мне нужно было немного упасть.
4-е: сканы
Шучу, это не нужно, но круто, я думаю.
Продолжая работать над уменьшением размера алгоритма, я с гордостью представляю:
Издание StarFox
Вороной Инстаграм
5-е: увеличить количество очков
Теперь у меня есть рабочий кусок кода, так что давайте перейдем от 25 до 60 баллов.
Это трудно увидеть только с одного изображения, но почти все точки находятся в одном
y
диапазоне. Конечно, я не менял побитовую операцию,&42
гораздо лучше:И вот мы в том же месте, что и самое первое изображение из этого поста. Давайте теперь объясним код для редких, которые будут заинтересованы.
Разоблаченный и объясненный код
Спасибо за чтение до сих пор.
источник
Фрактал Ляпунова
Строка, использованная для генерации этого, была AABAB, а пространство параметров было [2,4] x [2,4]. ( объяснение строки и пространства параметров здесь )
С ограниченным пространством кода я думал, что эта раскраска была довольно крутой.
Я также сделал вариацию множества Мандельброта. Он использует карту, аналогичную карте множеств Мандельброта. Скажем, M (x, y) - отображение Мандельброта. Тогда M (sin (x), cos (y)) - это карта, которую я использую, и вместо проверки на экранирование значений я использую x и y, поскольку они всегда ограничены.
РЕДАКТИРОВАТЬ
После долгих болей я наконец-то нашел время для создания GIF-изображения второго изображения. Вот:
источник
Потому что единороги.
Я не смог получить версию OP с
unsigned short
работающими значениями цвета до 1023, так что пока это не исправлено, здесь используется версияchar
и максимальное значение цвета 255.источник
Logistic Hills
Функции
Ungolfed
Все #defines должны соответствовать BL до 140 символов. Вот немного измененная версия синего алгоритма:
В тех случаях, когда значения x падают наиболее часто для данного значения r (j), график становится светлее (обычно изображается темнее).
источник
Диффузионная ограниченная агрегация
Я всегда был очарован диффузионно-ограниченной агрегацией и количеством различных способов ее появления в реальном мире.
Мне было трудно написать это всего лишь 140 символами на функцию, поэтому мне пришлось сделать код ужасным (или красивым, если вам нравятся такие вещи, как
++d%=4
иfor(n=1;n;n++)
). Три цветовые функции вызывают друг друга и определяют макросы для использования, поэтому они не читаются хорошо, но каждая функция имеет длину до 140 символов.Чтобы визуализировать, как частицы постепенно агрегируют, я делал снимки через равные промежутки времени. Каждый кадр был произведен путем замены 1 в
for(n=1;n;n++)
0, -1 << 29, -2 << 29, -3 << 29, 4 << 29, 3 << 29, 2 << 29, 1 << 29, 1. Это держало его под пределом в 140 символов для каждого запуска.Вы можете видеть, что агрегаты, растущие близко друг к другу, лишают друг друга частиц и растут медленнее.
Небольшое изменение в коде позволяет увидеть оставшиеся частицы, которые еще не присоединились к агрегатам. Это показывает более плотные области, где рост будет происходить быстрее, и очень редкие области между агрегатами, где рост больше не может произойти из-за того, что все частицы были израсходованы.
Это может быть анимировано так же, как и раньше:
источник
Спираль (точно 140)
Это 140 символов точно, если вы не включаете заголовки функций и скобки. Это такая сложная спираль, которую я мог бы уместить в характере персонажа.
Я постепенно строил простую спираль, добавляя узоры к краям спирали и экспериментируя с тем, как можно комбинировать разные спирали, чтобы выглядеть круто. Вот неутешительная версия с комментариями, объясняющими, что делает каждый кусок. Использование параметров может привести к интересным результатам.
Возиться с параметрами:
Здесь спирали выстроены в линию, но имеют разные грани. Вместо блочных ребер в главном примере это ребра, целиком состоящие из синусоидальных волн.
Здесь градиент был удален:
Анимация (
которая по какой-то причине не выглядит зацикленной после того, как я ее загрузил, извините. Кроме того, мне пришлось уменьшить ее. Просто откройте ее на новой вкладке, если вы пропустили анимацию):И вот альбом imgur со всеми изображениями в нем. Я хотел бы посмотреть, сможет ли кто-нибудь найти другие крутые спиральные узоры. Кроме того, я должен сказать, что это одна из самых крутых проблем, которые я когда-либо видел. Наслаждайтесь!
РЕДАКТИРОВАТЬ: Вот некоторые фоны, сделанные из этих спиралей с измененными параметрами.
Кроме того, объединяя мои спиральные узоры с некоторыми из фракталов, которые я видел здесь с помощью операций xor / и / или, мы получаем заключительную спираль:
источник
Дань классика
V1 : Вдохновленный DreamWarrior «Будь счастлив», это прямое представление встраивает небольшое пиксельное изображение в каждый цветовой канал. Мне даже не нужно было играть в гольф код!
V2 : теперь со значительно более коротким кодом и толстой черной рамкой, изолирующей только «игровой экран».
V3 : космический корабль, пуля, поврежденные инопланетяне и синяя рамка, о боже! Попытка приблизиться к этому , примерно.
Я случайно наткнулся на правку Убер Ферруле, чей аватар вдохновил меня на добавление еще одной записи, основанной на пиксельной графике. Поскольку основная идея кода во многом похожа на идею Space Invaders, я добавляю ее к этой записи, хотя у этих двух определенно были разные сложные моменты. Для этого получить розовый цвет правильно (за счет белого) и тот факт, что это довольно большой спрайт, оказалось хорошим испытанием. Шестнадцатеричные экранированные
\xFF
символы (и т. Д.) В красном канале представляют соответствующие им символы в исходном файле (то есть красный канал в исходном файле содержит двоичные данные), тогда как восьмеричные экранирующие переменные являются литеральными (то есть присутствуют в исходном файле).источник
Живопись действия
Я хотел попробовать воссоздать что-то похожее на работу Джексона Поллока - капать и поливать краской горизонтальный холст. Хотя результаты мне понравились, код был слишком длинным, чтобы публиковать ответы на этот вопрос, и мои лучшие усилия все же сократили его до 600 байтов. Таким образом, код, размещенный здесь (который имеет функции 139 байтов, 140 байтов и 140 байтов соответственно), был создан с огромной помощью некоторых гениев в чате . Огромное спасибо:
для неумолимой групповой игры в гольф.
Макрос E (q) используется в функциях RD и GR. Изменение значения аргумента изменяет способ изменения красного и зеленого компонентов цветов. Макрос J заканчивается числом, которое используется для определения степени изменения синего компонента, который, в свою очередь, влияет на красный и зеленый компоненты, поскольку они рассчитываются по нему. Я включил некоторые изображения с красными и зелеными аргументами E, чтобы показать разнообразие возможных цветовых комбинаций. Наведите указатель мыши на изображения для красного и зеленого значений, если вы хотите запустить их самостоятельно.
Все эти изображения можно просмотреть в полном размере, если вы загрузите их. Размер файла невелик, поскольку плоский цвет соответствует алгоритму сжатия PNG, поэтому для загрузки на сайт сжатие с потерями не требовалось.
Если вы хотите увидеть изображения с разных этапов процесса игры в гольф, когда мы пробовали разные вещи, вы можете посмотреть их в чате боевиков .
источник
Думаю, я бы поигрался с параметрами этого кода ... Все заслуги достаются @Manuel Kasten. Это так круто, что я не устоял перед публикацией.
BubbleGumRupture http://i57.tinypic.com/3150eqa.png
SeussZoom http://i59.tinypic.com/am3ypi.png
SeussEternalForest http://i61.tinypic.com/35akv91.png
источник
Изменить: теперь это правильный ответ, благодаря предварительным декларациям
GR
иBL
.Веселитесь с Q-последовательностью Хофштадтера! Если мы используем радиальное расстояние от некоторой точки в качестве входного и выходного в качестве обратного цвета, мы получим нечто, похожее на цветной винил.
Последовательность очень похожа на последовательность Фибоначчи, но вместо того, чтобы вернуться назад в последовательности на 1 и 2 шага, вы берете два предыдущих значения, чтобы определить, как далеко нужно вернуться, прежде чем брать сумму. Он растет примерно линейно, но время от времени возникает взрыв хаоса (с увеличивающимися интервалами), который затем снова сводится к почти линейной последовательности перед следующим всплеском:
Вы можете увидеть эту рябь на изображении после областей, которые выглядят очень «плоскими» в цвете.
Конечно, использование только одного цвета скучно.
Теперь для кода. Мне нужна рекурсивная функция для вычисления последовательности. Для этого я использую
RD
всякий раз, когдаj
отрицательно. К сожалению, это не оставляет достаточного количества символов для вычисления самого значения красного канала, поэтомуRD
в свою очередь вызываетGR
со смещением для получения красного канала.Конечно, это в значительной степени простейшее возможное использование последовательности, и осталось множество символов. Не стесняйтесь заимствовать это и делать другие сумасшедшие вещи с этим!
Вот еще одна версия, где граница и цвета определяются Q-последовательностью. В этом случае места было достаточно,
RD
чтобы мне даже не понадобилось предварительное объявление:источник
Это вычисляет преобразование Жуковского набора концентрических окружностей с центром в точке, слегка смещенной от начала координат. Я немного изменил интенсивность синего канала, чтобы немного изменить цвет.
источник
Objective-C
Переписал код C ++ в Objective-C, потому что я не смог его скомпилировать ... Он дал те же результаты, что и другие ответы при работе на моем iPad, так что это все хорошо.
Вот мое представление:
Код этого довольно прост:
Вы можете увеличить на площадях путем умножения
i
иj
на0.5
, и0.25
т.д. , прежде чем они будут обработаны.источник
x^(x-y)^y
(это меня тоже смутило в первый раз). Если у вас есть возможности iOS, вот мой код: gist.github.com/Jugale/28df46f87037d81d2a8fВсплеск краски Серпинского
Я хотел больше поиграть с цветами, поэтому я продолжал менять другой ответ (самый крутой) и в конечном итоге закончил с этим.
Теперь это мой аватар. :П
источник
Я чувствую себя обязанным представить эту запись, которую я назову «неопределенным поведением», которая проиллюстрирует, что ваш компилятор делает с функциями, которые должны возвращать значение, но не:
Все черные пиксели:
Псевдослучайные пиксели:
И, конечно же, множество других возможных результатов в зависимости от вашего компилятора, компьютера, менеджера памяти и т. Д.
источник
заводной
Просто тригонометрия и странные макро-трюки.
RD:
GR:
BL:
РЕДАКТИРОВАТЬ: если
M_PI
не разрешено только из-за присутствия в POSIX-совместимых системах, его можно заменить на литерал3.14
.источник
acos(-1)
это хорошая замена дляM_PI
.Я не очень хорош в математике. Я всегда был плохим учеником на уроке математики. Так что я сделал простой.
Я использовал модифицированный код Javascript user1455003 . И это мой полный код .
Он очень короткий, поэтому все три функции помещаются в один твит.
Еще одна очень короткая функция. Я нашел этот паттерн Серпинского (и некоторый касательный паттерн), пока возился с различными математическими функциями. Это полный код
источник
i&j
визуализирует треугольник Серпинского. Который потрясающий .JavaScript
Другая версия. Функциональные тела являются твиттерными.
Исправлена функция рендеринга изображений. draw (rgbFunctions, setCloseEvent);
Фиолетовый
источник
Планетарный художник
Вдохновленный явно потрясающей записью Мартина , это другой взгляд на это. Вместо случайного заполнения части пикселей я начинаю с верхнего левого угла как RGB (512,512,512), и оттуда беру случайные прогулки по каждому цвету. Результат выглядит как что-то из телескопа (IMO).
Каждый пиксель берет среднее значение пикселей над / слева от него и добавляет немного случайных. Вы можете играть с изменчивостью, изменяя
p
переменную, но я думаю, что я использую хороший баланс (в основном потому, что мне нравится синий, поэтому большая волатильность размытия дает хорошие результаты).При усреднении наблюдается небольшое отрицательное смещение от целочисленного деления. Я думаю, что это работает, и дает хороший эффект затемнения в нижнем углу.
Конечно, чтобы получить больше, чем просто один результат, вам нужно добавить
srand()
строку в вашу основную функцию.источник
Отраженные волны
Основной рисунок шахматной доски, искаженный в соответствии с положением волны, расширяющейся из точки, подобной камню, упавшему в пруд (очень далеко от физической точности!). Переменная
w
- это количество пикселей от той точки, на которую переместилась волна. Еслиw
он достаточно велик, волна отражается от сторон изображения.w
= 225w
= 360w
= 5390Вот GIF, показывающий последовательность изображений по мере расширения волны. Я предоставил несколько разных размеров, каждый из которых отображает столько кадров, сколько позволяет ограничение размера файла 500 КБ.
Если бы я мог найти способ его вписать, то в идеале я бы хотел смоделировать волновые помехи, чтобы волны при пересечении выглядели более реалистичными. Я доволен отражением, хотя.
Обратите внимание, что я не смоделировал отражение волны в 3 лотах по 140 байт. На самом деле никакого отражения не происходит, просто так выглядит. Я спрятал объяснение на случай, если кто-то захочет сначала угадать:
источник