3D вращение с неправильными осями вращенияPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 3D вращение с неправильными осями вращения

Сообщение Anonymous »

У меня возникла небольшая проблема с использованием 3D-матриц вращения для реализации симулятора кубика Рубика. Моя проблема в том, что при попытке повернуть куб вокруг глобальных осей X и Y (в 3D) я в конечном итоге вращаюсь вокруг
глобальной оси 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
Как мне заставить куб вращаться вокруг глобальной оси X и глобальной оси Y, чтобы я мог правильно его вращать?
(пожалуйста, объясните очень просто, поскольку я просто увлечен, но очень новый студент A-level)
до сих пор я пытался изменить порядок умножения с помощью матриц вращения (некоторые веб-сайты показали нечто подобное в качестве решения), но результаты были очень похожими (только 1 ось вращается вокруг глобальной оси, а остальные - вокруг текущей оси).
для получения дополнительной информации, если моя формулировка сбивает с толку, я искал тип вращения, и кажется называться «внешней» ротацией (если я не запутался)
кроме того, вопрос, который я должен дублировать, имеет один ответ. и в этом ответе не рассматривается, как работают эти матрицы, и не рассматривается способ вращения ПОЛНОГО куба, а также более мелких частей, которые я уже сделал.

Подробнее здесь: https://stackoverflow.com/questions/774 ... ion-axises
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • График с двумя осями Y и двумя осями X
    Anonymous » » в форуме Python
    0 Ответы
    21 Просмотры
    Последнее сообщение Anonymous
  • График с двумя осями Y и двумя осями X [закрыто]
    Anonymous » » в форуме Python
    0 Ответы
    27 Просмотры
    Последнее сообщение Anonymous
  • Вращение подзаголовка matplotlib с дополнительными осями
    Anonymous » » в форуме Python
    0 Ответы
    27 Просмотры
    Последнее сообщение Anonymous
  • Вращение подзаголовка matplotlib с дополнительными осями
    Anonymous » » в форуме Python
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous
  • Вращение квадратной матрицы не работает правильно после первого вращения
    Anonymous » » в форуме JAVA
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»