forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Алгоритмика (http://forum.boolean.name/forumdisplay.php?f=21)
-   -   Интересный вопрос ! (http://forum.boolean.name/showthread.php?t=996)

KRIK 12.06.2006 19:45

Интересный вопрос !
 
Я знаю что есть массивы одномерные ( или линейные ) или двумерные. А вот говорят что есть трёхмерные массивы. Какие это массивы - я чёт не пойму ??? И вообще где их можно применять и на каких языках создавать ( если такие можно создавать ) ???

pax 12.06.2006 20:21

Их можно применять почти на всех языках

Вот пример на блитце:
Код:

Dim Matr%(n1,n2,n3)
Это трехмерный массив, т.е. имеет три "измерения" :)

Вообще можно хоть десятимерные делать...

SBJoker 13.06.2006 00:19

в VB6 вроде максимум это 64х-мерные массивы... :)

SubZer0 13.06.2006 01:02

впринципе ЛЮБУЮ систему (в том числе и многоуровневую) можно описать двумерным массивом, и я советую это делать поскольку обращение к даже элементу трехмерного массива ведет за собой кучу умножений, что жутко тормозит гаму...

ну а заюзать трехмерный массив можно например в проекте типа игры X-Tension. есть космические базы: одно измерение это набор свойств базы, типа там количество жизней, денег и т.п., второе измерение сами базы, третье измерение это сектора космического пространства в которых эти базы находятся...

:)

impersonalis 13.06.2006 01:06

впринципе ЛЮБУЮ систему модно одномерным описать, только враппер работы с этим удовьствием будет работать ещё медленне умножений. А скорость умножений, кстати, не окажет уж очень сильного искажения ФПС. В общем как с ГОТО - толку мало, но некторые юзают. ИМХО.

SubZer0 13.06.2006 02:43

Цитата:

Сообщение от impersonalis
впринципе ЛЮБУЮ систему модно одномерным описать, только враппер работы с этим удовьствием будет работать ещё медленне умножений. А скорость умножений, кстати, не окажет уж очень сильного искажения ФПС. В общем как с ГОТО - толку мало, но некторые юзают. ИМХО.

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

конечно если при любом вычислении юзать постоянно функцию поиска то ессно метод мастдай.

Многоуровневая статичная система: для каждого элемента оставляем поле для НОМЕРА элемента родителя в массиве.

Многоуровневая динамичная система: в случае фрагментации элементы НЕ двигать + делать поле для номера родителя.

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

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

конечно это не добавит 20 или 30 ФПС, но когда борятся за каждый ФПС, то это поможет сэкономить пару...

:)

jimon 13.06.2006 17:50

дайте пример логического расложение n-мерного масива в одномерный
чтобы dim(a1,a2,a3,...,aN) превратить в dim(a1*a2*a3*...*aN)
желательно формулой :)

ps. N-мерные масивы неиспользуются в играх
используются только готовые классы одномерных и двухмерных масивов
гарантированая n-мерность никому никогда не надо :)

impersonalis 13.06.2006 18:35

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

tormoz 14.06.2006 01:15

Динамические массивы рулят. (то бишь типы или списки)

SubZer0 14.06.2006 01:42

хмм... тема оспорима ;)

чесно сказать никогда не мог понять как может рулить массив в котором постоянно работают системы сдвига и перераспределения памяти. дайте хоть ссылу чтоб почитать в чем можно выиграть при такой системе скорость. :)

tormoz 14.06.2006 04:32

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

Есть конечно случаи, когда он очень удобен, но в играх, как правило, таких случаев немного.
Например клеточное поле с постоянной размерностью, набор заранее известного числа элементов.

Но как только тебе нужно удалять\добавлять элементы в этот массив и сдвигать - тут начинается гемморой. И быстрей чем в списке, ты свой сдвиг не сделаешь (проверял на блитц и пурике)

Diplomat 14.06.2006 14:03

Массивы, 1- , 2- и трехмерные, лично я использую очень широко. Ибо быстро и просто. Как правило значительная часть данных, которые нужно хранить в игре или вообще не изменяется в реалтайме, или не меняет своей "общеколичественной" составляющей, т.е. вполне может быть реализована массивом.
Так, для примера, в массивах удобнее хранить показатели персонажей, параметры оружия, раскладку клавиатуры, карты (путей, освещения и т.п.) с регулярной сеткой, да мало ли еще что. И это логично: в процессе игры количество функциональных клавиш, "видов орков", или размеры матрицы проходимости не изменятся. То же относится и к многим схемам синглесрфейсных партиклов/декалей: удалить нужный квад из серфейса нельзя, бесконечно добавлять бессмыссленно, а значит мы изначально оперируем заведомо неизменным количеством обьектов и массив решает... пение диферамбов можно продолжать.
Кроме того, при подгрузке нового уровня/кластера массивы можно без труда "переобьявить" под новые условия.
Кстати, прирост скорости не такой уж и мизерный: несколько ФПС, когда их всего-то едва ли 40 с натягом- это немало. И код становится намного проще и, главное, короче. А значит- удобней и читаемей.
...
При этом, я ни в коем случае не призываю отречься от списков: просто следует испольовать все доступные инструменты, и исходить из всего спектра их возможностей.

С уважением. :)

KRIK 14.06.2006 20:49

ОГО! Неожидал что только ответов будет на этот вопрос! Вообщем БОЛЬШОЕ всем спасибо. Прям простветили в массивы с головой :)

jimon 14.06.2006 23:23

[тема не раскрыта] :)
на мой вопрос так и неответели - как разложить
масив dim(a1,a2,a3,...,aN) в одномерный dim(a1*a2*a3*...*aN) ?
формулой плиз... или идеей :)

impersonalis 15.06.2006 01:20

Вложений: 2
для 2мерного(далее по аналогии):
кстати -тема поднималась - как по отдельности так и целиком


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

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot