В «Создание реалистичной карты мира — Водные пути » я спрашивал о том, какие именно процессы влияют на течение и извилистость рек. Имея в виду некоторые из этих знаний, мне любопытно, как создатель мира (например, я сам!) мог создать реку на карте, особенно в равнинных областях. Как и в случае с береговыми линиями , в которых, я думаю, я стал лучше, мой текущий метод состоит в том, чтобы рисовать маленькие волнистые кривые на основе любой существующей топологии, которую я вычислил. Но это все еще раздражает. Есть ли лучший способ, который обычно имитирует это?
Некоторые вещи, которые я ищу:
Я подробно рассказал об алгоритме фрактала в своем ответе ниже. Ответы не должны вдаваться в такие подробности или даже показывать готовый продукт. Простое описание алгоритма подойдет.
Я не могу вам сильно помочь с кодированием, но я могу помочь с тем, что искать, чтобы сказать, правильно ли вы все поняли.
Просто высота позаботится о многом, как только вы узнаете, где находятся бассейны, вы узнаете направление и размер своих речных систем. Это означает, что вам нужно построить свои горы перед реками. давайте посмотрим на карту речных бассейнов в США.
теперь сравните это с размещением горного хребта.
обратите внимание, что внешний край каждого бассейна определяется либо береговой линией, где река впадает в океан, либо горами/возвышенностями. Обратите внимание, что по мере того, как вы углубляетесь в сушу, количество бассейнов резко уменьшается, в то время как вдоль побережья есть много маленьких бассейнов (и, следовательно, небольших рек). Вы можете сделать грубый график речной системы, просто наметив, как добраться из любой точки до побережья, не пересекая возвышенность. Вода идет по пути наименьшего сопротивления и обычно идет от гор к океану. Затем вам нужно добавить некоторые эффекты рандомизации, чтобы учесть локальную вариацию, которую вы не моделируете. Кто-то еще должен будет помочь вам в том, как добавить такую большую или меньшую вариацию.
кроме того, насколько река блуждает взад и вперед, зависит от уклона реки, более крутая, быстрая вода пересекает более прямую линию (хотя и не прямую), в то время как пологие (и, следовательно, медленно движущиеся) воды извиваются, если земля плоская. достаточно, это блуждание может стать очень экстремальным. .
Полностью изолированные бассейны, не имеющие выхода к морю, встречаются редко и встречаются только при наличии полного кольца гор. Они питаются изолированными озерами, которые становятся гиперсолеными (солеными). Соленое озеро в штате Юта — отличный пример. Обычные озера создаются локальными понижениями, которые наполняются и переполняются, образуя выход. У подавляющего большинства озер есть выход, то есть выходящая река.
Небольшие реки часто образуют дельты, когда достигают моря, они настолько плоские, настолько медленно движутся, что сбрасывают наносы, блокируя себя, создавая узор ветвления. в конечном итоге они выглядят как веера или густые деревья, уходящие в океан.
Я сам отвечаю на свой вопрос, но, пожалуйста, не позволяйте этому сдерживать любые другие ответы! Мне определенно любопытно узнать, есть ли какие-либо другие распространенные методы.
В предыдущем вопросе о береговых линиях Сэмюэл ответил , что методы фрактального ландшафта могут очень хорошо работать для имитации береговых линий. Степень самоподобия часто поражает. Я реализовал алгоритм для этого, и он дал очень хорошие результаты. Также оказывается, что реки тоже демонстрируют фракталоподобные узоры, и на относительно плоских участках их можно моделировать — фракталами! Моделирование фрактальной реки на самом деле является очень эффективным методом и часто используется.
Первым шагом для создания такой реки является определение местности. Если вы хотите, вы можете использовать фрактальные методы , например, алгоритм ромбовидного квадрата . Вы также можете выяснить это с помощью различных других методов; Я использовал случайные методы, которые начинаются с круглой области, затем случайным образом увеличиваются и уменьшаются возвышения при движении внутрь - взвешенные, конечно, с тенденцией идти вверх, а не вниз. После этого вы можете добавить еще больше деталей, смоделировав закономерности эрозии с помощью, например, клеточных автоматов ; Джаспер Макчесни написал потрясающий пост в блоге Worldbuilding.об этом. Даже не используя алгоритм Джаспера, я уже нашел некоторые результаты, которые мне нравятся. Вот несколько примеров (они показаны в виде контурных карт; зеленый, желтый, оранжевый и красный — над уровнем моря):
Я упоминаю их в особенности потому, что у них есть интересные особенности: долины и резкие нисходящие уклоны, а также участки равнины, спускающиеся к морю. Долины означают, что я могу понять, куда может течь река. В местах, где есть четкий спуск, легко определить путь реки. Тем не менее, некоторые из долин все еще широкие, и все они в конечном итоге заканчиваются, приводя к плоским участкам, где нет четкого пути для рек. Как же тогда я могу смоделировать, куда пойдут реки? Один из ответов, конечно, фракталы.
Вот версия (обычно используемого) метода, который я использовал для береговых линий, адаптированный и модифицированный для рек:
Теперь у вас есть отрезок реки! Просто вставьте его на свою карту между нужными точками и смотрите, как развивается мир. Сделайте это для любого количества сегментов и рек, но будьте осторожны, чтобы делать это в основном на равнинных участках, где топография не будет иметь большого влияния.
Лучшие результаты, которые я получил, на самом деле для а также , в течение четырех итераций. Есть, конечно, некоторые неудачи — например, случаи, когда река пересекает саму себя, — но есть и некоторые жемчужины, когда вы получаете правильные, повторяющиеся меандры, как настоящая река:
(Код, использованный для их создания, теперь находится на GitHub .)
Обратите внимание, что вертикальная шкала увеличена для эффекта. Качели на самом деле не такие дикие, как кажутся; на самом деле они намного меньше, и река не сильно отклоняется от прямой линии — этого достаточно, чтобы получить реалистичные извилины.
Я знаю, о чем сейчас думают некоторые люди. «Но HDE, не могли бы вы просто использовать случайное блуждание?» Ну да, вы можете использовать метод случайных блужданий по Гауссу . Это довольно просто, и на самом деле может быть проще в вычислительном отношении. Чтобы сделать это реалистичным, все, что вам нужно сделать, это случайным образом изменить размер шага. Однако в этом случае у меня есть пара проблем с использованием случайного блуждания:
Вот почему фракталы гораздо лучше подходят для моделирования рек, создания береговой линии и генерации ландшафта, чем случайные блуждания. У вас больше контроля, и в то же время вы гарантируете, что на течении реки будет много здоровых вариаций.
Вот еще одна мысль. Возможно, вы не хотите, чтобы ваша река текла идеально прямо. Вы уже сгенерировали свой ландшафт и определили общий путь реки в соответствии с высотой. В этот момент может показаться, что фрактальный метод бесполезен. Это не так. Все, что вам нужно сделать, это адаптировать алгоритм к прямой линии, заменив с длиной дуги вдоль кривой от точки к , и наклон линии, перпендикулярной (и проходящей через) средней точке каждого (теперь изогнутого) сегмента с линией, нормальной к кривой (т.е. перпендикулярной) в этой точке. Остальное просто; на самом деле, после каждого шага вы можете переделывать сплайн, каждый раз создавая новую кривую с большей детализацией. В качестве альтернативы вы можете дождаться конца и сделать что-то похожее на то, что мы делали раньше, по сути, просто используя начальный путь в качестве основы только для первой итерации. Я не пробовал ничего из этого сам, но это многообещающий метод.
Здесь нужно учитывать пару вещей:
Вы можете - если очень хотите - просмотреть эти шаги, но я бы предпочел вычислить их.
Вот тот случай, о котором я говорю, со всеми параметрами и кривыми, оцененными вручную (ну, в Paint). Река на западе — это просто модифицированная прямая линия с одной итерацией исходного алгоритма. Река на востоке использует первоначально изогнутый путь, продиктованный рельефом местности, со вторичным изгибом:
Я должен добавить одно заключительное замечание, потому что некоторые люди, читающие это, могут быть сбиты с толку. Фракталы и самоподобие также часто применяются к рекам, но с точки зрения образования притоков, т. е. того, как река ответвляется. Это две разные вещи, и их абсолютно не следует путать. Я извинился, если кого-то озадачил этим; совпадение не идеальное.
Для кодирования вы можете просто использовать Perlin Noise . Просто поищите, если не знаете, что это такое. Он также предлагает почти полный контроль над вашим конечным продуктом.
Хорошо, я не разбираюсь в коде, но я работал над несколькими проектами дорог и велосипедных дорожек, которые включали координацию с гидравлическим анализом. Однако они были на локальном уровне, поэтому я попытаюсь расширить их для вашего мира.
Из контурной карты, поскольку мы не знаем состояние вашей почвы (не нужно, если мы просто делаем снимок).
Информация, которую вы хотите знать ("исходные данные"? Я ничего не знаю о компьютерном моделировании). Это переменные, которые наши водники будут использовать в своих моделях, и если вы знаете о вычислениях больше, чем я - я уже знаю, что вы делаете HDE - тогда, возможно это соображения, которые вы тоже хотите использовать.
Распределение скоростей - см. выше. На это также влияет объем и картография. Если вы знаете, как объединить два типа распределения, вы начнете видеть двухмерную карту реки.
Высота поверхности воды! - самое главное, так как вода стекает вниз. Это повлияет на раздачу.
Величина скорости - должно быть понятно.
Направление скорости - должно быть понятно.
Глубина потока . Глубина важна при расчете объема, который вы можете получить за один раз. Вы можете использовать многочлен, чтобы получить поперечное сечение желаемой реки, а затем умножить его вдоль реки: каким-то образом компьютер может сделать это быстро для сложной реки.
Итак, у вас есть ваша контурная карта, теперь сделайте свою компьютерную магию с первым вводом, являющимся объемом. Дождевая вода в горах, артезианские колодцы из водоносных горизонтов и, не забывайте, человеческие сточные воды (это действительно важно) берут начало в верховьях, а затем приведенные выше переменные, смоделированные на основе вашей контурной карты, будут определять общий маршрут рек. . Это всего лишь снимок во времени, как отметил @shufflepants.
Ваши реки заканчиваются дельтой на плоских осадочных участках или ущельем прямо в океан в районах с крутыми и глубокими реками.
Типы рек подробно объясняются в принятом ответе на ваш вопрос « Реалистичная карта мира — водные пути» .
Это оставляет меня в конце того небольшого опыта и знаний, которые у меня есть. Следующий шаг — сложная часть.
была статья, написанная около 40 или 45 лет назад в Scientific American о кривых, генерируемых грехом. это процесс, который используют реки, обломки поездов и кровеносные сосуды, чтобы разрушиться, равномерно распределяя энергию по всему процессу. вот почему меандр реки может выглядеть как кровеносные сосуды. Я только что обнаружил, что статья имеет в виду: ers. Научный американец, 214, 60-70. http://dx.doi.org/10.1038/scientificamerican0666-60
Я думаю, что это в точку для вас. есть и другие хорошие статьи на тему кривых, порожденных грехом.
Что я обычно делаю, практикуя свои навыки создания фэнтезийных карт, так это рисую слои высот, а затем использую фильтр, чтобы создать впечатление, что земля не плоская, прежде чем рисовать реку, используя путь наименьшего сопротивления от ее поверхности. происхождение к морю.
Фрагмент одной из моих карт: не уверен, что вы видите разницу в высоте, так как цвет затрудняет определение, но я надеюсь, что вы поняли суть.
Чтобы расширить то, что сказал Джон (кстати, я люблю речную карту), на самом деле очень мало плоской. Любая равнина, которая не превращается в озеро, имеет склон, и вода течет по этой равнине до самой низкой точки. На равнине обычно есть высокие и низкие места (от менее метра до 10 метров), и реки, как правило, следуют за ними. Итак, уклон, рельеф и «ухабистость» будут определять форму реки.
Если местность плоская, а склон низкий, вы, как правило, получаете более «извилистые» реки. На первом фото в посте Джона сила воды преодолевает рельеф местности. Поскольку вода на внешней стороне кривой течет быстрее, чем вода на внутренней стороне, река размывает внешний берег быстрее, чем внутренний. Это заставляет петли расширяться наружу с течением времени. Тогда они могут быть зажаты водой, находящей более прямой путь, и вы получите эти «дуговые озера» вокруг реки.
Если вы пишете алгоритм, я бы предположил, что броуновское движение зависит от наклона и неровностей местности. Если вода окажется где-то без выхода, сделайте озеро, поднимите уровень воды до самого нижнего выхода и начните новую реку. Используя этот метод, вода в конечном итоге достигнет уровня моря. Однако, если учесть испарение, вода может никогда не достичь моря в засушливых районах.
Подходящий ответ на День Пи. Когда река течет, она петляет по ландшафту, очерчивая извилистый путь. Если вы возьмете длину реки и разделите ее прямым путем от начала до конца реки, вы получите «извилистость» реки. Это мера того, насколько изогнута река. Любая данная река может иметь различный изгиб, однако вы можете продемонстрировать, что средняя извилистость всех рек в мире должна быть... Пи. Серьезно. Посмотрите это потрясающее видео от Numberphile, чтобы узнать больше . Любопытно, что это результат того, как реки образуют старицы, выпрямляясь при этом. На практике вы не найдете извилистость больше 3,5 и не ниже 2,7.
Помните, что пи — это ожидаемое среднее значение всех рек, и это при идеальных условиях. Топография реального мира заставит это измениться, но это служит хорошим приближением того, насколько прямой или изогнутой должна быть данная река.
ИМХО, ни один из ваших графиков не выглядит правдоподобным.
С одной (очевидной) стороны их длина ничтожна. Уровень моря — это произвольный артефакт глобальной температуры и доступной поверхностной воды. Континенты, с другой стороны, являются результатом (по крайней мере, на этой планете) создания, столкновения и субдукции тектонических плит. Речная система - это то, что истощает водоносный горизонт. Если бы область была создана плоской, то не было бы особых причин ожидать образования одной реки.
Речная система, скорее всего, будет формироваться сильно разветвленной на всех уровнях протяженности. Как байкер-любитель, я могу сказать вам, что на Земле есть несколько «плоских» участков (за исключением солончаков).
Проблема с вашим предположением о плоскостности заключается в том, что не будет никакого стока, а значит, нет причин для существования реки.
Итак, я бы создал мир следующим образом:
Разница между этим подходом и вашим довольно глубока, имхо. Вы хотите соединить две точки. Я говорю, осушайте всю страну, начиная с гор, продвигаясь к низменностям. Не от точки 1 к точке 2, от точки 3 к точке 4. А от областей A, B, C,... к точкам α, ß, Γ,... одновременно спускаясь по высоте.
Кстати, следует включать и меандры, и косы, и анастомозы (см. https://en.wikipedia.org/wiki/Channel_types ) — по крайней мере, в некоторых случаях.
Прежде всего, зайдите на YouTube и найдите, почему реки изгибаются, и нажмите на первое. Я нашел это видео очень полезным. Большая часть того, что я могу вам рассказать, взято из этого видео, поэтому вот несколько ключевых моментов:
Длина одной буквы «s» в реке примерно в шесть раз больше ширины реки.
Если на пути возникнут какие-либо возмущения, река просто обойдет их.
Меандр может быть вызван почти чем угодно, поэтому они ели довольно часто. Иногда s будет тоньше, чем другие, потому что он образовал старицу.
Похоже, на вашей диаграмме есть хотя бы один пример захвата реки (река впадает в море по одному пути и в озеро по другому на той же реке), что не так часто встречается, и в точке захвата, где вода может стекать по обоим рукавам ситуация будет очень недолговечной («Н»-образная).
Большинство рек в конечном итоге впадают в море, хотя в некоторых случаях в жарких районах испарение может привести к образованию испарительных бассейнов. У вас есть несколько из них с озерами, что нормально, но помните о необычных обстоятельствах, связанных с этим.
Если вы хотите создать реалистичную реку, я предлагаю вам начать с верхнего истока или оттока и работать оттуда вниз по течению или вверх по течению. Если вы работаете вверх по течению, вам следует подумать о ряде вопросов, во-первых, сколько воды вытекает? При прочих равных это поможет определить площадь речного бассейна и длину реки.
Затем вы можете работать вверх по течению с ответвляющимися притоками по мере продвижения. Каждая миля реки и каждый приток должны уменьшать размер реки. Очевидно (рассчитывая путь реки по-своему), течение идет в гору, поэтому с течением времени вероятность появления холмов или гор должна увеличиваться. Таким образом, река будет определять, где находится возвышенность.
Другой способ сделать это - работать вниз по течению, если вы начинаете внутри страны. В этом случае должно быть предположение о более низкой земле впереди, а также возможность слияния притоков. В этом случае реки будут определять, где находится море. В очень крупных реках на низких высотах у моря также существует возможность образования рукавов и разветвления реки в дельту.
Я бы избегал Н-образных участков реки, за исключением, возможно, района дельты. Я бы также тщательно подумал о том, чтобы реки впадали в озера, не имеющие выхода к морю. Это возможно, и есть много примеров, но это гораздо реже, чем реки, впадающие в море на несколько порядков.
Возможно, вы захотите рассмотреть возможность использования другого алгоритма для разных стадий развития рек от быстрых горных ручьев до более медленных равнинных рек со все большим количеством петель и топологией поймы (озера с волчьей дугой), наконец и, возможно, дельту. Между прочим, река на равнине вполне может закружиться так, что отрезает часть себя. Вот что такое старицы. https://en.wikipedia.org/wiki/Оксбоу_лейк
Мормацил
HDE 226868
Мормацил
перетасовки
Моника Челлио
Тераот
Мог говорит восстановить Монику
Геррит
рынок
джеймскф
Моррисон Чанг
рынок