|
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
|
Разработчик
Регистрация: 09.08.2006
Адрес: Украина
Сообщений: 431
Написано 65 полезных сообщений (для 53 пользователей)
|
Ответ: Области в 2д массиве.
Извиняюсь за оффтоп, скажу сразу- ответа незнаю, но что ти там уже такое примудрённое задумал? Может ти сможеш расказать зачем тебе такой алгоритм? Возможно есть какойто другой способ решения етой проблемы?
ЗЫ. Кажись темку надо было в раздел алгоритмы отправить.
|
(Offline)
|
|
10.07.2009, 06:34
|
#3
|
Модератор
Регистрация: 11.07.2007
Сообщений: 2,910
Написано 686 полезных сообщений (для 1,694 пользователей)
|
Ответ: Области в 2д массиве.
Э, глупо звучит - есть пол - там где еденички - и надо склеить для экономии полигонов о_О )
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
10.07.2009, 21:47
|
#4
|
Разработчик
Регистрация: 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
|
.
Регистрация: 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)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Похожие темы
|
Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
Массив в массиве |
rr333 |
2D-программирование |
8 |
28.05.2009 18:19 |
В области квадрата |
Render |
Математика |
8 |
10.01.2007 01:04 |
Часовой пояс GMT +4, время: 20:01.
|