Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > BlitzMax

Ответ
 
Опции темы
Старый 10.07.2009, 04:40   #1
Данил
Модератор
 
Аватар для Данил
 
Регистрация: 11.07.2007
Сообщений: 2,910
Написано 686 полезных сообщений
(для 1,694 пользователей)
Области в 2д массиве.

В общем, задача:
Я имею 2мерный массив.
Массив - это карта.
т.е.:


0 0 0 0 0 0 0 0 0 0
0 1 1 1 1 0 0 0 0 0
0 1 1 1 1 0 0 0 0 0
0 0 0 0 1 0 0 0 0 0
0 0 0 0 1 0 0 0 0 0
0 0 0 0 1 0 0 0 0 0
0 0 0 0 1 1 1 1 0 0
0 0 0 0 1 1 1 1 0 0
0 0 0 0 1 0 0 0 0 0
Мне нужно сделать так, чтобы этот массив с помощью определенного алгоритма разбился на области, т.е:

0 0 0 0 0 0 0 0 0 0
0 1 1 1 1 0 0 0 0 0
0 1 1 1 1 0 0 0 0 0
0 0 0 0 2 0 0 0 0 0
0 0 0 0 2 0 0 0 0 0
0 0 0 0 2 0 0 0 0 0
0 0 0 0 4 4 4 4 0 0
0 0 0 0 4 4 4 4 0 0
0 0 0 0 3 0 0 0 0 0
Т.е. как бы где большое скопление - это одна область, где другое скопление - другая, ну и оставшееся тоже на области.

Условие: надо исключить создание областей типа:

0 0 0 0 0
2 2 2 2 0
2 2 2 2 2
2 2 2 2 0
Ну, короче говоря, разбить на чисто прямоугольные области.

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

Есть идея , чтобы перем число 1 и смотрим рядом стоящие 1 - и если еще с рядом стоящей есть тоже числа 1 - то берем в область. Но как-то муторно это кажется.

Можно - смотрим. если есть 1 - то просмтариваем правее (левее) все 1, затем вниз идем(вверх) по ВСЕм этим 1 - то получается прямоугольник - то это область.
Но ведь это же куча if и forов будет?

Есть еще какие идеи?
(Offline)
 
Ответить с цитированием
Старый 10.07.2009, 05:50   #2
Halk-DS
Разработчик
 
Аватар для Halk-DS
 
Регистрация: 09.08.2006
Адрес: Украина
Сообщений: 431
Написано 65 полезных сообщений
(для 53 пользователей)
Ответ: Области в 2д массиве.

Извиняюсь за оффтоп, скажу сразу- ответа незнаю, но что ти там уже такое примудрённое задумал? Может ти сможеш расказать зачем тебе такой алгоритм? Возможно есть какойто другой способ решения етой проблемы?
ЗЫ. Кажись темку надо было в раздел алгоритмы отправить.
(Offline)
 
Ответить с цитированием
Старый 10.07.2009, 06:34   #3
Данил
Модератор
 
Аватар для Данил
 
Регистрация: 11.07.2007
Сообщений: 2,910
Написано 686 полезных сообщений
(для 1,694 пользователей)
Ответ: Области в 2д массиве.

Э, глупо звучит - есть пол - там где еденички - и надо склеить для экономии полигонов о_О )
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
impersonalis (10.07.2009)
Старый 10.07.2009, 21:47   #4
Halk-DS
Разработчик
 
Аватар для Halk-DS
 
Регистрация: 09.08.2006
Адрес: Украина
Сообщений: 431
Написано 65 полезных сообщений
(для 53 пользователей)
Ответ: Области в 2д массиве.

Наоборот звучит многообещяюще. Например ты меня сам натолкнул на одну мысль с генератором случайных уровней. (може кто играл в MineBombers )
(Offline)
 
Ответить с цитированием
Старый 12.07.2009, 16:45   #5
Данил
Модератор
 
Аватар для Данил
 
Регистрация: 11.07.2007
Сообщений: 2,910
Написано 686 полезных сообщений
(для 1,694 пользователей)
Ответ: Области в 2д массиве.

Так, экономить полигонвы - тыщей меньше, тыщей больше - не имеет значения.

А вот создание физического пола - очень даже поможет, ибо сколько зон - столько полигонов *2 .

или же там пол есть, 60х60 размиером ,а полигонов около 120, допустим, - как-то не охото такой пол вставлять в физ-модель, так как таких полов 100х100...

КТо-нибудь знает данный алгоритм разбивки на прямоугольники? или же только кучей ifов?
(Offline)
 
Ответить с цитированием
Старый 14.07.2009, 01:38   #6
Данил
Модератор
 
Аватар для Данил
 
Регистрация: 11.07.2007
Сообщений: 2,910
Написано 686 полезных сообщений
(для 1,694 пользователей)
Ответ: Области в 2д массиве.

спасибо всем за внимание)
тупо возможно, но работает.

Global Dim:Int[11,11]
Global cx:Int
Global cy:Int

Global i:Int
Global j:Int
Global i1:Int
Global j1:Int

Global m:Int=2

Global x1,y1,x2,y2

For i = 3 To 5
For j = 3 To 5
Dim[i,j] = 1
Next
Next

For i = 8 To 9
For j = 6 To 9
Dim[i,j] = 1
Next
Next

For i = 1 To 9
Dim[i,0] = 1
Next
dim[3,1] = 1



For i = 0 To 9
For j = 0 To 9

If dim[i,j] = 1 Then
'ЗАФТКСИРОВАЛИ
cx=i
cy=j
x1=cx
While dim[cx,cy]=1
cx:+1

If dim[cx,cy]<>1 Then x2=cx-1
Wend
cx=i
y1=cy
While dim[cx,cy]=1
cy:+1
If dim[cx,cy]<>1 Then y2=cy-1
Wend


For i1 = x1 To x2
For j1 = y1 To y2
dim[i1,j1]=m
Next
Next
m=m+1
End If

Next
Next















For i = 0 To 9
For j = 0 To 9
s:String = s + " " + dim[j,i]
Next
DebugLog s
s=""
Next
(Offline)
 
Ответить с цитированием
Старый 17.07.2009, 15:33   #7
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: Области в 2д массиве.

Я бы перебирал все возможные варрианты, тупо варируя от определённого пикселя, каждые варрианты записывая естественно в класс.
Затем вконце переберая все варрианты, находить что-то среднее между: величина сектора и колличество секторов. Исключая пересечения секторов конечно.

А ты уверен что такое автоматическим редактором выйдет лучше чем вручную? Или у тебя объёмы большие?
(Offline)
 
Ответить с цитированием
Старый 17.07.2009, 19:32   #8
Данил
Модератор
 
Аватар для Данил
 
Регистрация: 11.07.2007
Сообщений: 2,910
Написано 686 полезных сообщений
(для 1,694 пользователей)
Ответ: Области в 2д массиве.

В принципе, редактором тоже можно сделать, чтобы распределение на области - 10-50 таких областей будет.
затем и этой области созадем тупо плоский меш - и на физикс посылаем - вот и пол.
а визуалньо там будет совершенно другое, более сложное по графике.
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Массив в массиве rr333 2D-программирование 8 28.05.2009 18:19
В области квадрата Render Математика 8 10.01.2007 01:04


Часовой пояс GMT +4, время: 20:51.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com