2012-12-01 40 views
0

我正在使用VPython製作月球人遊戲。 月球本身必須能夠圍繞自己的中心旋轉,但是他繞着錯誤的軸線和/或圍繞原始位置旋轉。當moonlander的位置改變時,它的旋轉軸和位置不會改變。我不知道該怎麼做。使用vpython在他的中心周圍旋轉物體

月球是由曲線,但我有一個框架,包含月球。 下面是代碼(約在荷蘭的代碼是對不起,我希望你能理解不夠):

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) 

那麼,你怎麼能旋轉moonlander,而且當它比原來的一個不同的位置?

在此先感謝

+0

與往常一樣。翻譯成原點,旋轉,翻回。 –

+0

我試過你說的,但它不起作用。 這是當你按下 '左' 按鈕的代碼: '左' 如果s ==:#left按鈕被按下 保持= f.pos \t f.pos = f.pos - 保持 \t f.rotate(angle = pi/15,axis =(0,0,1),origin =(0,0,0)) f.pos = f.pos + keep –

回答

0

伊格納西奧是說翻譯你moonlander原點(該center),然後繞中心的一切,然後把它轉變回原來的位置。