<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/css" href="http://wiki2.linuxformat.ru/skins/common/feed.css?97"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://wiki2.linuxformat.ru/index.php?action=history&amp;feed=atom&amp;title=LXF77%3AMetaPost</id>
		<title>LXF77:MetaPost - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://wiki2.linuxformat.ru/index.php?action=history&amp;feed=atom&amp;title=LXF77%3AMetaPost"/>
		<link rel="alternate" type="text/html" href="http://wiki2.linuxformat.ru/index.php?title=LXF77:MetaPost&amp;action=history"/>
		<updated>2026-05-13T23:42:19Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.11.1</generator>

	<entry>
		<id>http://wiki2.linuxformat.ru/index.php?title=LXF77:MetaPost&amp;diff=4640&amp;oldid=prev</id>
		<title>Lockal: {{Цикл/MetaPost}}</title>
		<link rel="alternate" type="text/html" href="http://wiki2.linuxformat.ru/index.php?title=LXF77:MetaPost&amp;diff=4640&amp;oldid=prev"/>
				<updated>2008-05-16T19:14:41Z</updated>
		
		<summary type="html">&lt;p&gt;{{Цикл/MetaPost}}&lt;/p&gt;

			&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;tr&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Версия 19:14, 16 мая 2008&lt;/td&gt;
			&lt;/tr&gt;
		&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;{{Цикл/MetaPost}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;== MetaPost Базовые элементы ==&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;== MetaPost Базовые элементы ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;''Определённо всё из чего-то состоит. Элементарные кирпичики – вот что интересно. '''Евгений Балдин''' продолжает уроки рисования.''&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;''Определённо всё из чего-то состоит. Элементарные кирпичики – вот что интересно. '''Евгений Балдин''' продолжает уроки рисования.''&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Lockal</name></author>	</entry>

	<entry>
		<id>http://wiki2.linuxformat.ru/index.php?title=LXF77:MetaPost&amp;diff=4635&amp;oldid=prev</id>
		<title>Yaleks: /* Рисуем по точкам */</title>
		<link rel="alternate" type="text/html" href="http://wiki2.linuxformat.ru/index.php?title=LXF77:MetaPost&amp;diff=4635&amp;oldid=prev"/>
				<updated>2008-05-16T15:37:43Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Рисуем по точкам&lt;/span&gt;&lt;/p&gt;

			&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;tr&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Версия 15:37, 16 мая 2008&lt;/td&gt;
			&lt;/tr&gt;
		&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 63:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 63:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;для составления какого-либо узора:&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;для составления какого-либо узора:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;[[Изображение:Img 77 97 1.png|Img 77 97 1.png]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Обратите внимание, что почти все числовые значения представляют&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Обратите внимание, что почти все числовые значения представляют&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 74:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 74:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;гвоздями». В данном случае наличие параметра позволяет легко изменить масштаб рисунка:&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;гвоздями». В данном случае наличие параметра позволяет легко изменить масштаб рисунка:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;[[Изображение:Img 77 97 2.png|Img 77 97 2.png]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Очевидно, что в предложенном решении одного параметра мало,&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Очевидно, что в предложенном решении одного параметра мало,&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Yaleks</name></author>	</entry>

	<entry>
		<id>http://wiki2.linuxformat.ru/index.php?title=LXF77:MetaPost&amp;diff=4631&amp;oldid=prev</id>
		<title>Yaleks: Новая: == MetaPost Базовые элементы == ''Определённо всё из чего-то состоит. Элементарные кирпичики – вот что интер...</title>
		<link rel="alternate" type="text/html" href="http://wiki2.linuxformat.ru/index.php?title=LXF77:MetaPost&amp;diff=4631&amp;oldid=prev"/>
				<updated>2008-05-16T12:26:20Z</updated>
		
		<summary type="html">&lt;p&gt;Новая: == MetaPost Базовые элементы == ''Определённо всё из чего-то состоит. Элементарные кирпичики – вот что интер...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая статья&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== MetaPost Базовые элементы ==&lt;br /&gt;
''Определённо всё из чего-то состоит. Элементарные кирпичики – вот что интересно. '''Евгений Балдин''' продолжает уроки рисования.''&lt;br /&gt;
&lt;br /&gt;
Объяснять компьютеру что Вы хотите сделать гораздо сложнее, чем нарисовать самому. Компьютеру надо объяснять&lt;br /&gt;
абсолютно всё – телепатические способности у машин на&lt;br /&gt;
текущий момент отсутствуют. Но, объяснив один раз, все похожие действия выполняются путём небольшой модификации уже готовых инструкций. В результате, потраченное на объяснение время себя полностью&lt;br /&gt;
оправдывает, правда, при этом требуются дополнительные «мозговые&lt;br /&gt;
усилия».&lt;br /&gt;
&lt;br /&gt;
=== Рисуем по точкам ===&lt;br /&gt;
Первое, что надо сделать перед созданием нового рисунка, это сделать&lt;br /&gt;
его набросок на миллиметровке. Допустим, необходимо нарисовать&lt;br /&gt;
черепашку:&lt;br /&gt;
&lt;br /&gt;
[[Изображение:Img 77 96 1.png|Img 77 96 1.png]]&lt;br /&gt;
&lt;br /&gt;
Делаем это, как можем, а затем очень подробно объясняем компьютеру, что мы хотим от него. Инструкции очень простые:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;latex&amp;quot;&amp;gt;&lt;br /&gt;
%Файл coord.mp&lt;br /&gt;
%Черепашка&lt;br /&gt;
beginfig(1) ;&lt;br /&gt;
numeric u;u:=5mm;&lt;br /&gt;
draw (-5u,0u){dir 90}..{dir 0}(0,3.5u){dir0}..&lt;br /&gt;
{dir -90}(5u,0){dir -90}..{dir 180}(0u,-3.5u){dir 180}..&lt;br /&gt;
{dir 90}cycle withpen pencircle scaled 0.4u;&lt;br /&gt;
draw (4.5u,1.5u)..(7u,1.5u)..(8u,0u)..(7u,-1.5u)..&lt;br /&gt;
(4.5u,-1.5u) withpen pencircle scaled 0.4u;&lt;br /&gt;
draw (6.5u,.5u) withpen pencircle scaled 0.8u;&lt;br /&gt;
draw (6.5u,-.5u) withpen pencircle scaled 0.8u;&lt;br /&gt;
draw (-3.5u,-2.5u)..(-4.2u,-4.5u)..(-3.7u,-5u)..&lt;br /&gt;
(-2.4u,-4u)..(-2u,-3.5u) withpen pencircle scaled 0.4u;&lt;br /&gt;
draw (-3.5u,2.5u)..(-4.2u,4.5u)..(-3.7u,5u)..(-2.4u,4u)..&lt;br /&gt;
(-2u,3.5u) withpen pencircle scaled 0.4u;&lt;br /&gt;
draw (3.5u,-2.5u)..(4.2u,-4.5u)..(3.7u,-5u)..(2.4u,-4u)..&lt;br /&gt;
(2u,-3.5u) withpen pencircle scaled 0.4u;&lt;br /&gt;
draw (3.5u,2.5u)..(4.2u,4.5u)..(3.7u,5u)..(2.4u,4u)..&lt;br /&gt;
(2u,3.5u) withpen pencircle scaled 0.4u;&lt;br /&gt;
draw (-5u,0.5u)--(-6.5u,0)--(-5u,-0.5u)&lt;br /&gt;
withpen pencircle scaled 0.4u;&lt;br /&gt;
draw (0u,2.5u)..(0,0u)..(0u,-2.5u)&lt;br /&gt;
withpen pencircle scaled 0.3u;&lt;br /&gt;
draw (-2.4u,2.4u)..(-2u,0u)..(-2.4u,-2.4u)&lt;br /&gt;
withpen pencircle scaled 0.3u;&lt;br /&gt;
draw (2.4u,2.4u)..(2u,0u)..(2.4u,-2.4u)&lt;br /&gt;
withpen pencircle scaled 0.3u;&lt;br /&gt;
draw (-3u,1.5u)..(0,1u)..(3u,1.5u)&lt;br /&gt;
withpen pencircle scaled 0.3u;&lt;br /&gt;
draw (-3u,-1.5u)..(0,-1u)..(3u,-1.5u)&lt;br /&gt;
withpen pencircle scaled 0.3u;&lt;br /&gt;
endfig ;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Рисуем по точкам, используя команду draw. Каждая точка задаётся&lt;br /&gt;
парой чисел «(x,y)» – x и y координаты соответственно. Точки соединяются либо прямыми линиями «--», либо кривыми «..». Кривые, соединяющие точки описываются полиномом Бернштейна третьей степени&lt;br /&gt;
(Сергей Николаевич Бернштейн 1912). Часто их называют кубическими&lt;br /&gt;
кривыми Безье (Piere Bezier 1960).&lt;br /&gt;
&lt;br /&gt;
Компьютер обязательно должен знать каким пером (withpen&lt;br /&gt;
pencircle) и какой толщины (scaled 0.3u) рисуется текущая линия.&lt;br /&gt;
Такие объяснения могут показаться избыточными, но всегда можно скопировать предыдущую инструкцию и поправить её под свои нужды, а&lt;br /&gt;
многословность облегчает чтение кода.&lt;br /&gt;
&lt;br /&gt;
Далее этот рисунок можно использовать многократно, например,&lt;br /&gt;
для составления какого-либо узора:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Обратите внимание, что почти все числовые значения представляют&lt;br /&gt;
из себя коэффициент умноженный на параметр, например, «2.4u».&lt;br /&gt;
Параметру «u» можно присвоить числовое значение в миллиметрах&lt;br /&gt;
(параметр «mm»). Есть несколько определённых по умолчанию значений длины, например, «cm» соответствует сантиметру.&lt;br /&gt;
&lt;br /&gt;
При программировании на Meta по мере возможности используйте&lt;br /&gt;
параметрические зависимости. Нет необходимости «прибивать что-то&lt;br /&gt;
гвоздями». В данном случае наличие параметра позволяет легко изменить масштаб рисунка:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Очевидно, что в предложенном решении одного параметра мало,&lt;br /&gt;
так как «u» контролирует не только геометрические размеры, но и размеры пера.&lt;br /&gt;
Точки, также можно представить как переменные, имеющие тип pair:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;latex&amp;quot;&amp;gt;&lt;br /&gt;
numeric u;&lt;br /&gt;
u:=0.5mm;&lt;br /&gt;
pair A,B;&lt;br /&gt;
A:=(1u,2u);B=(5u,10u);&lt;br /&gt;
draw A--B withpen pencircle scaled 0.3u;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Следует обратить внимание, что знак присвоения «:=» в случае&lt;br /&gt;
переменной A и знак равенства в случае переменной B здесь действует&lt;br /&gt;
одинаково. Отличия возникают, когда используется уникальная способность Meta воспринимать и решать систему линейных уравнений. В&lt;br /&gt;
дальнейшем в объяснениях буквы A и B будут использоваться как переменные типа точка.&lt;br /&gt;
&lt;br /&gt;
Meta позволяет создавать свои типы перьев, но для рисования простых рисунков использовать что-то отличное от круглого пера (pencircle)&lt;br /&gt;
нет особой необходимости. Если вам хочется расширить ваши познания&lt;br /&gt;
в этой области, то обратитесь к любому руководству по MetaFont или&lt;br /&gt;
MetaPost. Нет необходимости каждый раз указывать каким пером следует рисовать. Достаточно выбрать какое-либо перо по умолчанию с&lt;br /&gt;
помощью команды pickup, например, так:&lt;br /&gt;
 pickup pencircle scaled 0.2u;&lt;br /&gt;
&lt;br /&gt;
=== Пути ===&lt;br /&gt;
[[Изображение:Img 77 97 3.png|right|frame]]&lt;br /&gt;
Инструкции draw позволяет рисовать сплошную линию.&lt;br /&gt;
На её основе в MetaPost создана команда для рисования стрелки drawarrow. Воспользуемся&lt;br /&gt;
ей для изображения суммы векторов&lt;br /&gt;
(рис. справа)&lt;br /&gt;
&lt;br /&gt;
Кроме непосредственно команды&lt;br /&gt;
draw, в этом рисунке необходимо&lt;br /&gt;
использовать команду для вставки&lt;br /&gt;
текстовых меток label, которая&lt;br /&gt;
будет подробно разобрана&lt;br /&gt;
позже:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;latex&amp;quot;&amp;gt;&lt;br /&gt;
%Файл path.mp&lt;br /&gt;
%Закон Ньютона - векторная сумма сил&lt;br /&gt;
beginfig(1);&lt;br /&gt;
numeric u;&lt;br /&gt;
u := 1mm;&lt;br /&gt;
drawarrow (0,0)--(20u,30u) withpen pencircle scaled 0.3u;&lt;br /&gt;
label.ulft(btex \(\vec{F}_1\) etex,1/2[(0,0),(20u,30u)]);&lt;br /&gt;
drawarrow (20u,30u)--(40u,30u) withpen pencircle scaled 0.3u;&lt;br /&gt;
label.top(btex \(\vec{F}_2\) etex,1/2[(20u,30u),(40u,30u)]);&lt;br /&gt;
drawarrow (40u,30u)--(50u,10u) withpen pencircle scaled 0.3u;&lt;br /&gt;
label.urt(btex \(\vec{F}_3\) etex,1/2[(40u,30u),(50u,10u)]);&lt;br /&gt;
drawarrow (50u,10u)--(35u,15u) withpen pencircle scaled 0.3u;&lt;br /&gt;
label.llft(btex \(\vec{F}_4\) etex,1/2[(50u,10u),(35u,15u)]);&lt;br /&gt;
drawarrow (0u,0u)--(35u,15u) withpen pencircle scaled 0.8u;&lt;br /&gt;
drawarrow (0u,0u)--(35u,15u) withpen pencircle scaled 0.3u&lt;br /&gt;
withcolor white;&lt;br /&gt;
draw (0u,0u) withpen pencircle scaled 2u ;&lt;br /&gt;
label.bot(btex \(\vec{F}_1+\vec{F}_2+\vec{F}_3+\vec{F}_4\) etex,&lt;br /&gt;
1/2[(35u,15u),(0u,0u)]) rotatedaround&lt;br /&gt;
(1/2[(35u,15u),(0u,0u)],angle(35,15));&lt;br /&gt;
endfig;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Конструкция вида «1/2[A,B]» имеет тип pair и равна точке, расположенной ровно по середине между точками A и B. Точно так же можно&lt;br /&gt;
выбрать точку на линии AB, но делящую эту линию в отношении 1 к 2:&lt;br /&gt;
«1/3[A,B]», или 1 к 4: «0.2[A,B]»&lt;br /&gt;
&lt;br /&gt;
Кроме drawarrow в MetaPost определена команда drawdblarrow,&lt;br /&gt;
которая рисует кончик стрелки на обоих концах пути.&lt;br /&gt;
&lt;br /&gt;
Команды, типа draw, работают с объектами path (путь). Путь – это&lt;br /&gt;
набор из точек (тип pair) с описанием того, как эти точки соединяются&lt;br /&gt;
друг с другом. Минимальный путь – это одна точка. При рисовании такого пути на рисунке остаётся отпечаток в форме пера. Во всех приведённых здесь примерах перо имеет круглую форму pencircle, поэтому в&lt;br /&gt;
этом случае возникает просто точка. Часто бывает удобно создать переменную типа path:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;latex&amp;quot;&amp;gt;&lt;br /&gt;
%Файл path.mp&lt;br /&gt;
%Рис к 1.6.8 б) нить пропущенная через изогнутую трубу&lt;br /&gt;
beginfig(2) ;&lt;br /&gt;
numeric u;&lt;br /&gt;
u = 0.8mm;&lt;br /&gt;
path p;&lt;br /&gt;
p:=(5u,0u)--(20u,0u){dir 0}..(20u,20u)..&lt;br /&gt;
{dir 0}(20u,0u)--(35u,0u);&lt;br /&gt;
cutdraw p withpen pencircle scaled 1.5u;&lt;br /&gt;
draw p withpen pencircle scaled 1u withcolor white;&lt;br /&gt;
draw p withpen pencircle scaled 0.3u&lt;br /&gt;
dashed evenly scaled 1/2u;&lt;br /&gt;
drawarrow (-10u,0u)--(0u,0u)&lt;br /&gt;
withpen pencircle scaled 0.3u;&lt;br /&gt;
draw (-10u,0u) withpen pencircle scaled 1u;&lt;br /&gt;
draw (-10u,0u)--(5u,0u) withpen pencircle scaled 0.3u;&lt;br /&gt;
drawarrow (30u,10u)--(50u,10u)&lt;br /&gt;
withpen pencircle scaled 0.3u;&lt;br /&gt;
draw (30u,10u) withpen pencircle scaled 1u;&lt;br /&gt;
draw (35u,0u)--(45u,0u) withpen pencircle scaled 0.3u;&lt;br /&gt;
label.top(btex \(\vec{v}\) etex,(-5u,0u));&lt;br /&gt;
label.top(btex \(2\vec{v}\) etex,(40u,10u));&lt;br /&gt;
endfig;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
В данном примере требовалось изобразить трубу изогнутую буквой&lt;br /&gt;
«О», сквозь которую продета нить. Для этого определяем путь «p».&lt;br /&gt;
Затем этот путь используется в трёх командах как переменная: рисуется&lt;br /&gt;
толстая чёрная труба шириной «1.5u», внутри неё рисуется более тонкая шириной «1u» белого цвета (withcolor white) – получается полая&lt;br /&gt;
труба, а затем внутри трубы отрисовывается нить, причём нить рисуется&lt;br /&gt;
пунктиром (dashed evenly).&lt;br /&gt;
&lt;br /&gt;
[[Изображение:Img 77 98 1.png|Img 77 98 1.png]]&lt;br /&gt;
&lt;br /&gt;
Первый и последний участок изогнутой трубы прямые линии, поэтому соединение с первой и последней точкой описывается как «--».&lt;br /&gt;
Чтобы нарисовать кривую, похожую на круг, достаточно двух точек:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;latex&amp;quot;&amp;gt;&lt;br /&gt;
numeric u,R; u=1mm;R=10u;&lt;br /&gt;
pair A,B; A:=(-R,0);B:=(0,R);&lt;br /&gt;
path P; P:=A..B..cycle;&lt;br /&gt;
draw P withpen pencircle 1u;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
В этом примере определяются две точки A и B. Путь P строится по&lt;br /&gt;
этим точкам, при этом выходя из точки A, мы попадаем в точку B, а&lt;br /&gt;
затем снова в точку A: команда cycle позволяет создавать замкнутую&lt;br /&gt;
кривую. Настройки Meta по умолчанию таковы, что получившаяся кривая достаточно хорошо совпадает с точной окружностью. Чтобы лучше&lt;br /&gt;
совпадать с окружностью нужно больше «опорных» точек. Для обычных&lt;br /&gt;
рисунков хватает точности построения по двум точкам, но всё-таки надо&lt;br /&gt;
осознавать, что отличие есть.&lt;br /&gt;
&lt;br /&gt;
Для уточнения пути в некоторых точках можно указать под каким&lt;br /&gt;
углом должна подходить кривая к этой точке. Инструкция вида «dir »&lt;br /&gt;
если она находится перед точкой, указывает под каким углом кривая&lt;br /&gt;
должна подходить, а после точки – под каким углом кривая должна уходить. – угол в градусах от оси абсцисс.&lt;br /&gt;
&lt;br /&gt;
Для указания направления можно так же воспользоваться сокращениями left, right, up и down, которые означают, соответственно, влево,&lt;br /&gt;
вправо, вверх и вниз.&lt;br /&gt;
&lt;br /&gt;
Существует несколько типов соединений между точками. Два из них&lt;br /&gt;
«..» и «--» мы уже изучили. Из других типов полезен тип «&amp;amp;» – «сращивание» (объединение двух путей без влияния друг на друга) и «---» –&lt;br /&gt;
«натянутая» линия (то же, что и «--», но влияет на соседние соединительные участки).&lt;br /&gt;
&lt;br /&gt;
Обратите внимания на команду cutdraw. Так как MetaPost рисует с&lt;br /&gt;
помощью перьев, то в случае круглого пера (pencircle), концы линий&lt;br /&gt;
также округлые. В случае, когда необходимо «обрубить» концы, избавиться от округлостей на концах линий, и используется эта инструкция.&lt;br /&gt;
Следует отметить, что эта команда «подчистки» концов использует другую более общую команду&lt;br /&gt;
 cutoff(«точка»,«угол»);&lt;br /&gt;
&lt;br /&gt;
=== Вставка текста ===&lt;br /&gt;
MetaFont был создан как специализированный инструмент для создания шрифтов. MetaPost создавался как инструмент для рисования&lt;br /&gt;
любых изображений, поэтому в него был встроен довольно мощный&lt;br /&gt;
механизм вставки текста. Работая совместно с LaTeX, MetaPost позволяет использовать всю мощь текстового процессора для создания надписей. Кроме всего прочего, иметь в рисунках те же шрифты, что и в тексте&lt;br /&gt;
просто красиво.&lt;br /&gt;
&lt;br /&gt;
Разберём это на примере треугольник Паскаля – треугольной числовой таблицы для составления биномиальных коэффициентов. По боковым сторонам треугольника стоят единицы, внутри треугольника числа&lt;br /&gt;
образуются сложением двух чисел, стоящих над данным:&lt;br /&gt;
&lt;br /&gt;
[[Изображение:Img 77 98 2.png|Img 77 98 2.png]]&lt;br /&gt;
&lt;br /&gt;
Так как нижние строки из-за увеличения разрядности чисел расползались, то для представления появилась необходимость уменьшить их&lt;br /&gt;
геометрические размеры. В коде так же использовались циклы, которые&lt;br /&gt;
будут разобраны позже. Команда show позволяет отлаживать код,&lt;br /&gt;
выдавая значения переменных на экран во время компиляции рисунка с&lt;br /&gt;
помощью mpost.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;latex&amp;quot;&amp;gt;&lt;br /&gt;
%Файл pic.mp&lt;br /&gt;
%Треугольник Паскаля&lt;br /&gt;
beginfig(5) ;&lt;br /&gt;
numeric u;&lt;br /&gt;
u = 1.mm;&lt;br /&gt;
numeric dy,dx,x,y,n[ ][ ],i,j,sy,ds,nlast;&lt;br /&gt;
dy:=5u;dx:=5u;x=0;y=0;&lt;br /&gt;
ds=0.04;sy=0.032;nlast=14;&lt;br /&gt;
picture z;&lt;br /&gt;
for i:=0 upto nlast:&lt;br /&gt;
dy:=dy*(1-sy);&lt;br /&gt;
y:=y-dy;&lt;br /&gt;
for j:=0 upto i:&lt;br /&gt;
if (j=0) or (j=i):&lt;br /&gt;
n[i][j]:=1;&lt;br /&gt;
else:&lt;br /&gt;
n[i][j]:=n[i-1][j-1]+n[i-1][j];&lt;br /&gt;
fi&lt;br /&gt;
% show i,j,n[i][j];&lt;br /&gt;
z:=thelabel(decimal(n[i][j]),(0,0));&lt;br /&gt;
x:=dx*(j-i/2);&lt;br /&gt;
label(z scaled (1-ds*i),(x,y));&lt;br /&gt;
endfor&lt;br /&gt;
z:=thelabel.lft(decimal(i)&amp;amp;”:”,(0,0));&lt;br /&gt;
label(z scaled (1-ds*i),(dx*(-nlast/2-1),y));&lt;br /&gt;
endfor&lt;br /&gt;
label.rt(btex \((a+b)^n=\) etex,(5u,-5u));&lt;br /&gt;
label.rt(btex \(=\sum C^k_na^kb^{n-k}\) etex,&lt;br /&gt;
(10u,-10u));&lt;br /&gt;
label.lft(btex Треугольник Паскаля etex&lt;br /&gt;
rotated 56,(-5u,-20u));&lt;br /&gt;
endfig ;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Команда decimal делает из переменной типа numeric строку. Две&lt;br /&gt;
строки можно слить с помощью операнда «&amp;amp;».&lt;br /&gt;
&lt;br /&gt;
Для того чтобы вставить текстовую метку в рисунок, необходимо&lt;br /&gt;
получить на входе текстовую строку, которую, возможно, надо будет&lt;br /&gt;
преобразовать с помощью LaTeX, и точку где эту строку следует&lt;br /&gt;
расположить:&lt;br /&gt;
 label(“text string”,A);&lt;br /&gt;
Полезно ещё уточнить с какой стороны от указанной точки расположить текстовую метку. Уточнение производится с помощью суффикса,&lt;br /&gt;
который добавляется макросу label через точку. Всего существует&lt;br /&gt;
восемь стандартных суффиксов: «.rt» – расположить справа, «.lft» –&lt;br /&gt;
слева, «.top» – сверху, «.bot» – снизу, «.llft» – расположить снизу и&lt;br /&gt;
слева по диагонали, «.lrt» – снизу и справа, «.ulft» – сверху и слева,&lt;br /&gt;
«.urt» – сверху и справа.&lt;br /&gt;
&lt;br /&gt;
Если label передаётся просто строка (тип string), то текст обрабатывается силами MetaPost и всё, что выходит за пределы ASCII-таблицы с&lt;br /&gt;
большой вероятностью не отобразится. Для того чтобы строка была&lt;br /&gt;
обработана LaTeX, необходимо указать это с помощью разделителей&lt;br /&gt;
btex и etex. Строка между этими разделителями обрабатывается LaTeX,&lt;br /&gt;
при этом в качестве заголовка используются инструкции перечисленные&lt;br /&gt;
в начале mp-файла между verbatimtex и etex. Таким образом можно&lt;br /&gt;
использовать кириллицу и любую конструкцию, которую понимает&lt;br /&gt;
LaTeX.&lt;br /&gt;
&lt;br /&gt;
В некоторых случаях команде label удобно передавать не строку, а&lt;br /&gt;
картинку picture. В нашем случае это было необходимо, так как надпись&lt;br /&gt;
надо было масштабировать. Объект picture представляет из себя совокупность примитивов типа путей и точек, поэтому его можно трансформировать. Команда thelabel создаёт такую картинку. Объект, заключённый между btex и etex так же является картинкой.&lt;br /&gt;
&lt;br /&gt;
=== Заливка ===&lt;br /&gt;
[[Изображение:Img 77 99 1.png|right|frame]]&lt;br /&gt;
Кроме рисования кривых часто бывает необходимо закрасить какую-либо замкнутую область.&lt;br /&gt;
Для этого сущест-&lt;br /&gt;
вует команда fill. На&lt;br /&gt;
вход команды fill&lt;br /&gt;
подаётся объект типа&lt;br /&gt;
path, при этом путь&lt;br /&gt;
должен быть замкну-&lt;br /&gt;
тым, то есть оканчи-&lt;br /&gt;
ваться командой cycle. Команда cycle автоматически замыкает&lt;br /&gt;
кривую.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;latex&amp;quot;&amp;gt;&lt;br /&gt;
%Файл pic.mp&lt;br /&gt;
%Рис к 1.6.20 а) струя под углом, разбивающаяся о пол&lt;br /&gt;
beginfig(10) ;&lt;br /&gt;
numeric u;&lt;br /&gt;
u = 1mm;&lt;br /&gt;
numeric st;st:=u/(sqrt 3);&lt;br /&gt;
path p;&lt;br /&gt;
p:=(0,10u)--(18u,10u){dir 0}..{dir 30}(22u,10u+2st)--&lt;br /&gt;
(50u,10u+30st){dir -90}..{dir -90}(60u,5u+20st)--&lt;br /&gt;
(42u,5u+2st){dir -150}..{dir 0}(42u,5u)--&lt;br /&gt;
(60u,5u){dir -120}..{dir -120}(60u,0u)--&lt;br /&gt;
(0u,0u){dir 60}..{dir 60}cycle;&lt;br /&gt;
fill p withcolor 0.8 white;&lt;br /&gt;
draw ((40u,5u)+10u*dir 30){dir -60}..{dir -90}(50u,5u);&lt;br /&gt;
label(btex \(\alpha\) etex,(53u,8u));&lt;br /&gt;
draw (0u,0)--(60u,0u) withpen pencircle scaled 0.8u;&lt;br /&gt;
numeric R,alpha;R:=12u;alpha=30;&lt;br /&gt;
drawarrow (25u+25u,5u+25st)--&lt;br /&gt;
((25u+25u,5u+25st)-R*dir alpha)&lt;br /&gt;
withpen pencircle scaled 0.6u;&lt;br /&gt;
label.ulft(btex \(\vec{v}\) etex,1/2[(25u+25u,5u+25st),&lt;br /&gt;
((25u+25u,5u+25st)-R*dir alpha)]);&lt;br /&gt;
drawarrow (20u,5u)--(20u-R,5u)&lt;br /&gt;
withpen pencircle scaled 0.6u;&lt;br /&gt;
label.top(btex \(\vec{v}\) etex,(20u-R/2,5u));&lt;br /&gt;
drawarrow (45u,2.5u)--(45u+R,2.5u)&lt;br /&gt;
withpen pencircle scaled 0.6u;&lt;br /&gt;
label.lft(btex \(\vec{v}\) etex,(45u,2.5u));&lt;br /&gt;
endfig ;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Для fill существует противоположная по смыслу команда unfill,&lt;br /&gt;
которая, соответственно, убирает заливку в выбранной окрестности.&lt;br /&gt;
Если вы планируете использовать эти команды, то изучите соответствующий раздел «Всё про METAFONT» Кнута, так как влияние этих команд&lt;br /&gt;
друг на друга не совсем тривиально. Дело в том, что при наложении&lt;br /&gt;
друг на друга двух заливок в месте пересечения образуется «двойной&lt;br /&gt;
слой краски» и для того чтобы убрать его необходимо дважды вызывать&lt;br /&gt;
команду unfill. Команда unfill действует схоже, только число «слоёв&lt;br /&gt;
краски» становится отрицательным. Для сведения всё к ситуации когда&lt;br /&gt;
краска либо есть (один слой), либо её нет используется команда&lt;br /&gt;
«выравнивания» cullit.&lt;br /&gt;
&lt;br /&gt;
Обратите внимание, что точку можно задать не только парой чисел:&lt;br /&gt;
«(x,y)» – Декартова система координат, но и радиусом с направлением&lt;br /&gt;
«R*dir » – полярные координаты.&lt;br /&gt;
&lt;br /&gt;
=== Цвета ===&lt;br /&gt;
Ещё одно важное отличие MetaPost от MetaFont – это наличие цвета.&lt;br /&gt;
Работа с цветом обычно сложнее, чем работа с чёрно-белым рисунком.&lt;br /&gt;
До сих пор процедура переноса электронного цветного рисунка на бумагу не является тривиальной. Но время идёт, и цветные принтеры становятся всё доступней. Кроме того, хорошие чисто электронные тексты, не&lt;br /&gt;
привязанные к твёрдой копии, так же становятся весьма распространёнными. Поэтому если необходимо, то следует пользоваться цветом,&lt;br /&gt;
естественно, если вы знаете что делать. В случае простого рисунка цвет,&lt;br /&gt;
как правило, только отвлекает.&lt;br /&gt;
&lt;br /&gt;
В MetaPost управление цветом реализовано на довольно низком&lt;br /&gt;
уровне. Цвет определяется объектом типа color и представляет из себя&lt;br /&gt;
тройку чисел принимающих значение от 0 до 1: «(r,g,b)», где r соответствует красной, g – зелёной, а b – голубой компоненте. Существует&lt;br /&gt;
пять предопределённых цветовых констант: red (1,0,0), green (0,1,0),&lt;br /&gt;
blue (0,0,1), а так же black (1,1,1) и white (0,0,0).&lt;br /&gt;
&lt;br /&gt;
Нарисовать объект, выбранным цветом, можно с помощью инструкции withcolor за которой следует сам цвет. Цвета можно складывать,&lt;br /&gt;
вычитать, умножать на число. Пользуясь базовыми определениями&lt;br /&gt;
можно создать более сложные объекта. Например как этот спектр:&lt;br /&gt;
&lt;br /&gt;
[[Изображение:Img 77 99 2.jpg|Img 77 99 2.jpg]]&lt;br /&gt;
&lt;br /&gt;
Код, создающий эту картинку, далёк от совершенства, но он прост,&lt;br /&gt;
и его можно улучшать в случае необходимости.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;latex&amp;quot;&amp;gt;&lt;br /&gt;
%Файл colors.mp&lt;br /&gt;
def spectrline(expr ic,c,l,w,dw) =&lt;br /&gt;
begingroup&lt;br /&gt;
save i,ifirst,ilast,istep,icc;&lt;br /&gt;
color icc;&lt;br /&gt;
if (ic&amp;gt;0):istep:=1;ifirst:=0;ilast=255;&lt;br /&gt;
else:istep:=-1;ifirst=0;ilast:=-255; fi;&lt;br /&gt;
if (abs(ic)=1):icc:=red;fi;&lt;br /&gt;
if (abs(ic)=2):icc:=green;fi;&lt;br /&gt;
if (abs(ic)=3):icc:=blue;fi;&lt;br /&gt;
for i:=ifirst step istep until ilast:&lt;br /&gt;
draw ((0u,0u)--(0u,l)) shifted (w+(dw/2*abs(i),0))&lt;br /&gt;
withpen pencircle scaled dw withcolor (c+i/255*icc);&lt;br /&gt;
endfor;&lt;br /&gt;
endgroup;&lt;br /&gt;
enddef;&lt;br /&gt;
%спектр&lt;br /&gt;
beginfig(1) ;&lt;br /&gt;
color current;&lt;br /&gt;
u:=1mm;w:=200u;dw:=w/512;l:=5u;&lt;br /&gt;
current:=(1,0,0);&lt;br /&gt;
spectrline(2,current,l,(1/4w,0u),dw)&lt;br /&gt;
current:=(1,1,0);&lt;br /&gt;
spectrline(-1,current,l,(1/2w,0u),dw)&lt;br /&gt;
current:=(0,1,0);&lt;br /&gt;
spectrline(3,current,l,(3/4w,0u),dw)&lt;br /&gt;
current:=(0,1,1);&lt;br /&gt;
spectrline(-2,current,l,(w,0u),dw)&lt;br /&gt;
endfig ;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
В примере используется макрос spectrline для уменьшения&lt;br /&gt;
размера кода.&lt;/div&gt;</summary>
		<author><name>Yaleks</name></author>	</entry>

	</feed>