Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用vpython围绕对象的中心旋转对象_Python_Rotation_Position_Frame_Vpython - Fatal编程技术网

使用vpython围绕对象的中心旋转对象

使用vpython围绕对象的中心旋转对象,python,rotation,position,frame,vpython,Python,Rotation,Position,Frame,Vpython,我正在用VPython做一个月球登陆者游戏。 月球着陆器本身必须能够绕着自己的中心旋转,但他绕着错误的轴旋转和/或绕着原始位置旋转。月球着陆器的位置改变时,它必须旋转的轴和位置不会改变。我不知道怎么做 月球着陆器是由曲线组成的,但我有一个包含月球着陆器的框架。 这是代码(很抱歉代码是荷兰语的,我希望您能充分理解): 那么,当月球着陆器的位置与原始位置不同时,如何旋转月球着陆器呢 提前感谢伊格纳西奥说,将你的月球着陆器翻译到原点(中心),然后围绕中心旋转所有物体,然后将其翻译回原处。一如既往。翻译

我正在用VPython做一个月球登陆者游戏。 月球着陆器本身必须能够绕着自己的中心旋转,但他绕着错误的轴旋转和/或绕着原始位置旋转。月球着陆器的位置改变时,它必须旋转的轴和位置不会改变。我不知道怎么做

月球着陆器是由曲线组成的,但我有一个包含月球着陆器的框架。 这是代码(很抱歉代码是荷兰语的,我希望您能充分理解):

那么,当月球着陆器的位置与原始位置不同时,如何旋转月球着陆器呢


提前感谢

伊格纳西奥说,将你的月球着陆器翻译到原点(
中心
),然后围绕中心旋转所有物体,然后将其翻译回原处。

一如既往。翻译到原点,旋转,再翻译回来。我试过你说的,但没用。这是按下“左”按钮时的代码:如果s==“左”:#按下左按钮保持=f.pos f.pos=f.pos-保持f.rotate(角度=pi/15,轴=(0,0,1),原点=(0,0,0))f.pos=f.pos+保持
from visual import *
from math import *
from random import randint
maanoppervlak = curve(pos=[(-20,-2),(-18,-5)],color=color.red)
maanoppervlak.append(pos=(-18,-5))
maanoppervlak.append(pos=(-15,-4),color=color.red)
maanoppervlak.append(pos=(-15,-4))
maanoppervlak.append(pos=(-14,-4),color=color.red)
maanoppervlak.append(pos=(-14,-4))
maanoppervlak.append(pos=(-13,-15),color=color.red)
maanoppervlak.append(pos=(-13,-15), color=color.green)
maanoppervlak.append(pos=(-7,-15),color=color.green)
maanoppervlak.append(pos=(-7,-15),color=color.red)
maanoppervlak.append(pos=(-3,4),color=color.red)
maanoppervlak.append(pos=(-3,4))
maanoppervlak.append(pos=(-1,0),color=color.red)
maanoppervlak.append(pos=(-1,0))
maanoppervlak.append(pos=(3,-2),color=color.red)
maanoppervlak.append(pos=(3,-2),color=color.green)
maanoppervlak.append(pos=(8,-2),color=color.green)
maanoppervlak.append(pos=(8,-2),color=color.red)
maanoppervlak.append(pos=(13,-8),color=color.red)
maanoppervlak.append(pos=(13,-8))
maanoppervlak.append(pos=(16,-5),color=color.red)
maanoppervlak.append(pos=(16,-5))
maanoppervlak.append(pos=(19,-12),color=color.red)
maanoppervlak.append(pos=(19,-12))
maanoppervlak.append(pos=(20,-7), color=color.red)

print scene.width

f = frame() #maken van een frame waar de maanlander in zit
f.axis = (1,0,0)
f.pos = vector(-4,-10,0)
maanlander = curve(frame=f, pos=[(1,1),(2,1),(1.5,1),(1.5,2),(2,2.5),(2,3.5),(2.75,3.5),
(2.25,4),(2.25,4.5),(2.75,5),(3.75,5),(4.25,4.5),
(4.25,4),(3.75,3.5),(4.5,3.5),(4.5,2.5),(3.5,2.5),(3.75,2),
(2.75,2),(3,2.5),(2,2.5),(4.5,2.5),(5,2),(5,1),(4.5,1),
(5.5,1)],color=color.blue)
maanlander.accel = vector(0,0) #acceleratie van de maanlander
f.accel = vector(0,0) #acceleratie van de frame (deze of die hierboven is waarschijnlijk overbodig)
f.velocity = vector(0,0) #snelheid van de frame
deltat = 0.005
state = true
while state == true: #start van de loop
    rate(100)
    f.velocity = f.velocity + maanlander.accel*deltat #bepaalt de snelheid adhv de accel.
    maanlander.pos = maanlander.pos + f.velocity*deltat #bepaalt de positie adhv de snelheid
    if scene.kb.keys: # is there an event waiting to be processed?
            s = scene.kb.getkey() # obtain keyboard information
            if s == 'left': #er wordt op linkertoets gedrukt
                f.rotate(angle=pi/15., axis=(0,0,1), origin=(f.pos + vector(2.75,2.5,0))) #object moet rond zijn middden draaien (werkt nog niet)
            elif s == 'right':
                f.rotate(angle=-pi/15., axis=(0,0,1), origin=vector(2.75,2.5,0)) #zelfde als bij left, maar in omgekeerde richting
            elif s == 'up': #'boost'
                maanlander.accel = maanlander.accel + vector(0,10)