Skip to content

Instantly share code, notes, and snippets.

@santhoshtr
Created February 13, 2026 10:04
Show Gist options
  • Select an option

  • Save santhoshtr/07ff58268b3c52bec56564585b8f682a to your computer and use it in GitHub Desktop.

Select an option

Save santhoshtr/07ff58268b3c52bec56564585b8f682a to your computer and use it in GitHub Desktop.
Untitled Metapost Sample #metapost-sandbox
prologues := 3;
outputtemplate := "%j-%c.mps";
beginfig(1);
% =============== ПЕРВЫЙ ГРАФИК (слева) ===============
% Масштаб и размеры
u := 1.5cm;
% Сдвиг для размещения графиков рядом
pair shift_left; shift_left := (0,0);
% Рисуем оси первого графика
draw shift_left + (-4u,0) -- shift_left + (7u,0) withpen pencircle scaled 1pt; % ось X
draw shift_left + (0,-3u) -- shift_left + (0,3u) withpen pencircle scaled 1pt; % ось Y
% Подписи осей первого графика
label.rt("x", shift_left + (7u,0));
label.top("y", shift_left + (0,3u));
% Ключевые точки первого графика
numeric pi; pi := 3.1415926;
numeric xorigin; xorigin := 0.4*pi; % точка x₀ чуть раньше pi/2
% Вертикальные линии через точки первого графика
draw shift_left + (-pi*u, -3u) -- shift_left + (-pi*u, 3u) dashed evenly; % -π
draw shift_left + (0, -3u) -- shift_left + (0, 3u) dashed evenly; % 0 (z)
draw shift_left + (xorigin*u, -3u) -- shift_left + (xorigin*u, 3u) dashed evenly; % x₀
draw shift_left + (pi/2*u, -3u) -- shift_left + (pi/2*u, 3u) dashed withdots scaled 0.5; % π/2
draw shift_left + (pi*u, -3u) -- shift_left + (pi*u, 3u) dashed evenly; % π
draw shift_left + (2pi*u, -3u) -- shift_left + (2pi*u, 3u) dashed evenly; % 2π
% ВЫКОЛОТЫЕ ТОЧКИ первого графика
draw fullcircle scaled (0.2u) shifted (shift_left + (-pi*u, 0)); % -π
draw fullcircle scaled (0.2u) shifted (shift_left + (0, 0)); % 0 (z)
draw fullcircle scaled (0.2u) shifted (shift_left + (xorigin*u, 0)); % x₀
draw fullcircle scaled (0.2u) shifted (shift_left + (pi/2*u, 0)); % π/2
draw fullcircle scaled (0.2u) shifted (shift_left + (pi*u, 0)); % π
draw fullcircle scaled (0.2u) shifted (shift_left + (2pi*u, 0)); % 2π
% Подписи точек первого графика
label.bot("$-\pi$", shift_left + (-pi*u,-0.3u));
label.bot("0", shift_left + (0,-0.3u));
label.bot("$x_0$", shift_left + (xorigin*u,-0.3u));
label.bot("$\pi/2$", shift_left + (pi/2*u,-0.3u));
label.bot("$\pi$", shift_left + (pi*u,-0.3u));
label.bot("$2\pi$", shift_left + (2pi*u,-0.3u));
% РИМСКИЕ ЦИФРЫ первого графика
label("I", shift_left + (3u, 2u)); % первая четверть
label("II", shift_left + (-1u, 2u)); % вторая четверть
label("III", shift_left + (-1u, -2u)); % третья четверть
label("IV", shift_left + (3u, -2u)); % четвёртая четверть
% =============== ВТОРОЙ ГРАФИК (справа) ===============
% Сдвиг вправо для второго графика
pair shift_right; shift_right := (12u, 0);
% Масштаб для второго графика
v := 1.5cm; % такой же масштаб
% Рисуем оси второго графика
draw shift_right + (-2v,0) -- shift_right + (2v,0) withpen pencircle scaled 1pt; % ось u
draw shift_right + (0,-3v) -- shift_right + (0,3v) withpen pencircle scaled 1pt; % ось v
% Подписи осей второго графика
label.rt("u", shift_right + (2v,0));
label.top("v", shift_right + (0,3v));
% Ключевые точки второго графика
numeric uzero; uzero := 0.7; % точка u₀ чуть раньше 1
% Горизонтальные линии через ключевые точки на оси v
draw shift_right + (-2v, 0) -- shift_right + (2v, 0) dashed evenly; % w=0 (ось u)
draw shift_right + (-2v, v) -- shift_right + (2v, v) dashed evenly; % v=1
draw shift_right + (-2v, -v) -- shift_right + (2v, -v) dashed evenly; % v=-1
% ВЫКОЛОТЫЕ ТОЧКИ второго графика на оси v
draw fullcircle scaled (0.2v) shifted (shift_right + (0, 0)); % w=0
draw fullcircle scaled (0.2v) shifted (shift_right + (0, v)); % v=1
draw fullcircle scaled (0.2v) shifted (shift_right + (0, -v)); % v=-1
% Подписи точек второго графика
label.lft("$w=0$", shift_right + (-2.2v, 0));
label.lft("1", shift_right + (-2.2v, v));
label.lft("-1", shift_right + (-2.2v, -v));
% ПАРАБОЛА, ИДУЩАЯ ВПРАВО в точке u₀ (ограниченная v=1 и v=-1)
% Уравнение: u = uzero + a*(v)² (парабола, открытая вправо)
path parabola;
numeric a; a := 0.1; % коэффициент, определяющий ширину параболы
% Ограничиваем параболу в пределах v от -1 до 1
parabola := (shift_right + (uzero*v, -v))
for t = -1 step 0.05 until 1:
.. (shift_right + (uzero*v + a*(t*v)**2, t*v))
endfor;
% Рисуем параболу
draw parabola withpen pencircle scaled 0.8pt;
% Отмечаем точку u₀ на оси u
draw fullcircle scaled (0.2v) shifted (shift_right + (uzero*v, 0)); % точка u₀
label.bot("$u_0$", shift_right + (uzero*v, -0.3v));
endfig;
end.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment