У меня есть набор точек в одной системе координат, и я хочу повернуть их в другую систему координат в Python. На основе этого ответа я написал следующую Python функцию:
def change_of_basis(points, initial, final):
'''
rotate points/vectors in a 3D coordinate system to a new coordinate system
input: m x 3 array of points or vectors that have to be transformed from the initial to the final csys
initial: sequence of sequences of floats representing the normalized axis of the csys that has to be transformed
final: sequence of sequences of floats representing the normalized axis of the csys to which has to be transformed
return: the points/vectors in the new coordinate system
'''
x1, y1, z1 = initial
x2, y2, z2 = final
M11, M12, M13 = np.dot(x1, x2), np.dot(x1, y2), np.dot(x1, z2)
M21, M22, M23 = np.dot(y1, x2), np.dot(y1, y2), np.dot(y1, z2)
M31, M32, M33 = np.dot(z1, x2), np.dot(z1, y2), np.dot(z1, z2)
# set up rotation matrix
R = np.array([[M11, M12, M13],
[M21, M22, M23],
[M31, M32, M33]])
return np.linalg.inv(R).dot(points)
Рабочий пример:
initial = [[ 0.98078528 0. -0.19509032]
[-0.19509032 0. -0.98078528]
[ 0. 1. 0. ]]
final = [[ 0.83335824 -0.08626633 -0.54595986]
[-0.55273325 -0.13005679 -0.82314712]
[ 0. 0.98774564 -0.15607226]]
new_cys = change_of_basis(initial, initial, final )
Построение графика дает результат, представленный ниже. Намерение состоит в том, чтобы преобразовать красно-оранжевую систему координат в желтую, но в результате получается синяя система координат. Кто-нибудь может увидеть, какую ошибку я совершаю и как это исправить?
РЕДАКТИРОВАТЬ: Он работал для преобразования системы координат. Я сменил функцию выше на ту, что имею сейчас. Это позволяет мне преобразовать красный в желтую систему координат. Теперь мне нужно преобразовать набор точек в первой (красной) системе координат в набор точек во второй (желтой) системе координат. Я думал, что эта функция будет работать, но это не так, отличается ли преобразование для набора точек?