![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
ALexusB |
![]()
Сообщение
#1
|
Разработчик ВМЛ-КВЛ ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Admin Сообщений: 16,554 Регистрация: 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 Решение ??? Какие есть идеи? Понятно, что вариант наколбасить все ручками рабочий - редактор такой сделать не вопрос, он у мя уже почти готов. Но хочется, чтоб само делало, каждый раз разное |
![]() ![]() |
Tymofei |
![]()
Сообщение
#2
|
Приватир ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: форумчанин Сообщений: 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 как среднее арифметическое между наличными значениями, с округлением в сторону ближайшего целого, для каждой оси (где а - имя соответствующей оси координат). Действие повторить необходимое число раз для расчета всех значений ячеек массива. Недостатки метода: а) на поле всегда будут мели и глубины; б) визуальное отображение глубин на линии между соседними пиковыми значениями всегда будет равномерным; в) для расчета глубин вдоль границ активного "поля" потребуются неотображаемые мели и глубины. Как вариант, можно повторять уже известные значения (мели - желтые точки, "нет дна" - синие): ![]() |
![]() ![]() |
Текстовая версия | Сейчас: 30th April 2025 - 02:01 |