From: Stef M. <s.m...@ru...> - 2009-01-06 22:12:56
|
hello, the simple program below, hiding the scene for a moment, lets the text disappear in VP3 (VP5 works ok). (winXP-sp2) Is there a workaround ? thanks, Stef from visual import * label ( text = 'Click to show problem' ) while True : rate ( 50 ) if scene.mouse.clicked > 0 : while scene.mouse.clicked > 0 : scene.mouse.getclick() scene.visible = False scene.visible = True |
From: Bruce S. <Bru...@nc...> - 2009-01-08 03:47:22
|
That's a very strange bug in VP3; I have no idea what is the cause. I note that creating a new label after making the window visible fails to show any text, though the box surrounding the (nonvisible) text is the appropriate width. If on the other hand no label is created before the window manipulations are carried out, a new label does show text. Very strange. The only workaround that I can see is to use VP5. Bruce Sherwood Stef Mientki wrote: > hello, > > the simple program below, hiding the scene for a moment, > lets the text disappear in VP3 (VP5 works ok). (winXP-sp2) > Is there a workaround ? > > thanks, > Stef > > > from visual import * > > label ( text = 'Click to show problem' ) > > while True : > rate ( 50 ) > if scene.mouse.clicked > 0 : > while scene.mouse.clicked > 0 : > scene.mouse.getclick() > scene.visible = False > scene.visible = True > > > ------------------------------------------------------------------------------ > Check out the new SourceForge.net Marketplace. > It is the best place to buy or sell services for > just about anything Open Source. > http://p.sf.net/sfu/Xq1LFB > _______________________________________________ > Visualpython-users mailing list > Vis...@li... > https://lists.sourceforge.net/lists/listinfo/visualpython-users |
From: Stef M. <s.m...@ru...> - 2009-01-08 17:20:25
|
Bruce Sherwood wrote: > That's a very strange bug in VP3; I have no idea what is the cause. I > note that creating a new label after making the window visible fails > to show any text, though the box surrounding the (nonvisible) text is > the appropriate width. If on the other hand no label is created before > the window manipulations are carried out, a new label does show text. > Very strange. > > The only workaround that I can see is to use VP5. > I was afraid to get that answer ;-) And yes, probably it's the best way to go, but then embedding of VPython isn't possible anymore ( hide not supported, resize not allowed during visible) :-( thanks anyway, cheers, Stef > Bruce Sherwood > > Stef Mientki wrote: >> hello, >> >> the simple program below, hiding the scene for a moment, >> lets the text disappear in VP3 (VP5 works ok). (winXP-sp2) >> Is there a workaround ? >> >> thanks, >> Stef >> >> >> from visual import * >> >> label ( text = 'Click to show problem' ) >> >> while True : >> rate ( 50 ) >> if scene.mouse.clicked > 0 : >> while scene.mouse.clicked > 0 : >> scene.mouse.getclick() >> scene.visible = False >> scene.visible = True >> >> >> ------------------------------------------------------------------------------ >> >> Check out the new SourceForge.net Marketplace. >> It is the best place to buy or sell services for >> just about anything Open Source. >> http://p.sf.net/sfu/Xq1LFB >> _______________________________________________ >> Visualpython-users mailing list >> Vis...@li... >> https://lists.sourceforge.net/lists/listinfo/visualpython-users > > |
From: Bruce S. <Bru...@nc...> - 2009-01-08 17:44:14
|
But "hide" IS supported. It's unfortunate that there was a scene.hide() that was undocumented (and not implemented in Visual 5), but it has always been the case that scene.visible = False has worked in all versions of Visual. Nor am I sure that I understand what is meant by "resize not allowed during visible". Do you mean setting scene.width and scene.height? That didn't work in Visual 3, either. The following resizing works in both Visual 3 and Visual 5: from visual import * box() scene.mouse.getclick() scene.visible = False scene.width = 800 scene.visible = True Bruce Sherwood Stef Mientki wrote: > > Bruce Sherwood wrote: >> That's a very strange bug in VP3; I have no idea what is the cause. I >> note that creating a new label after making the window visible fails >> to show any text, though the box surrounding the (nonvisible) text is >> the appropriate width. If on the other hand no label is created before >> the window manipulations are carried out, a new label does show text. >> Very strange. >> >> The only workaround that I can see is to use VP5. >> > I was afraid to get that answer ;-) > And yes, probably it's the best way to go, > but then embedding of VPython isn't possible anymore ( hide not > supported, resize not allowed during visible) > :-( > > thanks anyway, > cheers, > Stef >> Bruce Sherwood >> >> Stef Mientki wrote: >>> hello, >>> >>> the simple program below, hiding the scene for a moment, >>> lets the text disappear in VP3 (VP5 works ok). (winXP-sp2) >>> Is there a workaround ? >>> >>> thanks, >>> Stef >>> >>> >>> from visual import * >>> >>> label ( text = 'Click to show problem' ) >>> >>> while True : >>> rate ( 50 ) >>> if scene.mouse.clicked > 0 : >>> while scene.mouse.clicked > 0 : >>> scene.mouse.getclick() >>> scene.visible = False >>> scene.visible = True >>> >>> >>> ------------------------------------------------------------------------------ >>> >>> Check out the new SourceForge.net Marketplace. >>> It is the best place to buy or sell services for >>> just about anything Open Source. >>> http://p.sf.net/sfu/Xq1LFB >>> _______________________________________________ >>> Visualpython-users mailing list >>> Vis...@li... >>> https://lists.sourceforge.net/lists/listinfo/visualpython-users >> > > ------------------------------------------------------------------------------ > Check out the new SourceForge.net Marketplace. > It is the best place to buy or sell services for > just about anything Open Source. > http://p.sf.net/sfu/Xq1LFB > _______________________________________________ > Visualpython-users mailing list > Vis...@li... > https://lists.sourceforge.net/lists/listinfo/visualpython-users |
From: Bruce S. <Bru...@nc...> - 2009-01-08 20:24:29
|
The only significant differences that I know of between Visual 3 and Visual 5 are that the following have not (yet) been implemented in Visual 5: scene.cursor.visible, and right-button and middle-button mouse events. These are listed as known bugs in the statement of new features in the documentation for Visual 5. Bruce Sherwood Stef Mientki wrote: > thanks Bruce, > > I didn't know that, > and indeed it works like a charm. > So now I can really test the differences between VP3 and VP5 ;-) > I'll report my findings. > > cheers, > Stef > > Bruce Sherwood wrote: >> But "hide" IS supported. It's unfortunate that there was a >> scene.hide() that was undocumented (and not implemented in Visual 5), >> but it has always been the case that scene.visible = False has worked >> in all versions of Visual. >> >> Nor am I sure that I understand what is meant by "resize not allowed >> during visible". Do you mean setting scene.width and scene.height? >> That didn't work in Visual 3, either. The following resizing works in >> both Visual 3 and Visual 5: >> >> from visual import * >> box() >> scene.mouse.getclick() >> scene.visible = False >> scene.width = 800 >> scene.visible = True >> >> Bruce Sherwood >> >> Stef Mientki wrote: >>> Bruce Sherwood wrote: >>>> That's a very strange bug in VP3; I have no idea what is the cause. >>>> I note that creating a new label after making the window visible >>>> fails to show any text, though the box surrounding the (nonvisible) >>>> text is the appropriate width. If on the other hand no label is >>>> created before the window manipulations are carried out, a new label >>>> does show text. Very strange. >>>> >>>> The only workaround that I can see is to use VP5. >>>> >>> I was afraid to get that answer ;-) >>> And yes, probably it's the best way to go, >>> but then embedding of VPython isn't possible anymore ( hide not >>> supported, resize not allowed during visible) >>> :-( >>> >>> thanks anyway, >>> cheers, >>> Stef >>>> Bruce Sherwood >>>> >>>> Stef Mientki wrote: >>>>> hello, >>>>> >>>>> the simple program below, hiding the scene for a moment, >>>>> lets the text disappear in VP3 (VP5 works ok). (winXP-sp2) >>>>> Is there a workaround ? >>>>> >>>>> thanks, >>>>> Stef >>>>> >>>>> >>>>> from visual import * >>>>> >>>>> label ( text = 'Click to show problem' ) >>>>> >>>>> while True : >>>>> rate ( 50 ) >>>>> if scene.mouse.clicked > 0 : >>>>> while scene.mouse.clicked > 0 : >>>>> scene.mouse.getclick() >>>>> scene.visible = False >>>>> scene.visible = True >>>>> >>>>> >>>>> ------------------------------------------------------------------------------ >>>>> >>>>> Check out the new SourceForge.net Marketplace. >>>>> It is the best place to buy or sell services for >>>>> just about anything Open Source. >>>>> http://p.sf.net/sfu/Xq1LFB >>>>> _______________________________________________ >>>>> Visualpython-users mailing list >>>>> Vis...@li... >>>>> https://lists.sourceforge.net/lists/listinfo/visualpython-users >>> ------------------------------------------------------------------------------ >>> >>> Check out the new SourceForge.net Marketplace. >>> It is the best place to buy or sell services for >>> just about anything Open Source. >>> http://p.sf.net/sfu/Xq1LFB >>> _______________________________________________ >>> Visualpython-users mailing list >>> Vis...@li... >>> https://lists.sourceforge.net/lists/listinfo/visualpython-users >> > > ------------------------------------------------------------------------------ > Check out the new SourceForge.net Marketplace. > It is the best place to buy or sell services for > just about anything Open Source. > http://p.sf.net/sfu/Xq1LFB > _______________________________________________ > Visualpython-users mailing list > Vis...@li... > https://lists.sourceforge.net/lists/listinfo/visualpython-users |
From: Bruce S. <Bru...@nc...> - 2009-01-08 20:51:49
|
I've seen this label bug with font='serif' but not with the default sans-serif font that it looks like you've used. Could you please post the actual code you used to generate the picture? I stand however by my previous statement that the only "significant differences" are those listed. Bruce Sherwood Stef Mientki wrote: > hi Bruce, > > Bruce Sherwood wrote: >> The only significant differences that I know of between Visual 3 and >> Visual 5 are that the following have not (yet) been implemented in >> Visual 5: scene.cursor.visible, and right-button and middle-button >> mouse events. These are listed as known bugs in the statement of new >> features in the documentation for Visual 5. > you don't know yet, how good I am in finding bugs ;-) > here is subtle one, (VP5, winXP-sp2) > look very carefully at the picture, it contains 2 bugs. > The bug appears depending on the ratio of hor/ver size of the frame, > and moving either the height or width slightly, you can get to see other > variations. > > cheers, > Stef > > ------------------------------------------------------------------------ > > > ------------------------------------------------------------------------ > > ------------------------------------------------------------------------------ > Check out the new SourceForge.net Marketplace. > It is the best place to buy or sell services for > just about anything Open Source. > http://p.sf.net/sfu/Xq1LFB > > > ------------------------------------------------------------------------ > > _______________________________________________ > Visualpython-users mailing list > Vis...@li... > https://lists.sourceforge.net/lists/listinfo/visualpython-users |
From: Bruce S. <Bru...@nc...> - 2009-01-08 22:15:15
|
Your font is sans-serif, because that's the default when you don't specify a font in a label statement. On my Windows Vista machine I don't see extra pixels lit up (but I do if I specify serif). Maybe the situation is different on XP. Thanks for the report. Bruce Stef Mientki wrote: > > Bruce Sherwood wrote: >> I've seen this label bug with font='serif' but not with the default >> sans-serif font that it looks like you've used. Could you please post >> the actual code you used to generate the picture? > AFAIK, I didn't set the font, > so where is the font coming from. > Code below. >> I stand however by my previous statement that the only "significant >> differences" are those listed. > I agree it's not really significant. > > cheers, > Stef >> Bruce Sherwood >> |
From: Stef M. <s.m...@ru...> - 2009-01-08 22:50:58
|
hi Bruce, Bruce Sherwood wrote: > Your font is sans-serif, because that's the default when you don't > specify a font in a label statement. On my Windows Vista machine I > don't see extra pixels lit up (but I do if I specify serif). On winXP, the serif fonts shows the same effect, but on other characters. The monospace font doesn't show the effect (but it's so large). With all font types, the borderlines seems to change random between: 1 white line or 2 gray lines. btw. Instead of resizing the window, you can force the effect also with zooming in and out. cheers, Stef |
From: Stef M. <s.m...@ru...> - 2009-01-08 19:02:31
|
thanks Bruce, I didn't know that, and indeed it works like a charm. So now I can really test the differences between VP3 and VP5 ;-) I'll report my findings. cheers, Stef Bruce Sherwood wrote: > But "hide" IS supported. It's unfortunate that there was a > scene.hide() that was undocumented (and not implemented in Visual 5), > but it has always been the case that scene.visible = False has worked > in all versions of Visual. > > Nor am I sure that I understand what is meant by "resize not allowed > during visible". Do you mean setting scene.width and scene.height? > That didn't work in Visual 3, either. The following resizing works in > both Visual 3 and Visual 5: > > from visual import * > box() > scene.mouse.getclick() > scene.visible = False > scene.width = 800 > scene.visible = True > > Bruce Sherwood > > Stef Mientki wrote: >> >> Bruce Sherwood wrote: >>> That's a very strange bug in VP3; I have no idea what is the cause. >>> I note that creating a new label after making the window visible >>> fails to show any text, though the box surrounding the (nonvisible) >>> text is the appropriate width. If on the other hand no label is >>> created before the window manipulations are carried out, a new label >>> does show text. Very strange. >>> >>> The only workaround that I can see is to use VP5. >>> >> I was afraid to get that answer ;-) >> And yes, probably it's the best way to go, >> but then embedding of VPython isn't possible anymore ( hide not >> supported, resize not allowed during visible) >> :-( >> >> thanks anyway, >> cheers, >> Stef >>> Bruce Sherwood >>> >>> Stef Mientki wrote: >>>> hello, >>>> >>>> the simple program below, hiding the scene for a moment, >>>> lets the text disappear in VP3 (VP5 works ok). (winXP-sp2) >>>> Is there a workaround ? >>>> >>>> thanks, >>>> Stef >>>> >>>> >>>> from visual import * >>>> >>>> label ( text = 'Click to show problem' ) >>>> >>>> while True : >>>> rate ( 50 ) >>>> if scene.mouse.clicked > 0 : >>>> while scene.mouse.clicked > 0 : >>>> scene.mouse.getclick() >>>> scene.visible = False >>>> scene.visible = True >>>> >>>> >>>> ------------------------------------------------------------------------------ >>>> >>>> Check out the new SourceForge.net Marketplace. >>>> It is the best place to buy or sell services for >>>> just about anything Open Source. >>>> http://p.sf.net/sfu/Xq1LFB >>>> _______________________________________________ >>>> Visualpython-users mailing list >>>> Vis...@li... >>>> https://lists.sourceforge.net/lists/listinfo/visualpython-users >>> >> >> ------------------------------------------------------------------------------ >> >> Check out the new SourceForge.net Marketplace. >> It is the best place to buy or sell services for >> just about anything Open Source. >> http://p.sf.net/sfu/Xq1LFB >> _______________________________________________ >> Visualpython-users mailing list >> Vis...@li... >> https://lists.sourceforge.net/lists/listinfo/visualpython-users > > |
From: Stef M. <s.m...@ru...> - 2009-01-08 20:44:10
Attachments:
pw_application_vpython3_img25.png
|
hi Bruce, Bruce Sherwood wrote: > The only significant differences that I know of between Visual 3 and > Visual 5 are that the following have not (yet) been implemented in > Visual 5: scene.cursor.visible, and right-button and middle-button > mouse events. These are listed as known bugs in the statement of new > features in the documentation for Visual 5. you don't know yet, how good I am in finding bugs ;-) here is subtle one, (VP5, winXP-sp2) look very carefully at the picture, it contains 2 bugs. The bug appears depending on the ratio of hor/ver size of the frame, and moving either the height or width slightly, you can get to see other variations. cheers, Stef |
From: Stef M. <s.m...@ru...> - 2009-01-08 21:04:21
|
Bruce Sherwood wrote: > I've seen this label bug with font='serif' but not with the default > sans-serif font that it looks like you've used. Could you please post > the actual code you used to generate the picture? AFAIK, I didn't set the font, so where is the font coming from. Code below. > > I stand however by my previous statement that the only "significant > differences" are those listed. I agree it's not really significant. cheers, Stef > > Bruce Sherwood > #----------------------------------------------------- # Demo of a symmetric (I1=I2) gyroscope. It uses # numerical integration with a primitive mid point # solver of Euler's equations using the Euler angles # [phi,theta,psi] as variables. # # Left mouse toggles the display of the trail of the # orbit of the tip of the gyroscope. # # Right mouse toggles the display of the vectors L and # omega (angular momentum and velocity). # # Center mouse button (or left+right) zooms the view. # # ** To exit press ESC ** # # by E. Velasco. December 2004 #----------------------------------------------------- from visual import * # Initial conditions for the Euler angles phi = 0. phidot = -2.6 theta = pi/4 # Must satisfy 0<theta<pi thetadot = 1. psi = 0. psidot = 50. # Fast for the gyro to work # Constant definitions Ulenght = 1.0 # Unit of lenght in m Lshaft = 0.8 # length of gyroscope shaft Rshaft = 0.03 # radius of gyroscope shaft Hshaft = Lshaft/15. # height of cone tip of shaft Cshaft = (0,0.6,0.9) # Color of shaft Rrotor = 0.38 # radius of gyroscope rotor Drotor = 0.12 # thickness of gyroscope rotor Lcm = Lshaft/1.8+Hshaft # Distance of cm to fixed point Crotor = (0,0.5,0.8) # Color of rotor Cbraces = (1,0.1,0) # Color of braces of rotor hpedestal = Lshaft # height of pedestal wpedestal = 0.17 # Width of pedestal Cpedestal = (0.4,0.4,0.5) # Color of pedestal and base tbase = 0.05 # thickness of base wbase = 4.*wpedestal # width of base Lvector = 1.05*Lshaft +2*Hshaft CL = (1,0.4,1) # Color of angular momentum COmega = color.green # Color of angular velocity Ctrail = color.yellow # Color of the trail of the tip of gyro ShowVectors = 0 ShowTrail = False # Moments of inertia divided by mass (only from rotor) I1 = 0.25*(Rrotor**2+Drotor**2) + Lcm**2 I3 = 0.5*Rrotor**2 # Components of the angular velocity in the MOVING frame omega1 = phidot*sin(theta)*sin(psi)+thetadot*cos(psi) omega2 = phidot*sin(theta)*cos(psi)-thetadot*sin(psi) omega3 = phidot*cos(theta)+psidot # A constant of motion gL_I = 9.8*Lcm/(I1*Ulenght) Delta = (I3-I1)/I1*omega3 # Window properties. Define them before creating visual objects. #scene.width=700 #scene.height=600 #scene.fullscreen = 1 # Change it to 0 to get a floating window #scene.title='Gyroscope' scene.userspin = 0 # No rotation with mouse scene.forward = (-1,0,0) # View from the +x axis slightly down scene.up = (0,0,1) scene.range=(1.9*Lshaft,1.9*Lshaft,1.9*Lshaft) scene.ambient=0.3 scene.lights = [0.3*norm((1,-0.5,-0.2)),0.5*norm((1,0.5,0.2))] scene.autoscale = 0 label ( pos = ( 0, 0, 1.2 ), text = 'Left-Click: Toggle orbit of tip' ) label ( pos = ( 0, 0, 1.0 ), text = 'Right-Click: Toggle L and w' ) # A function that returns the three moving unit vectors def MovingFrame(phi,theta,psi): CosPhi = cos(phi); SinPhi = sin(phi) CosTheta = cos(theta); SinTheta = sin(theta) CosPsi = cos(psi); SinPsi = sin(psi) V1 = vector(CosPhi*CosPsi-CosTheta*SinPhi*SinPsi, SinPhi*CosPsi+CosTheta*CosPhi*SinPsi, SinTheta*SinPsi) V3 = vector(SinTheta*SinPhi,-SinTheta*CosPhi, CosTheta) V2 = cross(V3,V1) return (V1,V2,V3) # A function that returns an L in the y-z plane displaced by V def Char_L(V): sz = 0.017 # size of letter return [V+vector(0,-sz,3*sz),V+vector(0,-sz,0), V+vector(0,sz,0)] # Build a leter omega in the y-z plane sz_omega = 0.015 # size of letter Npts = 10 alpha0=2*pi/3 Dalpha = (2*pi-alpha0)/(Npts-1) l_omega = [] for k in range(Npts): alpha = alpha0+k*Dalpha l_omega.append(sz_omega*vector(0,cos(alpha)-1,1+sin(alpha))) for k in range(Npts): alpha = pi+k*Dalpha l_omega.append(sz_omega*vector(0,1+cos(alpha),1+sin(alpha))) letter_omega = array(l_omega) # Use a numeric array for efficiency # A function that returns a omega in the y-z plane displaced by V def Char_omega(V): char=array([V])+letter_omega # Fast numeric array addition return char # Get the vectors angular velocity and angular momentum in fixed frame (V1,V2,V3) = MovingFrame(phi,theta,psi) Omega = omega1*V1+omega2*V2+omega3*V3 L = I1*omega1*V1+I1*omega2*V2+I3*omega3*V3 OmegaScale = Lvector/mag(Omega) LScale = Lvector/mag(L) Omega_body = curve(pos=[(0,0,0),0.95*OmegaScale*Omega], color=COmega, radius=0.01, visible=ShowVectors) Omega_tip = cone(pos=0.95*OmegaScale*Omega, axis=0.05*OmegaScale*Omega, radius=0.02, color=COmega, visible=ShowVectors) Omega_label = curve(pos=Char_omega(1.05*OmegaScale*Omega), color=COmega, radius=0.005, visible=ShowVectors) L_body = curve(pos=[(0,0,0),0.95*LScale*L], color=CL, radius=0.01, visible=ShowVectors) L_tip = cone(pos=0.95*LScale*L, axis=0.05*LScale*L, radius=0.02, color=CL, visible=ShowVectors) L_label = curve(pos=Char_L(1.05*LScale*L), color=CL, radius=0.006, visible=ShowVectors) # Define the fixed support of the gyro support=frame() pedestal = pyramid(pos=(0,0,-hpedestal), axis = (0,0,hpedestal), size=(hpedestal,wpedestal,wpedestal), color=Cpedestal, frame=support) base = box(pos=(0,0,-hpedestal-tbase/2.), height=wbase, length=tbase, width=wbase, axis=(0,0,1), color=Cpedestal,frame=support) sphere(pos=(0,0,0), radius=0.01, color=Cshaft) # Articulation at the pivot # Bolts B1 = sphere(pos=(wbase/2.3,wbase/2.3,-hpedestal),radius=wbase*0.04, color=Cpedestal, frame=support) B2 = sphere(pos=(wbase/2.3,-wbase/2.3,-hpedestal),radius=wbase*0.04, color=Cpedestal, frame=support) B3 = sphere(pos=(-wbase/2.3,wbase/2.3,-hpedestal),radius=wbase*0.04, color=Cpedestal, frame=support) B4 = sphere(pos=(-wbase/2.3,-wbase/2.3,-hpedestal),radius=wbase*0.04, color=Cpedestal, frame=support) support.rotate(angle=pi/7, axis=(0,0,1)) # Define the gyro gyro=frame(visible=0) pivot = cone(pos=(0,0,Hshaft), axis=(0,0,-Hshaft), color=Cshaft, frame=gyro, radius=Rshaft) shaft = cylinder(axis=(0,0,Lshaft), pos=pivot.pos, radius=Rshaft, color=Cshaft, frame=gyro) tip = cone(pos= pivot.pos+shaft.axis, axis=(0,0,Hshaft), color=Cshaft, radius=Rshaft, frame=gyro) rotor = cylinder(pos=(0,0,Lcm - Drotor/2), radius=Rrotor, axis=(0,0,Drotor), color=Crotor, frame=gyro) # Braces of rotor cylinder(pos =(-Rrotor,0,Lcm - Drotor/3.), radius=Drotor/2, axis=(2*Rrotor,0,0), color=Cbraces, frame=gyro) cylinder(pos =(0,-Rrotor,Lcm - Drotor/3.), radius=Drotor/2, axis=(0,2*Rrotor,0), color=Cbraces, frame=gyro) cylinder(pos =(-Rrotor,0,Lcm + Drotor/3.), radius=Drotor/2, axis=(2*Rrotor,0,0), color=Cbraces, frame=gyro) cylinder(pos =(0,-Rrotor,Lcm + Drotor/3.), radius=Drotor/2, axis=(0,2*Rrotor,0), color=Cbraces, frame=gyro) ring(pos=(0,0,Lcm), radius=Rrotor, thickness=Drotor/2, axis=(0,0,1), color=Cbraces, frame=gyro) # Rotate gyro to its starting position # First rotate by phi around the z axis gyro.rotate(angle=phi, axis=(0,0,1)) # Use the new x axis (Vx) and rotate by theta Vx=(cos(phi),sin(phi),0) gyro.rotate(angle=theta, axis=Vx) # Use the final z axis (V3) and rotate by psi gyro.rotate(angle=psi, axis=V3) gyro.visible=1 # Make the gyro visible # Curve described by tip of gyro trail = curve(radius=0, color=Ctrail) dt = 0.0002 # Time step dt = 0.004 dt2 = dt/2 # Half time step # First rotate the gyro around current Omega by mag(Omega)*dt2 gyro.rotate(angle=mag(Omega)*dt2, axis=Omega) while 1: #rate(800) rate (50) # Find midtime variables CosPsi = cos(psi); SinPsi=sin(psi); SinTheta=sin(theta) phidot = (SinPsi*omega1+CosPsi*omega2)/SinTheta phi_m = phi + phidot*dt2 theta_m = theta + (CosPsi*omega1 - SinPsi*omega2)*dt2 psi_m = psi + (omega3-phidot*cos(theta))*dt2 omega1_m = omega1 +(gL_I*SinTheta*CosPsi-Delta*omega2)*dt2 omega2_m = omega2 -(gL_I*SinTheta*SinPsi-Delta*omega1)*dt2 # Get the full step variables CosPsi_m = cos(psi_m); SinPsi_m=sin(psi_m); SinTheta_m=sin(theta_m) phidot_m = (SinPsi_m*omega1_m+CosPsi_m*omega2_m)/SinTheta_m phi += phidot_m*dt theta += (CosPsi_m*omega1_m - SinPsi_m*omega2_m)*dt psi += (omega3 - phidot_m*cos(theta_m))*dt omega1 += (gL_I*SinTheta_m*CosPsi_m - Delta*omega2_m)*dt omega2 -= (gL_I*SinTheta_m*SinPsi_m - Delta*omega1_m)*dt # Get the vectors angular velocity and momentum in the fixed frame (V1,V2,V3) = MovingFrame(phi,theta,psi) Omega = omega1*V1+omega2*V2+omega3*V3 L = I1*omega1*V1+I1*omega2*V2+I3*omega3*V3 # Toggle Painting the trail and the L w vectors if scene.mouse.events: mouseObj = scene.mouse.getevent() scene.mouse.events = 0 if mouseObj.click == "left": # Toggle orbit of tip if ShowTrail == True: ShowTrail = False trail.pos=[] else: ShowTrail = True if mouseObj.click == "right": # Togle display of L and w ShowVectors = 1 - ShowVectors L_body.visible = L_tip.visible = ShowVectors L_label.visible = ShowVectors Omega_body.visible = Omega_tip.visible = ShowVectors Omega_label.visible = ShowVectors # Update the trail and the L w vectors L_body.pos = [(0,0,0),0.95*LScale*L] L_tip.pos=0.95*LScale*L; L_tip.axis=0.05*LScale*L L_label.pos=Char_L(1.05*LScale*L) Omega_body.pos = [(0,0,0),0.95*OmegaScale*Omega] Omega_tip.pos=0.95*OmegaScale*Omega; Omega_tip.axis=0.05*OmegaScale*Omega Omega_label.pos=Char_omega(1.05*OmegaScale*Omega) if ShowTrail == True: trail.append(pos=V3*(Lshaft+2*Hshaft)) # Rotate the gyro around new Omega by mag(Omega)*dt gyro.rotate(angle=mag(Omega)*dt, axis=Omega) |