<?xml version="1.0" encoding="windows-1251"?>
<!-- Developed by Metaphor (c) 2002 -->
<?xml-stylesheet type="text/xsl" href="../read.xsl"?>
<chapter id="svg">
	<article_name>Введение в SVG</article_name>
	<sub_info>by Vincent Hardy (Sun Microsystems)</sub_info>
	<block>
		<para_name>Простые геометрические формы в SVG</para_name>
		<p>В примере этой главы демонстрируются геометрические формы, которые создаются с помощью элементов <code>&lt;rect&gt;, &lt;circle&gt;, &lt;ellipse&gt;, &lt;polygon&gt;, &lt;polyline&gt;, &lt;path&gt;, &lt;g&gt;</code>
		</p>
	</block>
	<block>
		<para_name>Вступление</para_name>
		<p>В SVG имеется несколько основных геометрических форм:</p>
		<ul>
			<li>Прямоугольники</li>
			<li>Окружности</li>
			<li>Эллипсы</li>
			<li>Линии</li>
			<li>Ломаные линии</li>
			<li>Многоугольники</li>
		</ul>
		<p>Эти базовые формы, вместе с траекториями, образуют множество графических форм SVG. В этом документе мы познакомимся с тем, как задаются эти формы и как они комбинируются в сложный рисунок (в нашем примере это изображение телефона). Кроме того, здесь будет вкратце описаны методы группировки различных элементов и задание трансформаций внутри группы.</p>
		<p>
			<b>Обратите внимание:</b> стилевые атрибуты не обсуждаются в этой статье. Но вы можете посмотреть в исходном SVG-файле, как они используются для создания градиентных заливок.</p>
	</block>
	<block>
		<para_name>Пример</para_name>
		<p>Данное изображение составлено из различных геометрических форм, описанных в формате SVG:</p>
		<svg src="svgsamples/shapes.svg" width="440" height="350"/>
		<p>Простые графические формы образуют изображение телефона. Он состоит из следующих частей:</p>
		<ul>
			<li>Трубка, она состоит из двух эллиптических частей и прямоугольной ручки</li>
			<li>Рычаг, на котором лежит трубка - он образован двумя скошенными прямоугольниками</li>
			<li>Корпус - он изображен с помощью ломаной линии</li>
			<li>Наборного поля - оно изображено с помощью многоугольника и двенадцати круглых кнопок</li>
			<li>Шнур - это траектория, заданная с помощью квадратных кривых Безье</li>
		</ul>
		<p>В следующих параграфах мы познакомимся с каждой из этих деталей внимательнее</p>
	</block>
	<block>
		<para_name>Прямоугольники и эллипсы</para_name>
		<p>В нашем примере трубка изображена с помощью двух эллипсов и соединяющего их прямоугольника. Следующих код формирует этот прямоугольник и эллипсы:</p>
		<pre>&lt;g id="Handset" transform="translate(70, 90)"&gt;
  &lt;rect y="-30" height="40" width="260" /&gt;
  &lt;ellipse cy="20" rx="45" ry="50" /&gt;
  &lt;ellipse cy="20" rx="45" ry="50" transform="translate(260)" /&gt;
&lt;/g&gt;</pre>
		<p>Здесь с помощью элемента <code>&lt;g&gt;</code> задается группа объектов с именем "Handset". Начало внутренней системы координат этой группы находится в точке с координатами (100, 60); другими словами, все координаты геометрических форм внутри этого элемента <code>&lt;g&gt;</code> отсчитываются относительно точки с координатами (100, 60) таким образом, что для объектов этой группы эта точка выступает началом координат (0, 0). Мы начинаем с изображения прямоугольника высотой в 20 и шириной 200. Для эллипсов нужно задать дополнительные атрибуты:</p>
		<ul>
			<li>
				<b>cx</b> и <b>cy</b> задают центр эллипса</li>
			<li>
				<b>rx</b> задает X-полуось эллипса</li>
			<li>
				<b>ry</b> задает Y-полуось эллипса</li>
		</ul>
		<p>Поскольку мы применили элемент <code>&lt;g&gt;</code> для группировки трех составляющих кусочков трубки, мы можем изменить положение трубки на рисунке просто модифицируя значение атрибута <code>transform</code> элемента <code>&lt;g&gt;</code>, для этого нам не нужно изменять координаты каждой элементарной формы.</p>
		<p>Следующий пример кода рисует прямоугольники, изображающие рычаг телефона:</p>
		<pre>&lt;g transform="translate(200, 80)"&gt;
  &lt;rect x="-30" height="50" width="10" transform="skewX(10)"/&gt;
  &lt;rect x="-30" height="50" width="10" transform="skewX(-10)"
   translate(50, 0)"/&gt;
&lt;/g&gt;</pre>
		<p>Эти два прямоугольника немного отличаются от первого, поскольку здесь в атрибуте <code>transform</code> описывается свойство "skew" (скос), которое позволяет нам добиться эффекта скоса стоек рычага. Кроме того, здесь мы сдвигаем прямоугольники, задавая их новые начальные точки. Это делается установкой значений атрибутов <code>x</code> и <code>y</code> элементов <code>&lt;rect&gt;</code>
		</p>
	</block>
	<block>
		<para_name>Окружности, многоугольники и ломаные линии</para_name>
		<p>В нашем примере для изображения корпуса телефона мы используем ломаную линию, для изображения наборного поля - многоугольник, а для изображения кнопок - двенадцать окружностей. Мы группируем наборное поле с кнопками, а затем комбинируем эту группу с корпусом телефона и получаем еще одну группу. Следуя такому групповому подходу, если нам понадобится изменить положение наборного поля с кнопками относительно корпуса телефона, нам нужно будет изменить только координаты внутренней группы, не меняя наборного поля и кнопок. Следующий код рисует окружность с заданным центром:</p>
		<pre>&lt;circle id="phoneKey" cx="0" cy="0" r="14"/&gt;</pre>
		<p>В элементе <code>&lt;circle&gt;</code> атрибуты <code>cx</code> и <code>cy</code> определяют положение центра окружности, а атрибут <code>r</code> задает ее радиус.</p>
		<p>Мы познакомились уже с тремя базовыми геометрическими формами - они обладают легко определяемым контуром. Теперь мы переходим к другим формам, которые требуют для описания своего контура более специфичных данных. Например, следующий код задает наборное поле телефона - определяется элемент <code>&lt;polygon&gt;</code>, имеющий четыре угла, он формирует четырехугольник:</p>
		<pre>&lt;polygon points="-65,-20 65,-20 65,110 -65,110" /&gt;</pre>
		<p>Важным атрибутом элемента <code>&lt;polygon&gt;</code> является атрибут <code>points</code>. В качестве значения этого атрибута используется список координатных пар точек (два значения для каждой точки). В нашем примере задается прямоугольник, но элемент <code>&lt;polygon&gt;</code> может задавать не только четырехсторонние многоугольники и их стороны могут не быть равными.</p>
		<p>Двухмерные фигуры можно задавать и не только как многоугольники. Для этого можно использовать элемент <code>&lt;polyline&gt;</code>. Единственное отличие заключается в том, что элемент <code>&lt;polygon&gt;</code> автоматически закрывает фигуру линией между первой и последней точкой (если они не совпадают), а элемент <code>&lt;polyline&gt;</code> оставляет фигуру открытой. Следующий код рисует корпус телефона как ломаную линию:</p>
		<pre>&lt;polyline points="-75,0 75,0 80,40 110,50 140,230 -140,230 -110,
		     50 -80,40 -75,0" /&gt;</pre>
	</block>
	<block>
		<para_name>Траектории</para_name>
		<p>Траектории в SVG представляют контуры объектов. Одним из наиболее важных атрибутов элемента <code>&lt;path&gt;</code> является атрибут <code>d</code>, который содержит данные, описывающие траекторию. Атрибут <code>d</code> несет инструкции типа "moveto" (переместить), "line" (провести линию), "curve" (провести кривую Безье второй или третьей степени), "arc" (провести дугу) и "closepath" (закрыть траекторию). Все эти инструкции обозначаются какой-нибудь одной буквой (например, "moveto" обозначается символом <b>M</b>). В нашем примере мы используем инструкции "moveto" и "quadratic bezier curve". Следующий код задает кривую, изображающую телефонный шнур: </p>
		<pre>&lt;path id="cord" d="M 235,130 q 25,0 25,25 q 0,25 25,25 q 25,0 25,
    25 q 0,25 25,25 q 25,0 25,25 q 0,25 25,25 q 25,0 25,25 q 0,
    25 25,25 q 25,0 25,25" /&gt;</pre>
		<p>В атрибуте <code>d</code> мы сначала задаем инструкцию <b>M</b>, которая дает указание сделать сдвиг к новой точке, от нее начнется кривая. Заглавная <b>M</b> в данном случае означает, что в описании используются абсолютные координаты, а маленькая <b>m</b> - что используются относительные. После того, как мы с помощью инструкции "moveto" определили начальную точку траектории, мы используем инструкцию <b>q</b> для задания сегмента кривой Безье второго порядка. И снова, маленькая <b>q</b> означает, что описание дается в относительных координатах, а заглавная <b>Q</b> - что в абсолютных. Параметрами команды <b>q</b> является серия координатных пар в виде (x1,y1 x,y). Эти координатные пары задают кривую Безье второго порядка, которая проходит из текущей точки в точку с координатами (x,y) используя точку (x1,y1) в качестве контрольной. После выполнения одной инструкции <b>q</b>, текущая точка переместится в соответствии с координатным параметром. Поскольку мы используем относительные координаты, мы можем переместить изображение телефонного шнура, просто изменив координаты начальной точки.</p>
	</block>
	<block>
		<para_name>Заключение</para_name>
		<p>В примере этой главы мы объединили базовые геометрические формы и траектории. Мы не только использовали самые существенные атрибуты каждого элемента, но и использовали комбинации различных элементов и использовали для них групповые атрибуты. Рисуя траектории, мы использовали относительные координаты, так что перемещать траекторию было несложно. За дополнительной информацией, относящейся к использованию и определению базовых геометрических форм, а также относящейся к различным атрибутам элемента <code>&lt;path&gt;</code>, пожалуйста, обращайтесь на <a href="http://www.w3.org/Graphics/SVG">официальный сайт W3C SVG</a>.</p>
	</block>
	<navy>
		<prev>svg_1.xml</prev>
		<next>svg_3.xml</next>
	</navy>
</chapter>
