Seaward.ru

Здравствуйте, гость ( Вход | Регистрация )

> Математическая генерация дна моря (глубины), Задача на мат.логику и/или программиование (не Стром-2.х)
ALexusB
сообщение Nov 13 2008, 14:32
Сообщение #1


Разработчик игры К:ВЛ
*******

Seaward TeamЖелезный Профессор
Группа: Admin
Сообщений: 15,038
Регистрация: 2-November 04
Пользователь №: 3



Народ, нужна помощь в одной интересной задаче для нужд игры про "кораблики" не на стром-2.х

Уперся в генерацию (роботом) дна (мелей)

Дано:
Есть матрица, например, 64х64 или 100х100, не важно, хоть 100х60 клеток.
Значение клеток - это глубина в метрах.
Для простоты считаем до 7 метров, далее для корабля не важно - "нет дна".
То есть 1 2 3 4 5 6 7 видов значений.

переходы глубин плавные, то есть 1-2 2-3 и тп, 1-7 или 1-3 быть не может.

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

Требуется
Алгоритм генерации мелей амебообразной формы (из значений 1) с плавным переходом в 7

Решение

???

Какие есть идеи?

Понятно, что вариант наколбасить все ручками рабочий - редактор такой сделать не вопрос, он у мя уже почти готов.
Но хочется, чтоб само делало, каждый раз разное
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
3 страниц V < 1 2 3 >  
Reply to this topicStart new topic
Ответов(20 - 39)
Belphegor
сообщение Nov 14 2008, 20:41
Сообщение #21


ou Le Fantome du Louvre
*******

Заслуженный Корсар
Группа: форумчанин
Сообщений: 1,232
Регистрация: 4-September 07
Пользователь №: 11,932



Сделал копию своей модели в Фотошопе.
Все еще квадратнее, чем я думал, зато более наглядно. Зацените.

Изображение

нужно увеличить число двоек и единиц.
Скругляйте теперь. 1.gif

Хотя квадрат - самая плохая форма для больших высот. Там лучше прямоугольники (если эллипс никак). Они, перекрываясь, создают более сложные формы, которые бывают скруглены.

Цитата
безусловно можно, но следуя какому алгоритму? Т.е. откуда там взялась 4?

Я и пытаюсь понять, по какому алгоритму заполнять круги.
То ли радиально по лучам от центра. Но с увеличением номера круга увеличивается кол-во нужных лучей, там не соориентируешься.
То ли по часовой стрелке кругами. Тогда круги между собой не связаны.
То ли по строкам. Тогда нужно каждый раз проверять соответствие столбцов и! диагоналей.
Как?
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
ALexusB
сообщение Nov 14 2008, 22:12
Сообщение #22


Разработчик игры К:ВЛ
*******

Seaward TeamЖелезный Профессор
Группа: Admin
Сообщений: 15,038
Регистрация: 2-November 04
Пользователь №: 3



Сделал квадратами от 7 к 1
http://online.seaward.ru/files/MapEdit.swf

Получились теже пирамиды, но уже с правильными переходами при наложении. До того у мя было наоборот от 1 к 7

Но как мы видим, ранд - фигня sad.gif
Пирамиды и есть
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Tymofei
сообщение Nov 15 2008, 00:30
Сообщение #23


Приватир
*******

Заслуженный КорсарЗаслуженный ХудожникЗнаток Игр Сиварда
Создатель Модов к ГПК
Группа: форумчанин
Сообщений: 3,759
Регистрация: 20-November 07
Из: Москва
Пользователь №: 12,641



Пирамиды получаются, потому что весь расчет работает "от вершин и далее".

ИМХО:
1) нужно сгенерить в массиве произвольное число в известном интервале:
-группа I - мели (1);
-группа II - глубины (7).

2) как верно отметил уважаемый Serginio, между пиковыми значениями должны быть промежуточные, следовательно, нужно произвести проверку, чтобы расстояние между координатами ближайших точек в полученных группах превышало 6 единиц (1-2-3-4-5-6-7-6-5-4-3-2-1).
Неудовлетворяющие условию значения исключить, группы объединить в один массив.

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

Недостатки метода:
а) на поле всегда будут мели и глубины;
б) визуальное отображение глубин на линии между соседними пиковыми значениями всегда будет равномерным;
в) для расчета глубин вдоль границ активного "поля" потребуются неотображаемые мели и глубины.
Как вариант, можно повторять уже известные значения (мели - желтые точки, "нет дна" - синие):
Изображение , где центральная область - активное "поле", остальные повторения - для расчета глубин по границам.
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
ALexusB
сообщение Nov 15 2008, 02:01
Сообщение #24


Разработчик игры К:ВЛ
*******

Seaward TeamЖелезный Профессор
Группа: Admin
Сообщений: 15,038
Регистрация: 2-November 04
Пользователь №: 3



Цитата
Недостатки метода:а) на поле всегда будут мели и глубины;

Не годится sad.gif
нужны фарватеры - это же все для корабликов делается, а не ради самих мелей.
Нужна чистая вода обязательно. Потому и мели с понижением дна.
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
ALexusB
сообщение Nov 15 2008, 12:36
Сообщение #25


Разработчик игры К:ВЛ
*******

Seaward TeamЖелезный Профессор
Группа: Admin
Сообщений: 15,038
Регистрация: 2-November 04
Пользователь №: 3



Начал понимать подход с реперными точками - да, может получиться.

всего высот 8, от 0 до 7
0 - это торчащие камни в цвете воды как у 1, потому я и ставил тз из 1-7, тк 0 накидать по 1 не вопрос.

Вобще, подумав (про баланс). Понимаю, что плясать только от (1) не верно в корне
Должны быть "мели" и 7-6-7 и 7-6-5-6-7 без захода в 1 вообще
Это просто и красиво и функуонально для шхуна vs линкор
То есть 1 и 0 - это скорее редкость.
1 будет переходом от суши (это вообще -1 smile.gif), а так в чистом море видимо будет до (2) не мельче.
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
ALexusB
сообщение Nov 19 2008, 22:25
Сообщение #26


Разработчик игры К:ВЛ
*******

Seaward TeamЖелезный Профессор
Группа: Admin
Сообщений: 15,038
Регистрация: 2-November 04
Пользователь №: 3



Дело сдвинулось.
Метод с реперными точками и решеткой осознал, в ехеле ручками програн на нескольких сетках 7х7 и получил в итоге те же квадратики + неясность как роботом делать промежутки, что б не было 2-4 3-5 и 5-7 стыков. Как раз про принципу игры "сапер", как и говорилось

Но пока это все делал вывел для себя замену реперам "пирамидками наоборот". Все просто - пирамидки нужны малеькие, разной высоты и не 1-2, а сотни. Тогда на выходе имеем мель произвольной формы, но вписанной в прямоугольник.
Это пока не победил.

Так же, что реперы, что пирамидки дают равномерное покрытие (1) - в игре вода такая смотрится хорошо, только по балансу лажа - потому продолжаю поиск метода, который сгенерит мель амебообразной формы и рандомный расход глубины от нее.
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Serginio
сообщение Nov 20 2008, 13:03
Сообщение #27


инопланетянец
*******

Заслуженный КорсарСоздатель Модов к ГПК
Группа: форумчанин
Сообщений: 2,018
Регистрация: 7-August 07
Из: Днепропетровск
Пользователь №: 11,632



Цитата(ALexusB @ Nov 19 2008, 23:25) *

Дело сдвинулось.
Метод с реперными точками и решеткой осознал, в ехеле ручками програн на нескольких сетках 7х7 и получил в итоге те же квадратики + неясность как роботом делать промежутки, что б не было 2-4 3-5 и 5-7 стыков. Как раз про принципу игры "сапер", как и говорилось

Чтоб не было таких стыков, генерирование цифр должно происходить линейно (например от определённой оси влево и вправо, одновременно для всех рядов поля). От другой оси генерирование идёт навстречу. Принцип один - одинаковых цифр в ряду должно быть не меньше 2 и не более 10 (чтоб склоны не были очень крутыми или очень пологими). При стыковке полей (когда заполнены уже все ячейки) идёт корректировка (проверка) в обратном направлении и изменение цифр только в сторону понижения их значения (уже без ограничени количества одинаковых цифр в ряду). Пример:
33445!55444
22334!66555
33445!66655
44566!76655
В данном примере 2 ошибки, корректировка простая: ВУо второй строке при проверке от оси ! вправо, на значение 6 будет влиять значение 4, которая слева от оси. 6 под этим влиянием изменится на 5. Следующая 6, такдже на 5.
В четвёртой строке 6 изменится на 5 под влиянием верхней четвёрки...
Бред, конечно... Но для модели, которая будет состоять из одной кривой плоскости (как простынь, разостланная на траве), больше ничего в голову не лезет.
Цитата
Но пока это все делал вывел для себя замену реперам "пирамидками наоборот". Все просто - пирамидки нужны малеькие, разной высоты и не 1-2, а сотни. Тогда на выходе имеем мель произвольной формы, но вписанной в прямоугольник.
Это пока не победил.

Так же, что реперы, что пирамидки дают равномерное покрытие (1) - в игре вода такая смотрится хорошо, только по балансу лажа - потому продолжаю поиск метода, который сгенерит мель амебообразной формы и рандомный расход глубины от нее.

Хотел спросить. А как программа рассматривает, собственно "мель"? Как единую плоскость с координатами точек по трём осям? Или как набор плоскостей, каждая из которых имеет свой уровень (глубину)? Или там математикой (тригонометрией) и не пахнет, - а просто генерация объёмных объектов (пирамидок к примеру) в определённой последовательности (или по определённым принципам)?
Дело в том, что на Ваших примерах прямоугольных мелей явно просматривается "слоистая" их структура. Я подумал, и пока не вижу особых препятствий для того, чтоб генерировать овальные (пока в форме правильных эллипсов) слои с чётким алгоритмом. Т.е. мель будет выглядеть точно, как у Вас, только не из прямоугольников, а из эллипсов. Стыковку их можно придумать (при соблюдении некоторого условия, вообще проблем нет). Только для этого нужно, чтоб дно (плоскость со значением 7) программой рассматривалось, как плоскость координат.
Если это возможно, то готов завтра к вечеру математически описАть алгоритм построения.
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
ALexusB
сообщение Nov 20 2008, 13:27
Сообщение #28


Разработчик игры К:ВЛ
*******

Seaward TeamЖелезный Профессор
Группа: Admin
Сообщений: 15,038
Регистрация: 2-November 04
Пользователь №: 3



Все верно- плоскость и есть. матрица двумерная. Значение и есть глубина.

Так что идея с эллипсами годится - мне нужен понятный алгоритм рисования эллипса по клеткам. Ну и соотв другие идеи.

В игре проверяется реальная координата корабля (его части, тк он больше клетки матрицы) на пересечение с матрицей мели. Вот и все.

Если отойти от матрицы и рисовать фигуры в реальный координатах, я потом не пойму, где мель. Если только по пикселям не считывать цвет. Но в визуальном плане дно сильно заблёрено и накрыто анимацией волн, так что лучше матрицу.
Но рассмотреть можно и реальные коорд, если это действительно проще. А потом их как-то в матрицу перевести. Типа как переводят фотографии в полотно для вышивания крестиком (то есть матрицу)
на минимапе у меня 1х1 пиксель = клетки матрицы. Так что если рисовать на минимапе, а потом его по пикселям перевести в матрицу - то и будет результат!

Вощем, канает подход - слушаю!
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Serginio
сообщение Nov 20 2008, 13:41
Сообщение #29


инопланетянец
*******

Заслуженный КорсарСоздатель Модов к ГПК
Группа: форумчанин
Сообщений: 2,018
Регистрация: 7-August 07
Из: Днепропетровск
Пользователь №: 11,632



Цитата(ALexusB @ Nov 20 2008, 14:27) *

... Значение и есть глубина.

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

Для каждого значения (глубины) будет своя плоскость (вернее её часть в виде эллипса). Соответственно объекты лежащие в разных плоскостях имеют разный цвет (как у Вас на минимапе). Это не есть проблема.
Короче, занимаюсь...
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
os_
сообщение Dec 11 2008, 15:37
Сообщение #30


юнга
**


Группа: форумчанин
Сообщений: 32
Регистрация: 2-November 07
Из: г.Пушкино МО
Пользователь №: 12,434



2 варианта генерации поверхности дна.


Прикрепленные файлы
Прикрепленный файл  dno.rar ( 5.85 килобайт ) Кол-во скачиваний: 178
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
ALexusB
сообщение Dec 11 2008, 17:16
Сообщение #31


Разработчик игры К:ВЛ
*******

Seaward TeamЖелезный Профессор
Группа: Admin
Сообщений: 15,038
Регистрация: 2-November 04
Пользователь №: 3



Наглядно, спасибо.

А если от середины плясать а не от угла по диагонали?
Как быть - перевернуть алгоритм в др сторону?
И как задать рандомную площадку кляксевидной формы, от которой плясать?
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Serginio
сообщение Dec 11 2008, 18:03
Сообщение #32


инопланетянец
*******

Заслуженный КорсарСоздатель Модов к ГПК
Группа: форумчанин
Сообщений: 2,018
Регистрация: 7-August 07
Из: Днепропетровск
Пользователь №: 11,632



Цитата(os_ @ Dec 11 2008, 16:37) *

2 варианта генерации поверхности дна.

Конкретная работа. Но это Exel.
Если получится что-то подобное в PHP, то можно будет пробовать развивать. Здесь инструментарий ограничен, программа не хочет хавать всё, что мы от неё требуем.
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
os_
сообщение Dec 11 2008, 19:55
Сообщение #33


юнга
**


Группа: форумчанин
Сообщений: 32
Регистрация: 2-November 07
Из: г.Пушкино МО
Пользователь №: 12,434



Можно и от середины плясать. Но для меня не совсем ясна задача, точнее её конечные визуальные условия. И просветите, что такое PHP?
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
ALexusB
сообщение Dec 11 2008, 20:15
Сообщение #34


Разработчик игры К:ВЛ
*******

Seaward TeamЖелезный Профессор
Группа: Admin
Сообщений: 15,038
Регистрация: 2-November 04
Пользователь №: 3



PHP - это http://ru.wikipedia.org/wiki/Php язык программирования для ВЕБ.
Например, скрипты этого форума - РНР и есть (см в строку адреса, на разрешение в конце)

Мель должна генерится в РНР, а отрисовываться во флаш.
Отрисовку по матрице уже сделал, с ней проблем нет вообще. Нужно матрицк нагенерить - пример где-то выше показывал.
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
os_
сообщение Dec 15 2008, 14:48
Сообщение #35


юнга
**


Группа: форумчанин
Сообщений: 32
Регистрация: 2-November 07
Из: г.Пушкино МО
Пользователь №: 12,434



ИМХО оптимальный вариант:
Создать несколько базовых форм различной конфигурации «амеб», «ромашек». Каждую из фигур выводить на экран, по принципу "детской пирамидки", разным цветом и разным размером (масштабировать), в зависимости от глубины – чем глубже, тем крупнее и темнее. Тогда отпадает необходимость сложного механизма генерации самой формы. Остается случайным образом определить координаты каждой формы и построить на этом месте "пирамидку".


Прикрепленные изображения
Прикрепленное изображение
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
m-traxx
сообщение Dec 15 2008, 16:35
Сообщение #36


Бермудский Бомбардир
Group Icon

Знаток Игр СивардаЗаслуженный ИгроманТурнир КВЛ 1.2.3 НЕ 3 место
Турнир Гроза Морей 3 местоЗаслуженный Корсар

Группа: финалист турнира КВЛ 1.2.3 НЕ
Сообщений: 4,036
Регистрация: 24-January 08
Из: Бермуды
Пользователь №: 14,825



Цитата(os_ @ Dec 15 2008, 14:48) *

ИМХО оптимальный вариант:

Надо ещё учесть, что основное количество мелей, это не холмики и рифы.
Чаще всего это песчаные мели, косы.
Они очень узкие и длинные.
Морская прибрежная зона не бывает усеяна "холмиками".
Не без этого конечно... но преобладать они не должны.
Приливы-отливы создают длинные песчаные образования.
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Scatimon
сообщение Dec 16 2008, 09:27
Сообщение #37


...Welcome To Scatlend...
******

Ветеран Форума
Группа: форумчанин
Сообщений: 707
Регистрация: 14-April 05
Из: Москва
Пользователь №: 662



Цитата(os_ @ Dec 15 2008, 14:48) *

ИМХО оптимальный вариант:

Ну и будут опять одни пирамиды, тока вот такой формы. blink.gif Смысл в том чтобы не повторялось дно.
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
os_
сообщение Dec 16 2008, 15:29
Сообщение #38


юнга
**


Группа: форумчанин
Сообщений: 32
Регистрация: 2-November 07
Из: г.Пушкино МО
Пользователь №: 12,434



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

На 3D-акселераторах применяется такая техника: объект рисуется в виде плоскости с наложенной на неё текстурой с прозрачными областями...
http://ru.wikipedia.org/wiki/%D0%A1%D0%BF%...B8%D0%BA%D0%B0)


Если сделать набор разнообразных «профилей», да ещё с прозрачными областями, тогда и картинка будет реально смотреться.
Примерно так будет выглядеть через слой воды:


Прикрепленные изображения
Прикрепленное изображение
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Serginio
сообщение Dec 16 2008, 17:57
Сообщение #39


инопланетянец
*******

Заслуженный КорсарСоздатель Модов к ГПК
Группа: форумчанин
Сообщений: 2,018
Регистрация: 7-August 07
Из: Днепропетровск
Пользователь №: 11,632



Цитата(os_ @ Dec 16 2008, 16:29) *

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

На 3D-акселераторах применяется такая техника: объект рисуется в виде плоскости с наложенной на неё текстурой с прозрачными областями...

Нужен не рисунок, а объект имеющий высоту, на которую бы реагировали модельки шипов.
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
ALexusB
сообщение Dec 21 2008, 16:42
Сообщение #40


Разработчик игры К:ВЛ
*******

Seaward TeamЖелезный Профессор
Группа: Admin
Сообщений: 15,038
Регистрация: 2-November 04
Пользователь №: 3



Оно (дно) и сейчас в моей двиге не плохо смотрится (там же еще слой волн). Другое дело -нужна матрица самих высот. Что б понимать стукается корабль или нет. А отрисовка этой матрицы - уже сделано.
Похоже на приведенный выше рисунок, кстати smile.gif
User is offlineProfile CardPM
Go to the top of the page
+Quote Post

3 страниц V < 1 2 3 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 15th November 2019 - 16:35
Яндекс цитирования Rambler's Top100
Rambler's Top100