From: liming x. <lm...@gm...> - 2012-10-19 15:39:59
|
Hi, I am new to VPython. I want to use this tool to do a project for my work. I create a clock pulse train using the few lines below. ---------------------------------------------------- from visual import * g = [] g.append(display(x = 0, y = 100, width=1000, height=400)) g[0].title="First try" c = curve( x = arange(-10,10,0.01), display=g[0],radius=0.07,color=color.yellow ) # Draw a helix c.y = ceil(sin( 5.0*c.x )) while True: rate(5) ----------------------------------------------------- Now I want to make the pulse train moving, from left to right, continuously. The points disapper from the right, then emerge from the left, ... Can someone help me? Thanks in advance. |
From: Bruce S. <Bru...@nc...> - 2012-10-19 16:14:36
|
That's a clever way to make a pulse train; I wouldn't have thought of using the math ceil function. Here's one way to animate the pulse train, moving to the right. I set the range to 9 so that the pulses fill the screen. I move the display's center to the left until one period has elapsed, when I reset the center to the origin: from visual import * g = [] g.append(display(x = 0, y = 100, width=1000, height=400, range=9)) g[0].title="Second try" k = 5 T = 2*pi/k c = curve( x = arange(-10,10,0.01), display=g[0],radius=0.07,color=color.yellow ) # Draw a pulse train c.y = ceil(sin( k*c.x )) t = 0 dt = T/20 while True: rate(100) g[0].center.x -= dt t += dt if t >= T: g[0].center.x = 0 t = 0 You might wish to disable userspin and userzoom to prevent the viewer from messing up the display. Just in case you hadn't noticed it, I'll comment that in your original program you don't need a loop at the end to keep the display alive. When you come to the end of a VPython program, the display remains on the screen and you can zoom and rotate. Bruce Sherwood On Fri, Oct 19, 2012 at 9:39 AM, liming xiu <lm...@gm...> wrote: > Hi, > > I am new to VPython. I want to use this tool to do a project for my work. > > I create a clock pulse train using the few lines below. > > ---------------------------------------------------- > from visual import * > > g = [] > g.append(display(x = 0, y = 100, width=1000, height=400)) > > g[0].title="First try" > > c = curve( x = arange(-10,10,0.01), > display=g[0],radius=0.07,color=color.yellow ) # Draw a helix > c.y = ceil(sin( 5.0*c.x )) > > while True: > rate(5) |
From: liming x. <lm...@gm...> - 2012-10-19 16:35:22
|
Dear Bruce: Thanks. It looks great! Can I ask you one more favor: I want to create 8 of these clock pulse trains, from screen top to bottom ( the screen can be made bigger). 1. All the 8 pulse trains have save frequency (same T). 2. Time-wise, each pulse trains is delayed from its previous one by (1/8)T. In other words, the second one is (1/8)T behind the first one, the third one is (1/8)T behind the second one. 3. They all move from left to right. Can you help me on this? Thanks in advance! On Fri, Oct 19, 2012 at 11:14 AM, Bruce Sherwood <Bru...@nc...> wrote: > That's a clever way to make a pulse train; I wouldn't have thought of > using the math ceil function. Here's one way to animate the pulse > train, moving to the right. I set the range to 9 so that the pulses > fill the screen. I move the display's center to the left until one > period has elapsed, when I reset the center to the origin: > > from visual import * > > g = [] > g.append(display(x = 0, y = 100, width=1000, height=400, range=9)) > > g[0].title="Second try" > > k = 5 > T = 2*pi/k > c = curve( x = arange(-10,10,0.01), > display=g[0],radius=0.07,color=color.yellow ) # Draw a pulse train > c.y = ceil(sin( k*c.x )) > > t = 0 > dt = T/20 > while True: > rate(100) > g[0].center.x -= dt > t += dt > if t >= T: > g[0].center.x = 0 > t = 0 > > You might wish to disable userspin and userzoom to prevent the viewer > from messing up the display. > > Just in case you hadn't noticed it, I'll comment that in your original > program you don't need a loop at the end to keep the display alive. > When you come to the end of a VPython program, the display remains on > the screen and you can zoom and rotate. > > Bruce Sherwood > > On Fri, Oct 19, 2012 at 9:39 AM, liming xiu <lm...@gm...> wrote: >> Hi, >> >> I am new to VPython. I want to use this tool to do a project for my work. >> >> I create a clock pulse train using the few lines below. >> >> ---------------------------------------------------- >> from visual import * >> >> g = [] >> g.append(display(x = 0, y = 100, width=1000, height=400)) >> >> g[0].title="First try" >> >> c = curve( x = arange(-10,10,0.01), >> display=g[0],radius=0.07,color=color.yellow ) # Draw a helix >> c.y = ceil(sin( 5.0*c.x )) >> >> while True: >> rate(5) |
From: Bruce S. <Bru...@nc...> - 2012-10-19 17:00:37
|
I leave this extension to you. You've already structured your program appropriately by starting to create a list of displays. Just create all 8 displays, and in the animation loop loop over these displays to update all 8 pulse trains (displaced as you say). Bruce Sherwood On Fri, Oct 19, 2012 at 10:35 AM, liming xiu <lm...@gm...> wrote: > Dear Bruce: > > Thanks. It looks great! > > Can I ask you one more favor: > > I want to create 8 of these clock pulse trains, from screen top to > bottom ( the screen can be made bigger). > > 1. All the 8 pulse trains have save frequency (same T). > 2. Time-wise, each pulse trains is delayed from its previous one by > (1/8)T. In other words, the second one is (1/8)T behind the first one, > the third one is (1/8)T behind the second one. > 3. They all move from left to right. > > Can you help me on this? > > Thanks in advance! > > > > > > On Fri, Oct 19, 2012 at 11:14 AM, Bruce Sherwood > <Bru...@nc...> wrote: >> That's a clever way to make a pulse train; I wouldn't have thought of >> using the math ceil function. Here's one way to animate the pulse >> train, moving to the right. I set the range to 9 so that the pulses >> fill the screen. I move the display's center to the left until one >> period has elapsed, when I reset the center to the origin: >> >> from visual import * >> >> g = [] >> g.append(display(x = 0, y = 100, width=1000, height=400, range=9)) >> >> g[0].title="Second try" >> >> k = 5 >> T = 2*pi/k >> c = curve( x = arange(-10,10,0.01), >> display=g[0],radius=0.07,color=color.yellow ) # Draw a pulse train >> c.y = ceil(sin( k*c.x )) >> >> t = 0 >> dt = T/20 >> while True: >> rate(100) >> g[0].center.x -= dt >> t += dt >> if t >= T: >> g[0].center.x = 0 >> t = 0 >> >> You might wish to disable userspin and userzoom to prevent the viewer >> from messing up the display. >> >> Just in case you hadn't noticed it, I'll comment that in your original >> program you don't need a loop at the end to keep the display alive. >> When you come to the end of a VPython program, the display remains on >> the screen and you can zoom and rotate. >> >> Bruce Sherwood >> >> On Fri, Oct 19, 2012 at 9:39 AM, liming xiu <lm...@gm...> wrote: >>> Hi, >>> >>> I am new to VPython. I want to use this tool to do a project for my work. >>> >>> I create a clock pulse train using the few lines below. >>> >>> ---------------------------------------------------- >>> from visual import * >>> >>> g = [] >>> g.append(display(x = 0, y = 100, width=1000, height=400)) >>> >>> g[0].title="First try" >>> >>> c = curve( x = arange(-10,10,0.01), >>> display=g[0],radius=0.07,color=color.yellow ) # Draw a helix >>> c.y = ceil(sin( 5.0*c.x )) >>> >>> while True: >>> rate(5) |