1

現在の位置に対してフレームオブジェクトを回転させる方法を見つけようとしています。

例: オブジェクトが北を指しており、y 軸を中心に 180 度回転するとします。その後、私は言います: 90 度傾けて、「世界」の視点から傾けます。したがって、上向きではなく下向きです。(この紛らわしい話で申し訳ありません。以下のコードを試して、上下左右のキーを使用すると、私が何を意味するかがわかります)。

どんな助けでも大歓迎です。

    import time
    import numpy
    from visual import *

    # initialize variables
    pitch_degrees = 0
    roll_degrees = 0
    yaw_degrees = 0

    xangle = 0.0
    yangle = 0.0
    zangle = 0.0

    # create the airplane frame. this will be our working object.
    airplane = frame(make_trail=True)
    # below are the elements that create the airplane
    body = cone(frame=airplane, pos=(50,0,0), axis=(-150,0,0), radius=10)
    body2 = cone(frame=airplane, pos=(50,0,0), axis=(50,0,0), radius=10)
    wing = box(frame=airplane, pos=(35,0,0), size=(30,3,180))
    tail = box(frame=airplane, pos=(-75,0,0), size=(20,3,50))
    aileron = box(frame=airplane, pos=(-75,12,0), size=(20,24,3))
    cabin = ellipsoid(frame=airplane, pos=(30,5,0), axis=(1,0,0),size=(45,24,12))
    #painting
    for obj in airplane.objects:
        obj.color = color.red

    body.color = color.white
    cabin.color = (0.5, 0.5, 0.5)
    cabin.opacity = 0.8

    # I'm experiencing some jitter in my screen when starting up (yay ati....)
    time.sleep(2)

    # loop forever
    while True:
            # are there any keys pressed? if so, act on them.
            if scene.kb.keys: # event waiting to be processed?
                    s = scene.kb.getkey() # get keyboard info
                    if (s == 'up'):
                            pitch_degrees = pitch_degrees - 1
                    if (s == 'down'):
                            pitch_degrees = pitch_degrees + 1
                    if (s == 'left'):
                            roll_degrees = roll_degrees - 1
                    if (s == 'right'):
                            roll_degrees = roll_degrees + 1

            # convert degrees to radians
            zangle = numpy.radians(pitch_degrees)
            xangle = numpy.radians(roll_degrees)

            # execute the actual rotation.
            # but this should be relative to its current rotation :(
            airplane.rotate(angle=zangle,axis=(0,0,1))
            airplane.rotate(angle=xangle,axis=(1,0,0))

            # some delay because i'm a dirty boy
            time.sleep(0.005)
4

1 に答える 1

0

フレームではなく飛行機であるカスタム クラスを作成します。このようにして、クラス内のすべてのアイテム (翼、尾翼など) を飛行機の位置と方向に対して回転させる飛行機クラスのメソッドを作成できます。したがって、クラスには、その位置であるベクトルと方向のベクトルが含まれます。次に、回転演算を使用して、飛行機の方向ベクトルを中心に各アイテムを個別に回転させます。

申し訳ありませんが、これをコメントに投稿しますが、十分な評判がありません:)

于 2013-08-09T21:34:31.673 に答える