Python: получить направление вектора 3 из вращения вектора 3, например: `0 0 45` = '0,5 0,5 0' ⇐ Python
Python: получить направление вектора 3 из вращения вектора 3, например: `0 0 45` = '0,5 0,5 0'
Я работаю над программой Python, в которой определяю свой собственный векторный 3D-тип. По крайней мере, так, как я это себе представлял, векторы могут хранить как положение, так и вращение... если лучше реализовать повороты кватернионов с 4 значениями, я могу попробовать vec4, но я настоятельно предпочитаю избегать их, поскольку я их понимаю еще меньше, и они гораздо более громоздки. То, что у меня есть, похоже, работает так, как задумано, и не требует дальнейших изменений:
класс vec3: def __init__(self, x: float, y: float, z: float): self.x = x self.y = y self.z = z def rot(сам, другой) self.x = (self.x + Other.x) % 360 self.y = (self.y + Other.y) % 360 self.z = (self.z + Other.z) % 360 Защитный каталог (сам): # Именно здесь должно произойти то волшебство, которого мне не хватает return vec3(self.x/360, self.y/360, self.z/360) v = vec3(0, 90, 180) # Результат: 0 90 180 v.rot(vec3(-90, 45, 270)) # Результат: 270 135 90 v.дир() # Результат: 0,75 0,375 0,25 # Правильный диапазон, но не указывает направление Проблема, с которой я борюсь, заключается в том, как получить реальное направление, на которое указывает вектор, то есть виртуальную стрелку, выступающую из начала координат и указывающую туда, куда смотрит этот вектор: X — вправо, Y — вперед, Z вверх. Само по себе его вращение не представляет этого: вращение 0 0 0 должно быть направлением 0 1 0, одним из 0 0 45 (45* вправо), вероятно, следует перевести как 0.5 0.5 0 (половина прямого направления отдается правому направлению), если мы добавим еще 45*, чтобы смотреть полностью вправо, мы иметь 0 0 90, который будет указывать на 1 0 0. Я не против, если направления перепутаются по сравнению с тем, как я их себе представляю, главное, чтобы это было сделано правильно и все возможные комбинации были предсказуемы. Какой самый простой алгоритм преобразования я могу использовать в своей функции dir?
Я работаю над программой Python, в которой определяю свой собственный векторный 3D-тип. По крайней мере, так, как я это себе представлял, векторы могут хранить как положение, так и вращение... если лучше реализовать повороты кватернионов с 4 значениями, я могу попробовать vec4, но я настоятельно предпочитаю избегать их, поскольку я их понимаю еще меньше, и они гораздо более громоздки. То, что у меня есть, похоже, работает так, как задумано, и не требует дальнейших изменений:
класс vec3: def __init__(self, x: float, y: float, z: float): self.x = x self.y = y self.z = z def rot(сам, другой) self.x = (self.x + Other.x) % 360 self.y = (self.y + Other.y) % 360 self.z = (self.z + Other.z) % 360 Защитный каталог (сам): # Именно здесь должно произойти то волшебство, которого мне не хватает return vec3(self.x/360, self.y/360, self.z/360) v = vec3(0, 90, 180) # Результат: 0 90 180 v.rot(vec3(-90, 45, 270)) # Результат: 270 135 90 v.дир() # Результат: 0,75 0,375 0,25 # Правильный диапазон, но не указывает направление Проблема, с которой я борюсь, заключается в том, как получить реальное направление, на которое указывает вектор, то есть виртуальную стрелку, выступающую из начала координат и указывающую туда, куда смотрит этот вектор: X — вправо, Y — вперед, Z вверх. Само по себе его вращение не представляет этого: вращение 0 0 0 должно быть направлением 0 1 0, одним из 0 0 45 (45* вправо), вероятно, следует перевести как 0.5 0.5 0 (половина прямого направления отдается правому направлению), если мы добавим еще 45*, чтобы смотреть полностью вправо, мы иметь 0 0 90, который будет указывать на 1 0 0. Я не против, если направления перепутаются по сравнению с тем, как я их себе представляю, главное, чтобы это было сделано правильно и все возможные комбинации были предсказуемы. Какой самый простой алгоритм преобразования я могу использовать в своей функции dir?
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение