2015-12-07 2 views
0

Это странный вопрос, но он представляет интересную задачу; Я смотрел на старую концепцию HTML-матрицы с миллионным долларом (1000 х 1000) и больше интересовался концепцией более крупного куба (как кубик кубика Рубика, но без осей) и пытался выяснить, как это сделать это в SQL, так что они упорядочены из центра.Создание координат для 3-мерного куба в 1 блоке блоков

Центральный блок будет 0,0,0, а затем необходимо запрограммировать координаты окружающих его блоков (-1,0,0; -1, -1,0 и так далее и и т. д.), расширяя по существу один уровень/слой на слое, так что переход от первого основного блока ко второму окружающему ему кубу состоит из 26 блоков и их координат, но я думаю, что я могу генерировать 27, а затем исключать уже в таблице репозитория.

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

Любые предложения были бы замечательными, и я думаю, что сейчас я собираюсь испортить концепцию создания вложенных кубов, что не является самым изящным решением.

+0

Я решил это в одну сторону, но хотел бы пересмотреть его, чтобы сделать это в лучшем порядке – user2105186

ответ

0

объявить @start INT = 0, @low Int

объявить @coord таблицы (COORD INT IDENTITY (1,1), х, у Int Int, Int) г объявлять @ coord2 таблицу (х Int, у INT, г целое) объявить таблицу @dimensions (поз INT)

< в то время как @start = 3 начинают выбора @low = @start * -1

delete from @coord2 
delete from @dimensions 

while @low <= @start 
begin 
    insert into @dimensions select @low 
    select @low = @low + 1 
end 

insert into @coord (x,y,z) 
select * from (select d.pos as x, e.pos as y, f.pos as z from @dimensions d cross join @dimensions e cross join @dimensions f) as a 
where not exists (select * from @coord c WHERE a.x = c.x and a.y = c.y and a.z = c.z) 

select @start = @start + 1 

конец

выбрать * from @coord