Created
February 13, 2026 10:04
-
-
Save santhoshtr/07ff58268b3c52bec56564585b8f682a to your computer and use it in GitHub Desktop.
Untitled Metapost Sample #metapost-sandbox
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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