![]() |
#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! |
Thread Tools | |
Display Modes | Rate This Thread |
|
|