我已经使用了很长时间,但是无法完成我想做的事情。我正在尝试找到一种基于对象列表及其坐标列表来翻转坐标的方法。
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
答案 0 :(得分:0)
您的示例建议您要交换对象坐标,而不是“翻转”它们。要实际在笛卡尔平面上翻转,您需要一个枢轴点。如果该点是(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])