2013-07-02 7 views
2

Я хочу создать стрелу, которую можно контролировать с помощью клавиатуры! Вращение на xz-равнине отлично работает, но я не могу позволить ему вращаться собственной осью z. Check This...Вращение объекта по собственной оси?

Так что я не хочу использовать системную ось, я хочу, чтобы ось относилась к стрелке!

from visual import * 
from threading import Thread 



class Pfeil(frame, Thread): 
    "modelliert einen Pfeil" 
def __init__(self, pos=(0,0,0), axis=(1,0,0)): 
    frame.__init__(self, pos=pos, axis=axis) 
    Thread.__init__(self) 
    selfpointer = arrow(frame=self, pos=(0,2,1), axis=(5,0,0), shaftwidth=1) 

def tasten(self): 
    "Methode" 
    if scene.kb.keys: 
     taste=scene.kb.getkey() 
     if taste=='left': 
      self.rotate(angle=radians(5), axis=(0,1,0), origin=self.pos) 
      print(self.axis) 

     if taste=='right': 
      self.rotate(angle=radians(-5), axis=(0,1,0), origin=self.pos) 
      print(self.axis) 

     if taste=='up': 
      self.rotate(angle=radians(5), axis=(0,0,1), origin=self.pos) 
      print(self.axis) 


def run(self): 
    while True: 
     self.tasten() 

Извините за слишком туп, чтобы вставить свой код здесь, так here's, добавленным ... Upload

Спасибо за помощь, если вы не понимаете мою проблему, просто комментарий пожалуйста!

ответ

2

Вы просто делаете свои преобразования не по порядку.

Вы хотите сделать «локальную» трансформацию, что очень просто. Переместите стрелку назад в начало координат, сделайте поворот вокруг оси z, а затем верните ее в исходное положение.

Это легче сделать, если вы храните локальную систему координат стрелки, но это может быть излишним для вашей цели.

+0

ну, но что, когда его ось = (0,0,1), «смотрит» ко мне, как я могу тогда вращать ее, чтобы иметь ось (0,1,0)? – m00lti

+1

Просто поверните на -90 градусов (или -pi/4 радиан) вдоль оси x. –

Смежные вопросы