Исходный файл(SVG-файл, номинально 303 × 147 пкс, размер файла: 21 КБ)

Краткое описание

Описание
English: A diagram illustrating the derivation of Newton's shell theorem. Shown is a thin shell with a test mass outside the shell ().
Дата
Источник Собственная работа
Автор Xaonon

Лицензирование

Я, владелец авторских прав на это произведение, добровольно публикую его на условиях следующей лицензии:
w:ru:Creative Commons
атрибуция распространение на тех же условиях
Этот файл доступен по лицензии Creative Commons Attribution-Share Alike 4.0 International
Вы можете свободно:
  • делиться произведением – копировать, распространять и передавать данное произведение
  • создавать производные – переделывать данное произведение
При соблюдении следующих условий:
  • атрибуция – Вы должны указать авторство, предоставить ссылку на лицензию и указать, внёс ли автор какие-либо изменения. Это можно сделать любым разумным способом, но не создавая впечатление, что лицензиат поддерживает вас или использование вами данного произведения.
  • распространение на тех же условиях – Если вы изменяете, преобразуете или создаёте иное произведение на основе данного, то обязаны использовать лицензию исходного произведения или лицензию, совместимую с исходной.

Source

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:
%   mpost --mem=metafun.mem -s 'outputformat="svg"' -s prologues=3 shell-diag.mp

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 );
  setbounds currentpicture to boundingbox currentpicture enlarged 1pt;
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 );
  setbounds currentpicture to boundingbox currentpicture enlarged 1pt;
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 );
  setbounds currentpicture to boundingbox currentpicture enlarged 1pt;
endfig;

% Solid sphere
beginfig(4)
  numeric Ra, Rb, r;
  Ra = 0;
  Rb = 1.3 in;
  r = 1 in;

  draw_thickshell( Ra, Rb, r );
  setbounds currentpicture to boundingbox currentpicture enlarged 1pt;
endfig;

end

Краткие подписи

Добавьте однострочное описание того, что собой представляет этот файл

Элементы, изображённые на этом файле

изображённый объект

У этого свойства есть некоторое значение без элемента в

История файла

Нажмите на дату/время, чтобы посмотреть файл, который был загружен в тот момент.

Дата/времяМиниатюраРазмерыУчастникПримечание
текущий00:55, 26 февраля 2017Миниатюра для версии от 00:55, 26 февраля 2017303 × 147 (21 КБ)Xaonontweak bounding box
00:10, 26 февраля 2017Миниатюра для версии от 00:10, 26 февраля 2017301 × 145 (21 КБ)XaononUser created page with UploadWizard

Следующая страница использует этот файл:

Глобальное использование файла

Данный файл используется в следующих вики:

Метаданные