![]() |
|
#1
|
|||
|
|||
Thanks for the post. Sorry, we have not had time to answer yet. We will respond tomorrow or early next week.
|
#2
|
|||
|
|||
![]()
Hi,
After thinking it over, I feel I should not use collision in this case. Because I need to prevent crash instead of allowing collision. Is there any way I can calculate the position after a certain time, e.g. 2 seconds, when a car moving along the animation path according to its speed? Sorry about confusion. And thanks for your help in advance. |
#3
|
|||
|
|||
you could create a callback function that is called every time a timer expires. Within that function you could get the position of your cars and calculate the distance between them. If they are to close you could speed up the one in front and slow down the one behind.
Code:
import vizmat #start a timer that will call onTimer() every 2 seconds viz.starttimer(0,2,viz.FOREVER) def onTimer(num): car1_Pos = car1.getPosition() car2_Pos = car2.getPosition() distance = vizmat.Distance(car1_Pos, car2_Pos) if distance is too close: #increase speed of path of car1 #decrease speed of path of car2 viz.callback(viz.TIMER_EVENT,onTimer) is that helpful? |
#4
|
|||
|
|||
Sorry I didn't make it clear. I need to know the position in advance, like where the car could be in the next 2 seconds. So I can predict if they would crash. (I know your sample code is a way to predict crash based on distance. But my research need a way to predict crash based on time.) Since all cars have their defined paths and speed using animation path, I'm wondering if I can get the expected position beforehand? I really appreciate your help.
|
#5
|
|||
|
|||
You could try creating another animation path with identical control points. You can delay playing the second path by two seconds. The second path would have your car linked to it. The first path would have an empty group node linked to it. The group node, which is not visible, would always have the position two seconds ahead of your car. Just get its position anytime you need to make your calculation. If however you change the speed of your car's animation path, you will need to do the same for your group nodes path, so they will always be two seconds apart.
Here is some code with a semi-transparent ball two seconds ahead of another ball. You could replace the semi-transparent ball with an empty group node that just holds the position Code:
import viz viz.go() viz.add('tut_ground.wrl') #add a ball and make semi-transparent, this will be 2 seconds ahead of #ball2 ball = viz.add('ball.wrl') ball.alpha(.2) ball2 = viz.add('ball.wrl') #Move the viewpoint back viz.MainView.move(0,0,-8) #Create the animation paths path = viz.add(viz.ANIMATION_PATH) path2 = viz.add(viz.ANIMATION_PATH) #Initialize an array of control points positions = [ [0,0,2], [2,0,0], [0,0,-2], [-2,0,0] ] for x in range(0,len(positions)): cp = viz.add(viz.CONTROL_POINT) cp.setPosition(positions[x]) path.add(cp,x+1) path2.add(cp,x+1) #Set the initial loop mode to circular path.loop(viz.CIRCULAR) path2.loop(viz.CIRCULAR) #Automatically compute tangent vectors for cubic bezier translations path.computeTangents() path2.computetangents() #Automatically rotate the path path.setAutoRotate(viz.ON) path2.setAutoRotate(viz.ON) #Link ball and ball2 to their paths ball.link(path) ball2.link(path2) #start playing the first animation path immediately path.play() #start playing the second animation path after two seconds vizact.ontimer2(2, 1, path2.play) |
#6
|
|||
|
|||
Hi, Jeff
That's really helpful! Thanks a lot! I have another question. Is there any way I can get the current speed of the object, like accessing some environment variable? The reason I need it is because when I accelerate cars I need set the new speed based on the current speed. |
#7
|
|||
|
|||
Would it work for you to use animationpath.constantspeed when you begin. Then you would know the initial speed and you could change based on that.
|
![]() |
Thread Tools | |
Display Modes | Rate This Thread |
|
|
![]() |
||||
Thread | Thread Starter | Forum | Replies | Last Post |
Real Time Audio Data | lomendil | Vizard | 2 | 06-02-2008 08:18 PM |
Can I get real time Intersense tracking data from another computer on the network? | GoldenSun | Vizard | 4 | 04-30-2008 07:42 PM |
timer question | Elittdogg | Vizard | 5 | 10-10-2007 02:49 PM |
Animation Path | djdesmangles | Vizard | 2 | 06-11-2007 03:37 PM |
Animation Path | djdesmangles | Vizard | 0 | 06-06-2007 11:03 AM |