глобальной оси X и оси Y куба. например, возьмите следующее изображение в качестве отправной точки: исходное положение
возьмите следующее изображение в качестве примера того, что происходит, когда я пытаюсь повернуть вокруг оси Y, перемещая мышь к слева: неправильное вращение вокруг оси Y куба вместо глобальной оси Y
и следующее изображение в качестве примера того, что происходит, когда я пытаюсь повернуть вокруг оси X, перемещая мышь вниз: правильное вращение вокруг глобальной оси X
здесь вы можете увидеть код, который я использовал для выполнения вращения:
Код: Выделить всё
from math import cos,sin
import numpy as np
def rotate(mat,xangle,yangle,zangle): #these angles are by how much i want to rotate around a certain axis (in radians)
xrotation_matrix = np.matrix([[1,0,0],
[0,cos(xangle),-sin(xangle)],
[0,sin(xangle),cos(xangle)]])
yrotation_matrix = np.matrix([[cos(yangle),0,sin(yangle)],
[0,1,0],
[-sin(yangle),0,cos(yangle)]])
zrotation_matrix = np.matrix([[cos(zangle),-sin(zangle),0],
[sin(zangle),cos(zangle),0],
[0,0,1]])
rotated3d = np.dot(zrotation_matrix,mat.reshape((3,1))) #mat is a point in the form np.matrix([x,y,z])
rotated3d = np.dot(yrotation_matrix,rotated3d)
rotated3d = np.dot(xrotation_matrix,rotated3d)
return rotated3d
Код: Выделить всё
def get_full_turn(self,mousepos):
xchange = mousepos[0]-self.startdrag[0]
ychange = mousepos[1]-self.startdrag[1]
self.xangle -= self.xadding
self.yangle -= self.yadding
self.xadding = ychange/100
self.yadding = xchange/100
self.xangle += self.xadding
self.yangle += self.yadding
(пожалуйста, объясните очень просто, поскольку я просто увлечен, но очень новый студент A-level)
до сих пор я пытался изменить порядок умножения с помощью матриц вращения (некоторые веб-сайты показали нечто подобное в качестве решения), но результаты были очень похожими (только 1 ось вращается вокруг глобальной оси, а остальные - вокруг текущей оси).
для получения дополнительной информации, если моя формулировка сбивает с толку, я искал тип вращения, и кажется называться «внешней» ротацией (если я не запутался)
кроме того, вопрос, который я должен дублировать, имеет один ответ. и в этом ответе не рассматривается, как работают эти матрицы, и не рассматривается способ вращения ПОЛНОГО куба, а также более мелких частей, которые я уже сделал.
Подробнее здесь: https://stackoverflow.com/questions/774 ... ion-axises