#1
|
|||
|
|||
random speed and associated coding
Hi there,
I want the code to sample a random accelerator gain from a predetermined list, but when the gain changes, the coding for the indicated speed in mph also has to change, to give the correct speed in the text box. I put this together so far Code:
import viz #Import vizjoy module import vizjoy import time import math import vizact import vizinfo import random viz.displaymode(1024, 768) viz.go(viz.FULLSCREEN) viz.mouse(viz.OFF) vizact.ontimer(40,viz.quit) #runs file for 40 secs subject = viz.input('What is the participant number?') MOVE_SPEED = 0.25 #initial speed scalar #define random speed scalar constant for changing gain on accelerator #Add a joystick joy = vizjoy.add() viz.clearcolor(0.5,0.5,1) viz.MainView.setPosition(0,.5,0) sky = viz.add(viz.ENVIRONMENT_MAP,'sky.jpg') skybox = viz.add('skydome.dlc') skybox.texture(sky) #add the road texture road = viz.add('roadld3.png') #road2 = viz.add('roadsd.png') #add the ground ground = viz.add('tut_ground.wrl') ground.setPosition(0,0,25) #create a texture quad to add the road texture to #and place it over ground quad = viz.addTexQuad() quad.setScale(1,2,1) quad.setPosition(0,.1,0) quad.setEuler(0,90,0) quad.texture(road) road_position = 0 ground_position = 50 #add road and ground if getting near the end of road def addRoad(): global road_position, ground_position viewpoint_pos = viz.MainView.getPosition() #check to see how close the viewpoint is to the end of the road if road_position - viewpoint_pos[2] < 50: #add 50 meters of ground global ground_position groundcopy = ground.copy() groundcopy.setPosition([0,0,ground_position]) ground_position +=50 #add 50 meters of road for i in range(1,50): quadcopy = quad.copy() quadcopy.setPosition([0,.1,road_position]) quadcopy.setEuler(0,90,0) road_position +=1 addRoad() #call a timer every frame to check if road needs to be added vizact.ontimer(0, addRoad) #change the road texture on keypress #vizact.onkeydown('1', quad.texture,road2) #vizact.onkeydown('2', quad.texture,road) vizact.onmousedown(viz.MOUSEBUTTON_LEFT, quad.texture,road) #vizact.onmousedown(viz.MOUSEBUTTON_LEFT, quad.texture,road2) def UpdateJoystick(): #Get the joystick position x,y,z = joy.getPosition() #Get the twist of the joystick #twist = joy.getTwist() #Move the viewpoint forward/backward based on y-axis value if abs(y) > 0.0001: #Make sure value is above a certain threshold viz.MainView.move(0,0,-y*MOVE_SPEED,viz.BODY_ORI) #Move the viewpoint left/right based on x-axis value if abs(x) > 0.001: #Make sure value is above a certain threshold viz.MainView.move(x*0.1,0,0,viz.BODY_ORI) #Turn the viewpoint left/right based on twist value #if abs(twist) > 0.001: #Make sure value is above a certain threshold # viz.MainView.rotate(0,1,0,twist,viz.BODY_ORI,viz.RELATIVE_WORLD) #UpdateJoystick every frame vizact.ontimer(0,UpdateJoystick) #define random speed scalar constant for changing gain on accelerator def MOVE_SPEEDSC(): global MOVE_SPEED, speedm, speedcon MOVE_SPEED = random.choice([0.15,0.2,0.25,0.3]) vizact.ontimer(5, MOVE_SPEEDSC) #add textbox and set position on screen text_speed = viz.addTextbox(parent = viz.SCREEN) text_speed.setPosition(.15, .9 ) text_speed.fontSize (30) old_posZ = 0 def showSpeed(): global old_posZ, speed, speedm, speedcon current_pos = viz.MainView.getPosition() current_posZ = current_pos[2] distance = abs(current_posZ - old_posZ) #get speed in meters/sec speed = (distance/viz.elapsed()) #get speed in mph #speedm = 4*(speed*3600)/1609.3 #chnage multiplier to reflect gain change if MOVE_SPEED == 0.15: speedm = 4*(speed*3600)/1609.3 speedm = 6.666666667*(speed*3600)/1609.3 if MOVE_SPEED == 0.2: speedm = 5*(speed*3600)/1609.3 if MOVE_SPEED == 0.25: speedm = 4*(speed*3600)/1609.3 if MOVE_SPEED == 0.3: speedm = 3.33333333*(speed*3600)/1609.3 old_posZ = current_posZ #enter speed in textbox rounded to 1 digit after decimal text_speed.message(str(round(speedm,1))+ 'MPH') vizact.ontimer(0.25, showSpeed) #Open file in path filename = 'gainchangeprac_.txt' + str(subject) def getPublishedPath(filename): #filename = 'adapt_.txt' + str(subject) publishPath = viz.getOption('Y:\backup\Vizard30\resources\road\_.txt','') if publishPath: return '/'.join([publishPath,filename]) return filename file = open(viz.res.getPublishedPath(filename), 'w') def mytimer (num): #joy_pos = str(joy.getPosition()) out = (str(round(speedm,1)) + '\n') file.write(out) file.flush() print out viz.callback( viz.TIMER_EVENT, mytimer ) viz.starttimer( 0, 0.25, viz.FOREVER ) #capturing 4 times a sec Any help greatly appreciated! |
#2
|
|||
|
|||
Having carried out some testing on the code it seems that the program isn't changing the mph coding to reflect the associated change in accelerator gain.
Is the code in the wrong postition? Or have I just cocked it up completely with incorrect coding? |
Thread Tools | |
Display Modes | Rate This Thread |
|
|