Отразить координаты, как если бы они были сеткой - PullRequest
0 голосов
/ 03 марта 2019

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

objects = [1, 2, 3, 4, 5]
grid_placement = [(0,0), (32, 0), (64, 0), (0, -32), (0, -64)]

Я хочу получить координаты перевернутой оси, где они находятся

Таким образом, идеальный перевернутый Y-вывод будет по существу:

placement = [(0, -64), (32, -64), (64, -64), (0, -32), (0, 0)]

А идеальный перевернутый X-вывод будет:

placement = [(64, 0), (32, -64), (0,0), (64, -32), (64, -64)]

Таким образом, по существу, если что-то находится в верхнем правом углу, этов левом верхнем углу после переключения на X. Их позиции индекса в списке останутся такими же, но с измененными координатами.

Код, который я собрал, прекрасно работает для оси Y, но я не могу получитьось X работает.Мой мозг немного перегорел от того, чтобы возиться с этим в течение нескольких часов, любой внешний совет был бы высоко оценен.

Вот мой код (грязный)

    gridSize = 32
    if axis == "x":
        columns = defaultdict(dict)

        for gridOffset in self.offsetList:
            row = gridOffset[1] // gridSize
            col = gridOffset[0] // gridSize
            columns[col][gridOffset] = row

        new_order = []
        order = list(reversed(list(columns.keys())))
        for col in order:
            for offset in self.offsetList:
                if offset in columns[col]:
                    new_order.append((col * gridSize, columns[col][offset] * gridSize))

    elif axis == "y":
        rows = defaultdict(dict)

        for gridOffset in self.offsetList:
            row = gridOffset[1] // gridSize
            col = gridOffset[0] // gridSize
            rows[row][gridOffset] = col

        new_order = []
        order = list(reversed(list(rows.keys())))
        for offset in self.offsetList:
            for row in order:
                if offset in rows[row]:
                    new_order.append((rows[row][offset] * gridSize, row * -gridSize))

    self.offsetList = new_order

1 Ответ

0 голосов
/ 03 марта 2019

Ваши примеры показывают, что вы хотите поменять координаты объекта, а не «перевернуть» их.Чтобы на самом деле перевернуть декартову плоскость, вам понадобится точка разворота.Если эта точка равна (0,0), переворачивание будет равносильно инверсии знака координаты X или Y, которую вы хотите перевернуть.

С другой стороны, если вы хотите поменять координаты между объектами, используйте zip:

# vertical swap
grid_placement = [(F[0],B[1]) for F,B in zip(grid_placement, grid_placement[::-1])

# horizontal swap
grid_placement = [(F[1],B[0]) for F,B in zip(grid_placement, grid_placement[::-1])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...