Меню

Генератор случайных геометрических фигур

Генератор случайных геометрических фигур

Генерация случайной фигуры (с определенными параметрами)

lentinant Дата: Суббота, 12 Апреля 2014, 07:50 | Сообщение # 1

Есть идейка простой РПГшки, в которой надо сгенерировать мир (двухмерный, с видом сверху). Вот продумываю принцип генерации. Основная мысль сейчас — сделать равнину, на которую накладывать горы, леса, водоемы и т.д..

В связи с этим возник вопрос — какие есть алгоритмы для генерации определенной фигуры? Например, когда мне надо, чтобы озера были более-менее овальными, а реки и горные хребты — продолговатыми и узкими. Само собой, с возможностью введения девиаций (искажения, выступы, например, залив или мыс, и все такое).

Вопрос по программе максимум — есть ли вообще интересные алгоритмы генерации мира как такового.

Добавлено (12.04.2014, 07:50)
———————————————
Первый вопрос отпал, я понял, что выгодней искать сразу второй. Пока экспериментирую с шумом Перлина, позже попробую алгоритм «алмазных квадратов».
Когда-то тут будут ссылки на крутые проекты. Или нет.

Также, для своей браузерки я просто сделал моделирование изменения мира: на карте ставятся «точки влияния», которые по разному изменяют параметры мира вокруг (высоту, температуру, ветер и так далее).

Источник

Как генерировать случайные геометрические объекты с заданной извилистостью?

Я хочу генерировать случайные геометрические объекты в двумерном пространстве с заданной извилистостью.

Извилистость определяется по формуле:
f = P 2 / 4πS,
где f — извилистость двухмерной геометрической фигуры,
P – периметр фигуры,
S – площадь фигуры,
π – число пи.

Подскажите кто-нибудь сталкивался с такой задачей?
На первый взгляд она кажется лёгкой. Пытался с коллегами разные способы придумать, но пришли к выводу что нужно генерировать случайные фигуры и из них выбирать фигуры с нужной нам извилистостью, что не очень эффективно.

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Как генерировать случайные цвета
Помню в WINAPI для них были константы, а в .NET это было перечисление где тоже можно было для цвета.

Как генерировать случайные числа?
Как в с++ с генерировать, например положительные числа от 0 до 10? знаю, что есть генератор rand в.

Как генерировать случайные числа в VBA
Нужно как то генерировать случайные числа. Таймера в VBA нет, а функция RND генерирует одну и ту.

Как генерировать объекты заданного класса по событию
Что-то я, походу, не совсем понял принципы ооп и как оно работает. Допустим есть простой класс.

В моём случае фигура это — любая область в двумерном пространстве описанная замкнутой линией. У такой фигуры можно определить площадь и периметр (т.е. точка, линия, отрезок — не являются фигурами в данном случае).

Мы пытаемся сгенерировать выборку случайных объектов с заданной извилистостью для целей моделирования.

Могу предложить такой метод: заполнять фигуру малыми квадратами (пикселями).
Сначала в центре предполагаемой фигуры ставиться один квадратик (сторона 1 ед., площадь 1 кв.ед.)
Дальше к этом квадрату (а в дальнейшем к какому-то квадрату фигуры) последовательно прибавляется по одному квадрату. Прибавляемый квадрат (если он не висит в воздухе отдельно и не граничит с другими квадратами углом — эти случаи мы исключаем), может соприкасаться с другими квадратами или 1-й стороной, или 2-мя, или 3-мя или 4-мя, при этом происходит увеличение площади фигуры на 1 кв.ед., а изменение периметра по такой зависимости:

с каким количеством сторон других квадратов соприкасается новый квадрат изменение периметра изменение f
с 1 стороной +2 ед
с 2-мя сторонами 0 ед.
с 3-мя сторонами -2 ед.
с 4-мя сторонами -4 ед.

В этих формулах P и S — старые периметр и площадь, ДО прибавления очередного квадрата, f — тоже старое.
Изначально, когда квадрат был один, P=4, S=1, f=1,273
По формулам видно, что только прибавка квадратов, соприкасающихся 1-й стороной, увеличивает f, и с чем большим числом сторон соприкасается новый квадрат, тем сильнее падает f.
Соприкосновение с 4-мя сторонами может быть, когда в фигуре «дырка» — внутри один незаполненный квадрат.
Если обозначить количества квадратов каждого вида в фигуре , то найти эти количества их уравнения не реально, тем более что при прибавлении очередного квадрата старые квадраты (соседние) меняют свой статус — они уже имеют другое количество сторон соприкосновения с соседними квадратами, чем имели перед добавлением очередного квадрата.

Алгоритм может быть таким: Так как изначально (для центрального квадрата) f=1,273 , то вы сравниваете это значение (или текущее для уже частично заполненной фигуры) с тестовым значением f, для каждой пустой клетки, граничащей с каким-то квадратом вычисляете натуральное число — количество соседних квадратов. Например, для 4-х клеток вокруг первого квадрата это по 1 , для пустой клетки рядом со «стенкой» это тоже 1, пустой клетки в прямом угле это 2 и т.д. Придётся вводить массив пустых пикселей, граничащих с каким-то квадратом (две координаты и это натуральное число).
Затем прежде всего заполняете пустые клетки с числом 4 (внутренние «дырки»), затем, если нужно увеличивать f, выбираете рандомно пустую клетку с одной граничащей стороной и ставите туда квадрат (что, по таблице, увеличивает f), если нужно уменьшать f, то выбираете рандомно клетки с двумя и тремя граничащими сторонами.
Для большого числа установленных квадратов изменения f будут всё меньше и меньше, как видно из таблицы, поэтому можно достаточно точно приблизиться к тестовому f.

Источник

Случайные геометрические фигуры Фоны

Описание переведено с английского языка.

Разноцветные нерегулярные Geo формы стола Обзор

Все виды вещей, которые выражают смешное настроение и позитивность, являются ценностями. Мы с гордостью представляем вам обзор нашего нового винтажного небесшовного набора шаблонов, который является реальным положительным генератором и может стать идеальным многофункциональным решением для множества ваших требований к дизайну. Особенная концепция обоев с никогда не старыми конфетти орнаментом и всегда модными ретро-мотивами передают радость и атмосферу вечеринки. Следует отметить, что мы создали эту коллекция поп-арта хипстера, вдохновленную искусством 80-х — 90-х годов.

Если вы ищете современный ресурс, который будет достаточно мощным, чтобы вдохнуть в свои работы модное видение и стильные не скучные минималистские черты, попробуйте определенные геометрические Фоны. Их случайный порядок геометрических фигур в стиле поп-арт как плоские 3D-обьекты создают красочный внешний вид и выражают положительные вибрации. Все формы Мемфиса как треугольники, кубики, зигзаги, плюсы и кресты по отдельности не являются чем-то особенным, но все вместе они создают привлекательный и необычный рисунок. Делая длинную историю короче, хотим сказать, что предлагаемые декоративные материалы достойны вашего внимания.

Что вы получите?

У вас будет 1 удивительная концепция текстуры, 10 цветовых вариантов и праздничное настроение в качестве прекрасного бонуса. Все файлы высокого качества и готовы к печати, что делает их полезными для дизайнеров или иллюстраторов, которые ценят время и профессионализм. Подробнее о модификации представленного продукта читайте ниже.

Могу ли я настроить эти обои с помощью случайных гео-форм?

Да, без сомнения. Мы предоставляем все эти файлы в вектор формате AI. Вы можете легко поменять объекты, изменять размер фигур, устанавливать любимые цвета в программе Adobe Illustrator. Таким образом, все файлы, которые вы получите, являются полностью редактируемыми и были созданы с целью сделать ваш рабочий процесс дизайна лучше во всех отношениях.

Где вы можете использовать эти абстрактные шаблоны doodle?

Если честно — везде. Потому что эти текстуры многофункциональны и подходят для различных целей дизайна;

  1. Особые активы отлично подходят для печати на одежде, оберточной бумаге, визитных карточках, плакатах, Листовки ках или ноутбуках;
  2. С ними ваши рекламные баннеры будут выглядеть стильно и уникально;
  3. Сделайте их своим профилем в социальных сетях и они принесут веселую и привлекательную атмосферу;
  4. Вы также можете использовать эту коллекция в качестве миниатюры для видео на YouTube.

Как вы видите, остается использовать ваше воображение и эти выдающиеся Фоны сделают все остальное.

Дополнительная информация:

  • графика файлы в комплекте: JPG изображения, AI
  • Размеры пикселей: 5000×3333
  • Разрешение: 300dpi

Источник

Онлайн-инструменты создания фигур для макета

Видели сайты, где 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# я покажу как можно работать с моделями и превращать текст в графику. Большинство приводимого кода легко портируется на другие фреймфорки и языки.

Треугольник


Начнём с простейшей формы — треугольника. В Unity и во многих других движках используется популярный способ описания моделей: с помощью массивов вершин, треугольников и нормалей. Дополнительно для текстурирования используются uv-координаты вершин. Для работы с моделями есть класс Mesh, в котором для каждого набора данных имеется отдельный массив. В Mesh.vertices хранятся координаты вершин, в Mesh.triangles — индексы вершин группами по три. А в Mesh.normals и Mesh.uv лежат векторы нормалей и координаты uv-карт, индексы которых должны совпадать с индексами соответствующих вершин, т. е. порядок в массивах должен быть одинаковым. Покажу на примере, чтобы было понятнее.

Сделаем функцию, которая на вход принимает три вершины треугольника, а отдаёт готовую модельку. Начнём с основы.

Упаковываем три вершины в массив и передаём мешу. Треугольник описывается элементарно, но есть нюанс, про который нужно помнить. Если смотреть на модель снаружи, то вершины её треугольников должны располагаться по часовой стрелке. Это сделано для того, чтобы во время отрисовки можно было отсечь треугольники, которые «не смотрят в камеру», и обрабатывать их отдельно. Порядок вершин рассчитывается очень просто, поэтому такой способ фильтрации очень эффективен. Если взять произведение двух векторов, то можно найти третий вектор, перпендикулярный плоскости, образуемой сомножителями. Если пробежаться по треугольнику и посчитать произведения, то можно узнать порядок вершин. Кстати эти перпендикулярные вектора нам тоже нужны для описания моделей — это ведь нормали. Нормаль считается следующим образом:

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

Осталось добавить 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-карты, было бы неплохо их исправить, но для этого придётся переделывать очень много кода, пока и так сойдёт.

А где же сферы и цилиндры? – спросите вы. Редактор статей на Хабрахабре, конечно, замечательный, но навигация по большим объёмам текста в нём не очень удобная, так что оставлю сферы на следующий раз.

Исходники и бинарники для разных платформ можете скачать по ссылкам ниже.

Источник

Читайте также:  Как открутить шкив генератора уаз патриот
Adblock
detector