2012-06-25 3 views
1

В основном я пытаюсь выяснить формулу, которая вычисляет уникальный идентификационный номер для точки в двумерном пространстве. Условия: , если f (x, y) = c, тогда нет других X1, Y1, так что f (X1, Y1) = c и x и y являются целыми числами, а c также должно быть целым числом (double может не быть подходит, поскольку его точность сомнительна, и я не уверен, подходит ли она для использования в качестве ключа в хэш-таблице).Нужна формула для вычисления идентификатора к точке в 2d-пространстве

+1

Это может быть что угодно: от простого до невозможного. Являются ли x и y целыми и имеют определенный диапазон? –

+0

Лучше подходит для [math.stackexchange.com] (http://math.stackexchange.com) –

+0

, если у вас есть верхний предел и нижние пределы для x, y, тогда я бы попробовал что-то вроде этого, например 0

ответ

1

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

Возьмите лист бумаги, лучше сделайте его большим и нарисуйте на нем сетку квадратов. Обозначьте столбцы числами от min до max, поэтому для целых чисел, которые будут от 1 до, ну, большого числа. Обозначьте строки таким же образом. Я полагаю, что вы начали маркировать строки и столбцы в 1, то верхняя левая ячейка этой сетки будет равна (1,1).

В ячейке на (1,1) записать число 1. В ячейке (2,1) записать 2, в (1,2) записать 3, в (1,3) записать 4, в (2, 2) напишите 5, ....

Теперь у вас есть обратимое отображение из двумерного целого «пространства» в 1D целое пространство.

С уважением, Cantor за помощь в этом вопросе.

+0

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

+0

Декодирование немного сложнее, учитывая, что вам нужно рассчитать, на какую диагональ вы находитесь, возможно, идентифицировав треугольник с номером 'T' следующего наименьшего значения на вход, а затем решая« n (n + 1)/2 = T'. – wberry