2011-05-13 6 views
8

В настоящее время я работаю над проектом, где 2d карты ландшафта сохраняются в одномерном массиве. Каждый блок на карте индексируется координатами xy. Итак, чтобы сохранить карту в одномерный массив, я использовал метод порядка строк (http://en.wikipedia.org/wiki/Row-major_order), чтобы преобразовать координаты xy в одно значение индекса (что позволило мне поместить блок в массив).Строчные индексы заказов

Теперь, моя проблема заключается в том, как мне его переконвертировать? У меня есть уникальный номер, который я должен преобразовать обратно в координаты xy. Любая помощь будет оценена по достоинству. ^^

ответ

9

Для расчета индексов вы должны использовать что-то вроде этого:

index = X + Y * Width; 

Таким образом, чтобы изменить это вы можете воспользоваться целым разделением усечения, чтобы получить Y, а затем X является только то, что осталось после того, как что Y "израсходовано":

Y = (int)(index/Width) 
X = index - (Y * Width) 
+0

Это не работает. Например, (0, 4) дает 20, а при обратном, 20 возвращает (16, 4) – BizarreCake

+0

У него есть правильная идея, я думаю, он просто сделал опечатку. X = индекс - (y * ширина); Итак, X - это то, что осталось после удаления строк, использованных Y. – TurqMage

+0

Ой, это то, что приходит ответить на вопросы, когда вы только что встали с постели! Спасибо, что исправил меня. – Martin