![]() |
|
#1
|
|||
|
|||
|
positions on animation path
Hi, I would like to create an environment in which a ball is going around the original point. My simple code just create an animation path of a circle for a ball and try to figure out the actual positions when the ball pass along the animation path. My question is why the printed positions are not on a circle like what we can see? And so why the distance between the ball and the original point are not the constant value 10? Thanks!
Code:
import viz
viz.go()
import math
viz.add('tut_ground.wrl')
ball = viz.add('ball.wrl')
viz.MainView.move([0,3,-20])
path = viz.addAnimationPath()
positions = [ [0,1,10], [10,1,0], [0,1,-10], [-10,1,0], [0,1,10] ]
for x in range(len(positions)):
cp = viz.add(viz.CONTROL_POINT)
cp.setPosition(positions[x])
path.add(cp,x+1)
path.loop(viz.CIRCULAR)
viz.CUBIC_BEZIER
path.translatemode(viz.BEZIER)
path.computetangents()
path.setAutoRotate(viz.ON)
mylink = viz.link(path,ball)
path.play()
def mytimer(num):
pc = ball.getPosition()
print 'position: ', pc
dist = math.sqrt( (pc[0]-0.0)*(pc[0]-0.0) + (pc[2]-0.0)*(pc[2]-0.0) )
print 'distance: ', dist
viz.callback(viz.TIMER_EVENT, mytimer)
viz.starttimer(0,1/60.0,viz.FOREVER)
|
|
#2
|
|||
|
|||
|
You won't be able to create a perfect circle using bezier paths. You are better off manually animating the object. Either way, the following modified version of your script will generate a path that is closer to a circle. It uses cubic bezier and you removes the duplicate control point at the end of the path:
Code:
import viz
import vizmat
import vizact
viz.go()
viz.add('tut_ground.wrl')
ball = viz.add('ball.wrl')
viz.MainView.move([0,3,-20])
path = viz.addAnimationPath()
positions = [ [0,1,10], [10,1,0], [0,1,-10], [-10,1,0] ]
for x,pos in enumerate(positions):
cp = viz.addControlPoint()
cp.setPosition(pos)
path.add(cp,x+1)
path.loop(viz.CIRCULAR)
path.translatemode(viz.CUBIC_BEZIER)
path.computetangents()
path.setAutoRotate(viz.ON)
mylink = viz.link(path,ball)
path.play()
def PrintInfo():
pc = ball.getPosition()
print 'position: ', pc
dist = vizmat.Distance(pc,[0,1,0])
print 'distance: ', dist
vizact.ontimer(0,PrintInfo)
|
|
#3
|
|||
|
|||
|
I'll try that. Thank you.
|
|
#4
|
|||
|
|||
|
Hi,
If I happen to create another non-circle path using bezier paths, would the distance we can see/feel in VR is close to the actual distance that calculated by vizmat.Distance(). Thanks! Quote:
|
![]() |
|
|
Similar Threads
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| Start_position on animation path | ptjt255 | Vizard | 1 | 08-24-2009 11:40 AM |
| Problems with interaction of vizact.turn and animation path | Enlil | Vizard | 3 | 11-24-2008 04:23 PM |
| speed on animation path | whj | Vizard | 8 | 11-17-2008 07:41 PM |
| Animation Path | djdesmangles | Vizard | 2 | 06-11-2007 03:37 PM |
| Animation Path | djdesmangles | Vizard | 0 | 06-06-2007 11:03 AM |