File:Shell-diag-1.svg è una versione vettoriale di questo file. Dovrebbe essere usata quella versione al posto di questo file PNG, quando sia migliore.
di condividere – di copiare, distribuire e trasmettere quest'opera
di modificare – di adattare l'opera
Alle seguenti condizioni:
attribuzione – Devi fornire i crediti appropriati, un collegamento alla licenza e indicare se sono state apportate modifiche. Puoi farlo in qualsiasi modo ragionevole, ma non in alcun modo che suggerisca che il licenziante approvi te o il tuo uso.
condividi allo stesso modo – Se remixi, trasformi o sviluppi il materiale, devi distribuire i tuoi contributi in base alla stessa licenza o compatibile all'originale.
This image and the others in the same series (2, 3, 4) were generated from the MetaPost code presented below. The code is released under the same license as the images themselves.
% shell-diag.mp
% A diagram illustrating the derivation of Newton's shell theorem. To be
% processed with MetaPost.
color bandshade, fillshade;
bandshade = 0.7 [blue, white];
fillshade = 0.9 white;
numeric dotsize, deg;
dotsize = 5 bp;
deg = length( fullcircle )/360;
freelabeloffset := 3/4 freelabeloffset;
labeloffset := 2 labeloffset;
def dot( expr P ) =
fill fullcircle scaled dotsize shifted P withcolor black;
enddef;
def draw_circle( expr R, stroke ) =
save p;
pen p;
p = currentpen;
pickup p scaled stroke;
draw fullcircle scaled 2R;
pickup p;
enddef;
vardef anglebetween( expr a, b, rad, str ) =
save endofa, endofb, common, curve, where;
pair endofa, endofb, common;
path curve;
numeric where;
endofa = point length( a ) of a;
endofb = point length( b ) of b;
if round point 0 of a = round point 0 of b:
common = point 0 of a;
else:
common = a intersectionpoint b;
fi;
where = turningnumber( common--endofa--endofb--cycle );
curve = (unitvector( endofa - common ){(endofa - common) rotated (90 * where)} ..
unitvector( endofb - common )) scaled rad shifted common;
draw thefreelabel( str, point 1/2 of curve, common ) withcolor black;
curve
enddef;
def draw_angle( expr a, b, rad, str ) =
begingroup
save p;
pen p;
p = currentpen;
pickup p scaled 1/2;
draw anglebetween( a, b, rad, str );
pickup p;
endgroup
enddef;
def label_line( expr a, b, disp, str ) =
begingroup
save mid, opp;
pair mid, opp;
mid = 1/2 [a, b];
opp = -disp rotated (angle( b - a ) - 90) shifted mid;
draw thefreelabel( str, mid, opp );
draw a -- b;
endgroup
enddef;
def draw_thinshell( expr R, r, theta, dtheta, thetarad, phirad ) =
begingroup
save M, m;
pair M, m;
M = (0, 0);
m = (r, 0);
save circ;
path circ;
circ = fullcircle scaled 2R;
save thetapt, dthetapt;
pair thetapt, dthetapt;
thetapt = point (theta * deg) of circ;
dthetapt = point ((theta + dtheta) * deg) of circ;
save upper, lower, band;
path upper, lower, band;
upper = subpath (0, 4) of circ;
lower = subpath (4, 8) of circ;
band = buildcycle( upper, (xpart thetapt, R) -- (xpart thetapt, -R),
lower, (xpart dthetapt, R) -- (xpart dthetapt, -R) );
% draw figures
save p;
pen p;
p = currentpen;
pickup p scaled 1/2;
fill band withcolor bandshade;
draw band;
pickup p;
save near, far;
pair near, far;
if theta < 90:
near = 3/4[ulcorner band, llcorner band];
far = right shifted near;
else:
near = 3/4[urcorner band, lrcorner band];
far = left shifted near;
fi;
draw thefreelabel( btex $dM$ etex, near, far );
dot( M );
%label.llft( btex $M$ etex, M );
dot( m );
label.lrt( btex $m$ etex, m );
draw M -- thetapt;
label_line( M, m, right, btex $r$ etex );
label_line( m, thetapt, right, btex $s$ etex );
if R <> r:
label_line( M, dthetapt, left, btex $R$ etex );
else:
draw M -- dthetapt;
fi;
draw_angle( m -- M, m -- thetapt, phirad, btex $\phi$ etex );
draw_angle( M -- m, M -- thetapt, thetarad, btex $\theta$ etex );
draw_angle( M -- thetapt, M -- dthetapt, R, btex $d\theta$ etex );
endgroup
enddef;
def draw_thickshell( expr Ra, Rb, r ) =
begingroup
save m;
pair m;
m = (r, 0);
fill fullcircle scaled 2Rb withcolor fillshade;
fill fullcircle scaled 2r withcolor bandshade;
unfill fullcircle scaled 2Ra;
dot( origin );
dot( m );
label.lrt( btex $m$ etex, m );
label_line( origin, m, right, btex $r$ etex );
draw_circle( Rb, 2 );
if Ra > 0:
draw_circle( Ra, 2 );
label_line( origin, dir( 100 ) scaled Rb, left, btex $R_b$ etex );
label_line( origin, dir( 80 ) scaled Ra, right, btex $R_a$ etex );
else:
label_line( origin, dir( 90 ) scaled Rb, left, btex $R_b$ etex );
fi;
endgroup
enddef;
% Thin shell, r > R
beginfig(1)
numeric R;
R = 1 in;
draw_thinshell( R, 3R, 50, 15, 1/4 in, 3/4 in );
draw_circle( R, 2 );
endfig;
% Thin shell, r < R
beginfig(2)
numeric R;
R = 1 in;
draw_thinshell( R, 0.7R, 125, 15, 1/8 in, 1/3 in );
draw_circle( R, 2 );
endfig;
% Thick shell
beginfig(3)
numeric Ra, Rb, r;
Ra = 0.8 in;
Rb = 1.3 in;
r = 1 in;
draw_thickshell( Ra, Rb, r );
endfig;
% Solid sphere
beginfig(4)
numeric Ra, Rb, r;
Ra = 0;
Rb = 1.3 in;
r = 1 in;
draw_thickshell( Ra, Rb, r );
endfig;
end
Didascalie
Aggiungi una brevissima spiegazione di ciò che questo file rappresenta
== Summary == {{Information |Description = A diagram illustrating the derivation of Newton's shell theorem. Shown is a thin shell with a test mass outside the shell (<math>r > R</math>). Created with w:MetaPost. |Source = Own work. |Date = 2006-09-2
{{Information |Description = A diagram illustrating the derivation of Newton's shell theorem. Shown is a thin shell with a test mass outside the shell (<math>r > R</math>). Created with w:MetaPost. |Source = Own work. |Date = 2006-09-29 |Author = [[