|
Алгоритмика Об алгоритмах вообще; методы, обсуждения способов решения |
12.06.2006, 19:45
|
#1
|
Бывалый
Регистрация: 19.09.2005
Сообщений: 649
Написано 3 полезных сообщений (для 3 пользователей)
|
Интересный вопрос !
Я знаю что есть массивы одномерные ( или линейные ) или двумерные. А вот говорят что есть трёхмерные массивы. Какие это массивы - я чёт не пойму ??? И вообще где их можно применять и на каких языках создавать ( если такие можно создавать ) ???
|
(Offline)
|
|
12.06.2006, 20:21
|
#2
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Их можно применять почти на всех языках
Вот пример на блитце:
Это трехмерный массив, т.е. имеет три "измерения"
Вообще можно хоть десятимерные делать...
|
(Offline)
|
|
13.06.2006, 00:19
|
#3
|
Злобный Админ
Регистрация: 04.09.2005
Сообщений: 5,926
Написано 3,415 полезных сообщений (для 9,330 пользователей)
|
в VB6 вроде максимум это 64х-мерные массивы...
__________________
|
(Offline)
|
|
13.06.2006, 01:02
|
#4
|
Администратор
Регистрация: 03.09.2005
Сообщений: 2,408
Написано 301 полезных сообщений (для 996 пользователей)
|
впринципе ЛЮБУЮ систему (в том числе и многоуровневую) можно описать двумерным массивом, и я советую это делать поскольку обращение к даже элементу трехмерного массива ведет за собой кучу умножений, что жутко тормозит гаму...
ну а заюзать трехмерный массив можно например в проекте типа игры X-Tension. есть космические базы: одно измерение это набор свойств базы, типа там количество жизней, денег и т.п., второе измерение сами базы, третье измерение это сектора космического пространства в которых эти базы находятся...
__________________
Как минимум я помог многим (с)
|
(Offline)
|
|
13.06.2006, 01:06
|
#5
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
впринципе ЛЮБУЮ систему модно одномерным описать, только враппер работы с этим удовьствием будет работать ещё медленне умножений. А скорость умножений, кстати, не окажет уж очень сильного искажения ФПС. В общем как с ГОТО - толку мало, но некторые юзают. ИМХО.
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
13.06.2006, 02:43
|
#6
|
Администратор
Регистрация: 03.09.2005
Сообщений: 2,408
Написано 301 полезных сообщений (для 996 пользователей)
|
Сообщение от impersonalis
впринципе ЛЮБУЮ систему модно одномерным описать, только враппер работы с этим удовьствием будет работать ещё медленне умножений. А скорость умножений, кстати, не окажет уж очень сильного искажения ФПС. В общем как с ГОТО - толку мало, но некторые юзают. ИМХО.
|
я так и думал, что у нас получится спор... попробую выспорить свою точку зрения, хотя о стилях проганья как и о вкусах не спорят.
конечно если при любом вычислении юзать постоянно функцию поиска то ессно метод мастдай.
Многоуровневая статичная система: для каждого элемента оставляем поле для НОМЕРА элемента родителя в массиве.
Многоуровневая динамичная система: в случае фрагментации элементы НЕ двигать + делать поле для номера родителя.
Многоуровневая динамичная система с неограниченным количеством "детей":
1. сделать количество свободных элементов для максимально возможного количества детей.
2. заюзать дополнительный двумерный массив а в первом писать номер индекса второго массива где искать номера детей.
конечно все можно и через одномерный массив юзать, но давайте не будем кривить логикой типа если не черное значит белое... юзать одномерный массив нерентабельно, нагрузочно (всякими системами переадресации и возможно поиском)... трехмерные и выше слишком накладно при вычислениях адреса элемента, хоть на сегодняшний день команда LEA выполняется за один такт и при этом в любом конвейере, но не думаю что компилятор заюзает ее при вычислении адреса трехмерного массива... опять-же зависит от задачи, если не часто обращаешься к элементам, то флаговая промышленность страны не обделит, юзайте массивы, а если хранить координаты и свойства точек трехмерной модели (а вдруг и четырехмерной) и делать всякие трансформации, повороты навороченные смещения текстур и др. то лучше заюзать двумерные...
конечно это не добавит 20 или 30 ФПС, но когда борятся за каждый ФПС, то это поможет сэкономить пару...
__________________
Как минимум я помог многим (с)
|
(Offline)
|
|
13.06.2006, 17:50
|
#7
|
|
дайте пример логического расложение n-мерного масива в одномерный
чтобы dim(a1,a2,a3,...,aN) превратить в dim(a1*a2*a3*...*aN)
желательно формулой
ps. N-мерные масивы неиспользуются в играх
используются только готовые классы одномерных и двухмерных масивов
гарантированая n-мерность никому никогда не надо
|
|
|
13.06.2006, 18:35
|
#8
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Саб, кажется я понял,что ты имеешь в виду.
Только для такой ситемы гораздо удобней и лучше юзать списки (различных типов - зависит от задачи)
|
(Offline)
|
|
14.06.2006, 01:15
|
#9
|
Гигант индустрии
Регистрация: 14.12.2005
Сообщений: 2,785
Написано 1,183 полезных сообщений (для 4,437 пользователей)
|
Динамические массивы рулят. (то бишь типы или списки)
__________________
|
(Offline)
|
|
14.06.2006, 01:42
|
#10
|
Администратор
Регистрация: 03.09.2005
Сообщений: 2,408
Написано 301 полезных сообщений (для 996 пользователей)
|
хмм... тема оспорима
чесно сказать никогда не мог понять как может рулить массив в котором постоянно работают системы сдвига и перераспределения памяти. дайте хоть ссылу чтоб почитать в чем можно выиграть при такой системе скорость.
__________________
Как минимум я помог многим (с)
|
(Offline)
|
|
14.06.2006, 04:32
|
#11
|
Гигант индустрии
Регистрация: 14.12.2005
Сообщений: 2,785
Написано 1,183 полезных сообщений (для 4,437 пользователей)
|
В подавляющем большинстве случаев, выигрыш обычного массива в скорости (оч мизерный) сводится на нет геморроем работы с ним.
Есть конечно случаи, когда он очень удобен, но в играх, как правило, таких случаев немного.
Например клеточное поле с постоянной размерностью, набор заранее известного числа элементов.
Но как только тебе нужно удалять\добавлять элементы в этот массив и сдвигать - тут начинается гемморой. И быстрей чем в списке, ты свой сдвиг не сделаешь (проверял на блитц и пурике)
__________________
|
(Offline)
|
|
14.06.2006, 14:03
|
#12
|
Дэвелопер
Регистрация: 07.09.2005
Сообщений: 1,519
Написано 66 полезных сообщений (для 164 пользователей)
|
Массивы, 1- , 2- и трехмерные, лично я использую очень широко. Ибо быстро и просто. Как правило значительная часть данных, которые нужно хранить в игре или вообще не изменяется в реалтайме, или не меняет своей "общеколичественной" составляющей, т.е. вполне может быть реализована массивом.
Так, для примера, в массивах удобнее хранить показатели персонажей, параметры оружия, раскладку клавиатуры, карты (путей, освещения и т.п.) с регулярной сеткой, да мало ли еще что. И это логично: в процессе игры количество функциональных клавиш, "видов орков", или размеры матрицы проходимости не изменятся. То же относится и к многим схемам синглесрфейсных партиклов/декалей: удалить нужный квад из серфейса нельзя, бесконечно добавлять бессмыссленно, а значит мы изначально оперируем заведомо неизменным количеством обьектов и массив решает... пение диферамбов можно продолжать.
Кроме того, при подгрузке нового уровня/кластера массивы можно без труда "переобьявить" под новые условия.
Кстати, прирост скорости не такой уж и мизерный: несколько ФПС, когда их всего-то едва ли 40 с натягом- это немало. И код становится намного проще и, главное, короче. А значит- удобней и читаемей.
...
При этом, я ни в коем случае не призываю отречься от списков: просто следует испольовать все доступные инструменты, и исходить из всего спектра их возможностей.
С уважением.
|
(Offline)
|
|
14.06.2006, 20:49
|
#13
|
Бывалый
Регистрация: 19.09.2005
Сообщений: 649
Написано 3 полезных сообщений (для 3 пользователей)
|
ОГО! Неожидал что только ответов будет на этот вопрос! Вообщем БОЛЬШОЕ всем спасибо. Прям простветили в массивы с головой
|
(Offline)
|
|
14.06.2006, 23:23
|
#14
|
|
[тема не раскрыта]
на мой вопрос так и неответели - как разложить
масив dim(a1,a2,a3,...,aN) в одномерный dim(a1*a2*a3*...*aN) ?
формулой плиз... или идеей
|
|
|
15.06.2006, 01:20
|
#15
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
для 2мерного(далее по аналогии):
кстати -тема поднималась - как по отдельности так и целиком
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 09:21.
|