У меня есть сетка, которая представляет собой пустой массив формы (522, 476).
Затем у меня есть еще один массив numpy, который представляет собой траекторию отдельных точек xy (индексов сетки) формы (2, 3866).
Я успешно вращаю сетку, используя np.rot90(grid). Мой вопрос заключается в том, как мне повернуть траекторию таким же образом, чтобы отдельные точки xy продолжали выравниваться с сеткой.






Вы можете определить функцию поворота:
def rotate(origin, point, angle):
"""
Rotate a point counterclockwise by a given angle around a given origin.
The angle should be given in radians.
"""
ox, oy = origin
px, py = point
qx = ox + math.cos(angle) * (px - ox) - math.sin(angle) * (py - oy)
qy = oy + math.sin(angle) * (px - ox) + math.cos(angle) * (py - oy)
return qx, qy
А затем примените эту функцию ко всем (X, Y) точкам вашей траектории.
origin = tuple(0, 0)
newTrajectory = []
for i in range(0:len(trajectory[0])):
p = tuple(trajectory[i][0], trajectory[i][1])
newP = rotate(origin, p, math.pi/2)
row = [newP[0], newP[1]]
newTrajectory.append(row)
Лучший
Если вы всегда хотите повернуть на 90 градусов только один раз и всегда в одном и том же направлении (так что rot90 без каких-либо других аргументов), вы можете использовать эту формулу:
idx2 = np.array([[n.shape[0]-1-x[1], x[0]] for x in idx])
Предполагая, что idx — это ваш массив индексов (2, 3866), а n — это сетка, которую вы хотите проиндексировать (522, 476). Он просто использует знание того, что одиночное вращение делает с элементами, то есть переключает первое измерение на второе и делает второе измерение, считая с конца, первым измерением.
Можете ли вы объяснить, что здесь означает n. Я знаю, что вы написали, что это повернутый массив. Но что это значит?
@RahatZaman Я изменил формулировку, теперь она понятнее?
Укажите Минимальный, полный и проверяемый пример.