Генератор случайных геометрических фигур
Генерация случайной фигуры (с определенными параметрами)
lentinant | Дата: Суббота, 12 Апреля 2014, 07:50 | Сообщение # 1 | |||||||||||
Есть идейка простой РПГшки, в которой надо сгенерировать мир (двухмерный, с видом сверху). Вот продумываю принцип генерации. Основная мысль сейчас — сделать равнину, на которую накладывать горы, леса, водоемы и т.д.. В связи с этим возник вопрос — какие есть алгоритмы для генерации определенной фигуры? Например, когда мне надо, чтобы озера были более-менее овальными, а реки и горные хребты — продолговатыми и узкими. Само собой, с возможностью введения девиаций (искажения, выступы, например, залив или мыс, и все такое). Вопрос по программе максимум — есть ли вообще интересные алгоритмы генерации мира как такового. Добавлено (12.04.2014, 07:50) Также, для своей браузерки я просто сделал моделирование изменения мира: на карте ставятся «точки влияния», которые по разному изменяют параметры мира вокруг (высоту, температуру, ветер и так далее). Источник Как генерировать случайные геометрические объекты с заданной извилистостью?Я хочу генерировать случайные геометрические объекты в двумерном пространстве с заданной извилистостью. Извилистость определяется по формуле: Подскажите кто-нибудь сталкивался с такой задачей? Помощь в написании контрольных, курсовых и дипломных работ здесь. Как генерировать случайные цвета Как генерировать случайные числа? Как генерировать случайные числа в VBA Как генерировать объекты заданного класса по событию В моём случае фигура это — любая область в двумерном пространстве описанная замкнутой линией. У такой фигуры можно определить площадь и периметр (т.е. точка, линия, отрезок — не являются фигурами в данном случае). Мы пытаемся сгенерировать выборку случайных объектов с заданной извилистостью для целей моделирования. Могу предложить такой метод: заполнять фигуру малыми квадратами (пикселями).
В этих формулах P и S — старые периметр и площадь, ДО прибавления очередного квадрата, f — тоже старое. Алгоритм может быть таким: Так как изначально (для центрального квадрата) f=1,273 , то вы сравниваете это значение (или текущее для уже частично заполненной фигуры) с тестовым значением f, для каждой пустой клетки, граничащей с каким-то квадратом вычисляете натуральное число — количество соседних квадратов. Например, для 4-х клеток вокруг первого квадрата это по 1 , для пустой клетки рядом со «стенкой» это тоже 1, пустой клетки в прямом угле это 2 и т.д. Придётся вводить массив пустых пикселей, граничащих с каким-то квадратом (две координаты и это натуральное число). Источник Случайные геометрические фигуры ФоныОписание переведено с английского языка. Разноцветные нерегулярные Geo формы стола Обзор Все виды вещей, которые выражают смешное настроение и позитивность, являются ценностями. Мы с гордостью представляем вам обзор нашего нового винтажного небесшовного набора шаблонов, который является реальным положительным генератором и может стать идеальным многофункциональным решением для множества ваших требований к дизайну. Особенная концепция обоев с никогда не старыми конфетти орнаментом и всегда модными ретро-мотивами передают радость и атмосферу вечеринки. Следует отметить, что мы создали эту коллекция поп-арта хипстера, вдохновленную искусством 80-х — 90-х годов. Если вы ищете современный ресурс, который будет достаточно мощным, чтобы вдохнуть в свои работы модное видение и стильные не скучные минималистские черты, попробуйте определенные геометрические Фоны. Их случайный порядок геометрических фигур в стиле поп-арт как плоские 3D-обьекты создают красочный внешний вид и выражают положительные вибрации. Все формы Мемфиса как треугольники, кубики, зигзаги, плюсы и кресты по отдельности не являются чем-то особенным, но все вместе они создают привлекательный и необычный рисунок. Делая длинную историю короче, хотим сказать, что предлагаемые декоративные материалы достойны вашего внимания. Что вы получите? У вас будет 1 удивительная концепция текстуры, 10 цветовых вариантов и праздничное настроение в качестве прекрасного бонуса. Все файлы высокого качества и готовы к печати, что делает их полезными для дизайнеров или иллюстраторов, которые ценят время и профессионализм. Подробнее о модификации представленного продукта читайте ниже. Могу ли я настроить эти обои с помощью случайных гео-форм? Да, без сомнения. Мы предоставляем все эти файлы в вектор формате AI. Вы можете легко поменять объекты, изменять размер фигур, устанавливать любимые цвета в программе Adobe Illustrator. Таким образом, все файлы, которые вы получите, являются полностью редактируемыми и были созданы с целью сделать ваш рабочий процесс дизайна лучше во всех отношениях. Где вы можете использовать эти абстрактные шаблоны doodle? Если честно — везде. Потому что эти текстуры многофункциональны и подходят для различных целей дизайна;
Как вы видите, остается использовать ваше воображение и эти выдающиеся Фоны сделают все остальное. Дополнительная информация:
Источник Онлайн-инструменты создания фигур для макетаВидели сайты, где Background состоит из разных фигур нестандартных форм? Хотите себе такие же? Тогда представляю вам 2 сайта, где вы можете создать свои произвольные фигуры и скачать их в SVG. Blob Maker — это онлайн-помощник по созданию блобсов (blobs), то есть фигур разной формы. Позволяет настроить цвет, варианты изгиба, размер фигуры. Get Waves — инструмент, позволяющий создать фигуры в виде волн. Также доступен как плагин в Figma. Можно настроить форму изгиба, расположение, цвет, прозрачность и частоту колебаний. Все созданные фигуры и волны можно скачать в формате SVG совершенно бесплатно ! Blob Maker не открывается что то Прошу прощения, исправил ссылку. создай пост с подборкой плагинов для фигмы 🙏🏾 Будет время и возможность — обязательно!) Во время пандемии компания выпускала некоторые фильмы одновременно в кинотеатрах и на Disney+. Ричард Брэнсон — британский бизнес-магнат и филантроп, чьё состояние достигает нескольких миллиардов долларов. Он пересёк два океана на воздушном шаре, ездил в танке по Таймс Сквер, отправился в суборбитальный полет и удостоился рыцарского звания. В августе 2021 года прошёл первый чемпионат для университетских команд в формате Future Skills Team Challenge. С проблемой столкнулись пользователи устройств, активированных на запрещённых территориях. В ковидный 2020 ему удалось облететь практически вокруг света: из Новой Зеландии в Чили, потом в Великобританию, ОАЭ и обратно в Новую Зеландию. И все это вместе с женой и ребенком. Это больше история про путешествия, чем про IT — он расскажет, как это повлияло на работу, почему бытовые трудности в путешествиях далеко не самое главное и зачем… Источник Генераторы для Figma (7+ полезных плагинов)В данной подборке мы соберем плагины, генерирующие различные элементы в Figma. Это полезные дополнения, помогающие оживить создаваемый дизайн. Get WavesПлагин создаёт волнообразный вектор. Можно задать несколько характеристик, влияющих на форму и размер волн. Волны в Figma Wave & CurveПлагин создает кривые различных форм. Есть несколько настроек, меняющих форму кривых. Похож на Get Waves. Кривая в Figma obliqueПлагин создает объемные фигуры и красивые тени из ваших элементов. Объем для объектов в Figma PhyllotaxПлагин берет ваши исходники и располагает их в красивой форме.
Dot gridЗаполняем фрейм указанного размера точками заданной величины. Интерфейс плагина ConfettiГенерирует разбросанные в случайном порядке ваши исходники по фрейму Конфети из групп Hand WireframeПлагин создает векторную штриховку для элементов.
GeometricПлагин генерирует геометрические фигуры предустановленных форм. Есть несколько шаблонов. Geometric ChartsПлагин Charts генерирует случайные графики.
Table GeneratorГенерирует простые таблицы.
Играй бесплатно в браузере!
Заполните форму, мы сделаем иконку Источник Процедурная генерация трёхмерных моделейПроцедурная генерация — замечательная штука! Интереснее всего работать именно с графикой, особенно трёхмерной — сразу видно результат. Всего пары инструкций достаточно, чтобы создать облако треугольников как на картинке выше. Процедурная генерация моделей может помочь сэкономить размер дистрибутива, добавить кастомизацию игровых персонажей, на худой конец её просто можно использовать для создания спецэффектов. На примере движка Unity и C# я покажу как можно работать с моделями и превращать текст в графику. Большинство приводимого кода легко портируется на другие фреймфорки и языки. Треугольник Сделаем функцию, которая на вход принимает три вершины треугольника, а отдаёт готовую модельку. Начнём с основы. Упаковываем три вершины в массив и передаём мешу. Треугольник описывается элементарно, но есть нюанс, про который нужно помнить. Если смотреть на модель снаружи, то вершины её треугольников должны располагаться по часовой стрелке. Это сделано для того, чтобы во время отрисовки можно было отсечь треугольники, которые «не смотрят в камеру», и обрабатывать их отдельно. Порядок вершин рассчитывается очень просто, поэтому такой способ фильтрации очень эффективен. Если взять произведение двух векторов, то можно найти третий вектор, перпендикулярный плоскости, образуемой сомножителями. Если пробежаться по треугольнику и посчитать произведения, то можно узнать порядок вершин. Кстати эти перпендикулярные вектора нам тоже нужны для описания моделей — это ведь нормали. Нормаль считается следующим образом: Сначала сделали из трёх точек два вектора, а потом перемножили. Эта нормаль будет одинаковой на всех вершинах треугольника. Осталось добавить uv-координаты, для трёх вершин это просто. Ну и всё, треугольник готов. Теперь его можно использовать. Четырёхугольник Описать четырёхугольник капельку сложнее, нужно добавить одну вершину с её характеристиками и дополнительный треугольник. Я немного изменил входные параметры по сравнению с треугольником, теперь нужно указывать левый нижний угол и две стороны, с настоящими квадами Mesh в Unity всё равно не работает. Напоминаю, что вершины по-прежнему записываются по часовой стрелке. Теперь, когда мы имеем два базовых примитива, мы можем собрать любую модель. Плоскость Лень — двигатель прогресса, поэтому для сборки квадратов в модель будем использовать Mesh.CombineMeshes. Этот метод принимает на вход структуру CombineInstance, в которой можно указать модельку, её индекс и матрицу трансформирования. Для нас важно только первое, остальное игнорируем. На вход метода подаётся стартовая позиция плоскости, ширина и длина сегмента, количество сегментов. В двойном цикле все квадраты складываются в массив CombineInstance, после чего массив собирается в готовую модель. Параллелепипед Из квадратов хорошо получаются кубы. Даже лучше, с помощью наших псевдоквадов можно делать не только кубы, но и параллелепипеды. Только тссс! Никому не говорите. Нужно всего шесть четырёхугольников. Зная длину, ширину и высоту параллелепипеда, можно рассчитать все его вершины. Удобно сначала найти два противоположных угла параллелепипеда, а потом от них отстраивать всё остальное. Также имеет смысл отцентрировать модель. Как это выглядит на практике можете посмотреть ниже. ОктаэдрОктаэдр во многом похож на куб, его вершины очень легко рассчитать, самая большая сложность — сообразить порядок вершин в треугольниках. Октаэдр вписывается в сферу, поэтому имеет смысл строить его по радиусу этой сферы. Все вершины элементарно создаются, так что я не буду здесь останавливаться В конце я применил Mesh.RecalculateNormals, который автоматически считает нормали, так проще. Посмотрите на разницу в освещении между двумя октаэдрами на соседней картинке. В первом случае шэйдеру приходится интерполировать между нормалями, смотрящими совсем в разные стороны, поэтому освещение получается нереалистичным. А во втором случае все грани острые, чёткие. Общие нормали подходят для сфер, гладких поверхностей или если необходимо скрыть малое количество полигонов. А для нашего случая вершин нужно больше. Тетраэдр Освежили память? Продолжим. Пусть наш тетраэдр стоит на одной из граней, тогда противоположную вершину можно добавить сразу: Остальные вершины должны образовывать равносторонний треугольник. Их координаты можно найти с помощью синусов и косинусов. В Unity есть функции Mathf.Sin и Mathf.Cos, которые ведут расчёт в радианах. Делим окружность на три части и находим на ней три точки: Из этих вершин уже можно собрать пирамидку, но это не будет тетраэдром, потому что у настоящего тетраэдра все грани одинаковые. Для настоящего тетраэдра основание пирамиды нужно немного уменьшить и сдвинуть ниже. Тут опять пригодятся синусы и косинусы, но чтобы ими воспользоваться, немного смухлюем и подсмотрим один угол в Википедии. «Edge central angle» это угол между радиусами описанной сферы, пересекающими вершины тетраэдра. Кхм, или что-то в этом роде, я успел запутаться пока формулировал мысль. В общем присовокупив этот угол получаем следующий код: Не так уж и сложно, надеюсь, что все всё поняли. Вот так выглядит всё в итоге, с добавлением масштабирования: А вот тот же тетраэдр без математики, с захардкоденными вершинами, почувствуйте разницу: Икосаэдр На каждой окружности их по пять штук, а значит интервал между ними 72 градуса. Смещение между окружностями — 36 градусов. Для выравнивания вершин нам опять понадобится волшебный угол из Википедии: «If two vertices are taken to be at the north and south poles (latitude ±90°), then the other ten vertices are at latitude ±arctan(1/2) ≈ ±26.57°». В переводе на русский это означает, что волшебный угол — арктангенс одной второй. В конечном итоге всё похоже на тетраэдр, просто окружностей две и немного сложнее сцепка вершин. Сразу добавляем две вершины, считаем одну половинку, затем другую. Собираем в треугольники четырьмя порциями. ЗаключениеЕсли вы внимательно читали код в статье, то наверняка заметили, что там много ненужных вычислений, тот же Mathf.Cos(magicAngle) из примера выше. При желании его можно посчитать только один раз и занести в переменную, это будет не так наглядно и понятно зато быстрее. Кроме того в генерируемых моделях не самые удобные uv-карты, было бы неплохо их исправить, но для этого придётся переделывать очень много кода, пока и так сойдёт. А где же сферы и цилиндры? – спросите вы. Редактор статей на Хабрахабре, конечно, замечательный, но навигация по большим объёмам текста в нём не очень удобная, так что оставлю сферы на следующий раз. Исходники и бинарники для разных платформ можете скачать по ссылкам ниже. Источник ➤ Adblockdetector |