|
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)
|