<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>bezier.ru</title>
	<atom:link href="http://bezier.ru/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://bezier.ru</link>
	<description>Классы для работы с кривыми Безье</description>
	<lastBuildDate>Mon, 14 Jun 2010 18:11:46 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Демо</title>
		<link>http://bezier.ru/?p=14</link>
		<comments>http://bezier.ru/?p=14#comments</comments>
		<pubDate>Tue, 17 Jun 2008 09:55:29 +0000</pubDate>
		<dc:creator>iv</dc:creator>
				<category><![CDATA[Новости]]></category>

		<guid isPermaLink="false">http://bezier.ru/?p=14</guid>
		<description><![CDATA[Обновилась демка: http://bezier.ru/wp-content/uploads/2010/03/BezierTest.swf?demo=1
Надеюсь, она стала нагляднее и удобнее.
]]></description>
			<content:encoded><![CDATA[<p>Обновилась демка: <a title="Bezier demo" href="http://bezier.ru/wp-content/uploads/2010/03/BezierTest.swf?demo=1">http://bezier.ru/wp-content/uploads/2010/03/BezierTest.swf?demo=1</a><br />
Надеюсь, она стала нагляднее и удобнее.</p>
]]></content:encoded>
			<wfw:commentRss>http://bezier.ru/?feed=rss2&amp;p=14</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Обзор возможностей класса Bezier</title>
		<link>http://bezier.ru/?p=10</link>
		<comments>http://bezier.ru/?p=10#comments</comments>
		<pubDate>Wed, 04 Jun 2008 15:59:09 +0000</pubDate>
		<dc:creator>iv</dc:creator>
				<category><![CDATA[Примеры использования классо]]></category>
		<category><![CDATA[начинающим]]></category>

		<guid isPermaLink="false">http://bezier.ru/?p=10</guid>
		<description><![CDATA[Конструктор
Конструктор класса реализован таким образом, что ни один параметр не является обязательным. Такой подход упрощает создание экземпляров класса и в некоторых случаях серьезно развязывает руки разработчику.
Параметры конструктора — три точки на плоскости, объекты класса Point, а так же четвертый параметр — булева переменная, указывающая на режим работы с кривой.
Если параметры не заданы, то конструктор автоматически [...]]]></description>
			<content:encoded><![CDATA[<h2>Конструктор</h2>
<p><strong>Конструктор класса</strong> реализован таким образом, что ни один параметр не является обязательным. Такой подход упрощает создание экземпляров класса и в некоторых случаях серьезно развязывает руки разработчику.</p>
<p>Параметры конструктора — три точки на плоскости, объекты класса <span style="color: #0000ff;"><em>Point</em></span>, а так же четвертый параметр — булева переменная, указывающая на режим работы с кривой.</p>
<p>Если параметры не заданы, то конструктор автоматически создает контрольные точки в нулевых координатах и режим работы с кривой — как с сегментом.</p>
<p>В целях обеспечения возможности изменения работы конструктора в подклассах, вся логика конструктора вынесена в <em><span style="color: #0000ff;">protected </span></em>метод <span style="color: #0000ff;"><em>initInstance(&#8230;)</em></span>.</p>
<p>Здесь же следует упомянуть метод <span style="color: #0000ff;"><em>clone</em></span>, создающий копию текущей кривой. Других способов создания нового экземпляра класса не предусмотрено.</p>
<blockquote><p><em>В предыдущей AS2 версии класса были предусмотрены методы создания экземпляра класса <span style="color: #0000ff;">Bezier</span> из строки, массива и XML. Однако, эта функциональность не была включена в текущую версию, поскольку не соответствует назначению пакета, а также может быть легко реализована самостоятельно в классе-фабрике.</em></p></blockquote>
<h2>Основные свойства</h2>
<p><strong>Контрольные точки</strong>, определяющие саму кривую Безье, и являются основными свойствами класса — <span style="color: #0000ff;"><em>start</em></span>, <em><span style="color: #0000ff;">control</span></em>, <span style="color: #0000ff;"><em>end</em></span>. Реализованы они как get/set свойства в целях возможности переопределения этих свойств в подклассах. Я рассуждал так: при замене контрольной точки на другую может потребоваться дополнительная функциональность, например перерисовка кривой. Эту логику проще всего реализовать переопределив свойства в подклассе.</p>
<p>Еще одним важным свойством является то, как мы относимся к кривой: как к сегменту,  ограниченному начальной и конечной точками или как к бесконечной кривой. Значение этого свойства влияет на результаты вычисления пересечений, а также при вычислении точки на кривой, ближай$$$$$ей к произвольно заданной на плоскости.</p>
<h2>Геометрические свойства</h2>
<p><strong>Длина сегмента</strong> кривой Безье, ограниченного начальной и конечной точками может быть получена  из свойства <span style="color: #0000ff;"><em>length</em></span>. Для получения длины произвольного сегмента кривой используется метод <span style="color: #0000ff;"><em>getSegmentLength(&#8230;)</em></span>, принимающий в качестве параметра <span style="color: #0000ff;"><em>time</em></span>-итератор точки на кривой, до которой требуется найти длину сегмента от начальной точки. В случае, если потребуется найти длину сегмента, не начинающегося с начальной точки, то достаточно получить значения длины от начала кривой до начальной и конечной точки сегмента и вычислить разницу.</p>
<p><strong>Площадь фигуры</strong>, образуемой кривой Безье и ее основанием, можно получить используя свойство <em><span style="color: #0000ff;">area</span></em>. Площадь этой фигуры равна 2/3 площади описывающего треугольника. Для вычисления площади сложной фигуры, отрисованной отрезками и кривыми Безье второго порядка, в общем случае следует:</p>
<ul>
<li>разбить фигуру на треугольники, используя описывающие треугольники там, где контур образован кривыми;</li>
<li>суммировать их площадь;</li>
<li>вычесть все значения <em><span style="color: #0000ff;">area </span></em>для случаев вогнутых кривых, и вычесть половину значения <em><span style="color: #0000ff;">area</span></em> для случаев выпуклых кривых.</li>
</ul>
<p>В случае выпуклых кривых вычитается половина <span style="color: #0000ff;"><em>area</em></span> по той причине, что остав$$$$$аяся часть — фигура, образованная кривой и сторонами описывающего треугольника имеет площадь, равную 1/3 описывающего треугольника, или половине <em><span style="color: #0000ff;">area</span></em>.</p>
<p><strong>Геометрический центр тяжести </strong>описывающего треугольника вычисляется как среднее арифметическое его вер$$$$$ин.</p>
<p>Описывающий треугольник делится кривой Безье на две части: вне$$$$$нюю и внутреннюю фигуры. Внутренняя фигура образуется кривой Безье и линией <em><span style="color: #0000ff;">SE</span></em>. Вне$$$$$няя фигура образуется кривой Безье и сторонами описывающего треугольника <span style="color: #0000ff;"><em>SC</em></span> и <span style="color: #0000ff;">CE</span>.</p>
<p>Центры тяжести описывающего треугольника и фигур Безье находятся на одной линии, линии соединяющей середину основания (<em><span style="color: #0000ff;">M</span></em>) и управляющую точку <em><span style="color: #0000ff;">C</span></em>.</p>
<p>Центр тяжести внутренней фигуры находится на расстоянии 0.2 от основания до управляющей точки, описывающего треугольника — 1/3, и вне$$$$$ней фигуры на 0.6.</p>
<p>Для получения центров тяжести используйте свойства класса <em><span style="color: #0000ff;">triangleCentroid</span></em>, <span style="color: #0000ff;"><em>internalCentroid</em></span>, <span style="color: #0000ff;"><em>external</em><em>Centroid</em></span>. На <a title="Bezier demo" href="http://bezier.ru/wp-content/uploads/2008/06/bezier.swf?demo=10" target="_blank">демонстрации</a> эти точки обозначены как Gt, Gi, Ge.</p>
<p><strong>Габаритный прямоугольник</strong> можно получить используя свойство <span style="color: #0000ff;"><em>bounds</em></span>. Следует заметить, что расчеты производятся для сегмента, ограниченного точками <span style="color: #0000ff;"><em>start </em></span>и <em><span style="color: #0000ff;">end</span></em>, вне зависимости от текущего значения свойства <em><span style="color: #0000ff;">isSegment</span></em>, поскольку неограниченная кривая Безье бесконечна и о ее габаритах рассуждать бессмысленно.</p>
<p>Если требуется получить габаритный прямоугольник какой-либо части текущей кривой Безье, то вначале следует получить методом <em><span style="color: #0000ff;">getSegment(&#8230;)</span></em> новый объект <em><span style="color: #0000ff;">Bezier</span></em> и, в свою очередь, у него получать габаритный прямоугольник.</p>
<p>Применение этого свойства полезно в случаях, когда требуется произвести вычисление пересечения кривой с другими объектами. Как менее нагруженная операция, рекомендуется для предварительной оценки возможности пересечения.</p>
<h2>Родительская парабола</h2>
<p>Как я уже писал в предыдущих статьях, кривая Безье второго порядка, будучи построенной с <em><span style="color: #0000ff;">time</span></em>-итератором от минус бесконечности до плюс бесконечности, является <strong>параболой</strong>. Соответственно, сегмент кривой Безье, ограниченный точками <em><span style="color: #0000ff;">start </span></em>и <span style="color: #0000ff;"><em>end </em></span>является сегментом параболы. Причем, зная контрольные точки Безье можно вычислить родительскую параболу, что и реализуют свойства <span style="color: #0000ff;"><em>parabolaVertex</em></span> и <span style="color: #0000ff;"><em>parabolaFocusPoint</em></span>.</p>
<p>Зная вер$$$$$ину параболы и фокус несложно вычислить все остальные параметры параболы и сделать необходимые расчеты, если они не реализованы классом Bezier.</p>
<blockquote><p><em>Тут следует заметить, что класс <span style="color: #0000ff;">Bezier</span> служит исключительно для ре$$$$$ения наиболее часто встречающихся геометрических задач.</em></p>
<p><em>В процессе реализации класса авторами была проведена боль$$$$$ая работа и в финале функциональность класса при$$$$$лось существенно сокращать, оставив только самое необходимое. Некоторые из геометрических задач перекочевали из класса в примеры использования.</em></p>
<p><em>Мы надеемся, что практика использования на$$$$$его пакета классов поставит новые, еще не ре$$$$$енные задачи, и вы нам о них сообщите. Мы с удовольствием возьмемся за их ре$$$$$ение.</em></p></blockquote>
<h2>Точки на кривой</h2>
<p><strong>Получение точки по <span style="color: #0000ff;"><em>time</em></span>-итератору </strong>производится методом <em><span style="color: #0000ff;">getPoint(&#8230;)</span></em>. Этот метод преобразует точку на кривой, заданную <span style="color: #0000ff;"><em>time</em></span>-итератором в точку на плоскости.</p>
<p>При вычислениях точки на кривой, методы класса возвращают <em><span style="color: #0000ff;">time</span></em>-итератор. По-сути, используется одномерное представление точки, что позволяет в промежуточных вычислениях избежать постоянных преобразований точки из двумерной в одномерную и наоборот.</p>
<p>В финале вычислений, когда требуется получить двумерную точку, и применяется этот метод.</p>
<p><strong>Получение ближай$$$$$ей точки на кривой</strong> до произвольно заданной производится методом <em><span style="color: #0000ff;">getClosest(&#8230;)</span></em> и часто используется как операция, обратная получению точки по <span style="color: #0000ff;"><em>time</em></span>-итератору.</p>
<p>В боль$$$$$инстве случаев точка, заданная координатами на плоскости, не будет математически <strong>точно</strong> лежать на кривой. При вычислениях требуется учитывать эту погре$$$$$ность и преобразовывать к ближай$$$$$ей точке на кривой.</p>
<p>На <a title="Bezier demo" href="http://bezier.ru/files/bezier_sample01.swf" target="_blank">демонстрации</a> в примерах 2 и 3 показаны особенности метода и способы его применения.</p>
<p><strong>Получение точки по дистанции по кривой</strong> производится методом <em><span style="color: #0000ff;">getTimeByDistance(&#8230;)</span></em>. Последовательность точек, находящихся на одинаковом расстоянии друг от друга луч$$$$$е получать методом <em><span style="color: #0000ff;">getTimesSequence(&#8230;)</span></em>.</p>
<p>Эти методы —  одна из самых сложных и отличительных составляющих на$$$$$его класса <em><span style="color: #0000ff;">Bezier</span></em>. Хотя мы и не на$$$$$ли чисто математического ре$$$$$ения этих задач, однако применение метода Ньютона позволило добиться высокой производительности вычислений.</p>
<p>Применение этих методов самое $$$$$ирокое &#8211; от рисования кривых пунктиром до вычисления позиции объекта, движущегося по траектории заданной кривыми.</p>
<p>В примерах, прилагающихся к пакету, рассмотрены варианты применения.</p>
<h2>$$$$$зменение кривой</h2>
<p><strong>Провести кривую через заданную точку</strong> требуется, например, при организации визуального редактирования кривой с помощью мы$$$$$и, когда пользователь хватает мы$$$$$ью за произвольный участок кривой и, перемещая мы$$$$$ь, изменяет ее. Эту функциональность реализует метод <em><span style="color: #0000ff;">setPoint(&#8230;)</span></em>.</p>
<p><strong>Переместить и повернуть</strong> кривую можно используя методы <em><span style="color: #0000ff;">offset(&#8230;)</span></em> и <span style="color: #0000ff;"><em>angleOffset(&#8230;)</em></span> соответственно. Думаю, особых пояснений тут не требуется.</p>
<h2>Сегмент кривой</h2>
<p>Сегмент кривой Безье второго порядка также является кривой Безье второго порядка и его можно получить методом <span style="color: #0000ff;"><em>getSegment(&#8230;)</em></span>. Сегмент можно получить в любых пределах <em><span style="color: #0000ff;">time</span></em>-итераторов.</p>
<h2>Пересечения</h2>
<p>В классе реализовано вычисление пересечений кривой Безье второго порядка с другой кривой Безье второго порядка, а также с линией. Результатом пересечения всегда является объект класса Intersection, описывающий пересечения. Если пересечения нет, возвращается <span style="color: #0000ff;"><em>null</em></span>.</p>
<blockquote><p><em>В данный момент еще не окончательно реализована проверка соответствия пересечения значению свойства isSegment. TODO, что я еще могу сказать.</em></p></blockquote>
<p><span style="color: #0000ff;"><em><strong>$$$$$ван Дембицкий</strong></em></span></p>
]]></content:encoded>
			<wfw:commentRss>http://bezier.ru/?feed=rss2&amp;p=10</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Реализация пакета Bezier</title>
		<link>http://bezier.ru/?p=9</link>
		<comments>http://bezier.ru/?p=9#comments</comments>
		<pubDate>Sat, 08 Mar 2008 13:57:48 +0000</pubDate>
		<dc:creator>iv</dc:creator>
				<category><![CDATA[Примеры использования классо]]></category>
		<category><![CDATA[начинающим]]></category>

		<guid isPermaLink="false">http://bezier.ru/blog/?p=9</guid>
		<description><![CDATA[Введение
Для программного рисования во Flash используется два метода: lineTo() и curveTo(), реализующие соответственно отрисовку отрезка и кривой Безье второго порядка.
В редакторе Flash имеется возможность отрисовывать кривые с помощью кривых Безье третьего порядка, однако, на этапе компиляции, они аппроксимируются кривыми Безье второго порядка.
В итоге, все векторные фигуры в скомпилированном swf файле реализованы с помощью отрезков или [...]]]></description>
			<content:encoded><![CDATA[<h2>Введение</h2>
<p>Для программного рисования во Flash используется два метода: <font color="#0000ff"><em>lineTo()</em></font> и <font color="#0000ff"><em>curveTo()</em></font>, реализующие соответственно отрисовку отрезка и кривой Безье второго порядка.<br />
В редакторе Flash имеется возможность отрисовывать кривые с помощью кривых Безье третьего порядка, однако, на этапе компиляции, они аппроксимируются кривыми Безье второго порядка.<br />
В итоге, все векторные фигуры в скомпилированном swf файле реализованы с помощью отрезков или кривых Безье второго порядка.<br />
В результате возникает целый спектр задач, для ре?ения которых требуется математический аппарат работы с отрезками и кривыми Безье второго порядка.</p>
<h2><strong>Базовые задачи класса</strong></h2>
<p><strong>1. управление:</strong></p>
<ul>
<li>  с помощью контрольных точек;</li>
<li>  установка заданной точки в произвольно заданные координаты;</li>
<li>  поворот относительно произвольно заданной точки;</li>
<li>  смещение на заданное расстояние.</li>
</ul>
<p><strong> 2. геометрические свойства:</strong></p>
<ul>
<li>получение точки на плоскости по известному time-итератору;</li>
<li>родители (прямая для отрезка и парабола для кривой Безье)</li>
<li>длина заданного сегмента</li>
<li>габаритный прямоугольник</li>
<li>площадь (для кривой Безье)</li>
<li>касательные</li>
</ul>
<p><strong> 3. получение точек на кривой:</strong></p>
<ul>
<li>  по дистанции от начала;</li>
<li>  ближай?ей до произвольно заданной;</li>
<li>  пересечения с другими кривыми и отрезками.</li>
</ul>
<p>Подавляющее боль?инство остальных практических задач могут быть ре?ены на основе ре?ений этих базовых задач.</p>
<p>Собственно, перечисленные базовые задачи и реализованы в этом пакете классов.<br />
Примеры ре?ения других практических задач вынесены в пакет <font color="#0000ff"><em>howtodo</em></font>.</p>
<h2><strong>Концепции</strong></h2>
<p><strong>1.</strong> Классы <em><font color="#0000ff">Bezier</font> </em>и <em><font color="#0000ff">Line</font> </em>реализованы схожим образом и подавляющее боль?инство их методов имеют либо схожий, либо аналогичный синтаксис, определенный интерфейсом <font color="#0000ff"><em>IParametric</em></font>.<br />
Разумеется, есть и отличия: к примеру, у<font color="#0000ff"> </font><em><font color="#0000ff">Line</font> </em>не может быть свойства <em>area</em>, и отсутствует управляющая точка <font color="#0000ff"><em>control</em></font>; у <font color="#0000ff"><em>Bezier</em></font>, в свою очередь нет свойства <font color="#0000ff"><em>angle</em></font>, присутствующего в <font color="#0000ff"><em>Line</em></font>.</p>
<p><strong>2.</strong> Геометрические фигуры(линии), реализованные в классах <em><font color="#0000ff">Line</font> </em>и <font color="#0000ff"><em>Bezier</em></font>, задаются в параметрической форме, и каждая точка фигуры характеризуется time-итератором.<br />
Возможно, что поначалу покажется неудобным, что при вычислении точки на кривой возвращается не привычный всем объект класса <font color="#0000ff"><em>Point</em></font>, а time-итератор, являющийся <font color="#0000ff"><em>Number</em></font>. Однако такая реализация позволяет избежать избыточных конвертаций при последующих расчетах.</p>
<p>Универсально точной характеристикой положения точки на фигуре является  time-итератор. Конвертировать в объект <font color="#0000ff"><em>Point</em></font> точку заданную time-итератором можно используя метод <font color="#0000ff"><em>getPoint</em>()</font>.<br />
Обратное действие предполагает, что точка не обязательно математически точно должна принадлежать линии или кривой. Поэтому, при необходимости получения ее time-итератора, используйте метод <font color="#0000ff"><em>getClosest</em>()</font>.</p>
<p><strong>3.</strong> Объекты <em><font color="#0000ff">Bezier</font> </em>и <em><font color="#0000ff">Line</font> </em>могут быть бесконечны, либо ограничены конечными точками <em><font color="#0000ff">start</font> </em>и <font color="#0000ff"><em>end</em></font>.<br />
Ограниченность может быть установлена свойством <em><font color="#0000ff">isSegment</font> </em>(по умолчанию <font color="#0000ff"><em>true</em></font>).<br />
Если задать<em> <font color="#0000ff">isSegment=false</font></em>, то возвращаемые методами значения будут содержать точки, в том числе, лежащие за пределами сегмента <font color="#0000ff"><em>start-end</em></font>. В противном случае, возвращаемые методами значения будут содержать только точки, принадлежащие сегменту лежащему между <em><font color="#0000ff">start</font> </em>и <font color="#0000ff"><em>end</em></font>.</p>
<p>Класс <em><font color="#0000ff">Bezier</font> </em>представляет кривую Безье второго порядка в параметрическом представлении, задаваемую точками на плоскости <font color="#0000ff"><em>start</em></font>, <em><font color="#0000ff">control </font></em>и <em><font color="#0000ff">end</font></em> и реализован в поддержку встроенного метода <font color="#0000ff"><em>curveTo()</em></font>.<br />
В классе реализованы свойства и методы, предоставляющие доступ к основным геометрическим свойствам этой кривой.</p>
<h2 align="left"><strong>Краткие сведения о кривой Безье второго порядка</strong></h2>
<p>Любая точка P<sub>t</sub> на кривой Безье второго порядка вычисляется по формуле (1):</p>
<p><strong>P<sub>t</sub> = S*(1-t)<sup>2</sup> + 2*C*(1-t)*t + E*t<sup>2</sup></strong></p>
<p>где:</p>
<ul>
<li><strong>t</strong> (<strong>t</strong>ime) — time-итератор точки;</li>
<li><strong>S</strong>  (<strong>s</strong>tart) — начальная опорная (узловая) точка (t=0) (anchor point);</li>
<li><strong>С</strong> (<strong>c</strong>ontrol) — управляющая точка (direction point);</li>
<li><strong>E</strong> (<strong>e</strong>nd) — конечная опорная (узловая) точка (t=1) (anchor point).</li>
</ul>
<p>Построение производится итерационным вычислением множества точек кривой, с изменением значения итератора <strong>t</strong> в пределах от нуля до единицы.</p>
<p>Точка кривой Безье характеризуется time-итератором.<br />
Две точки кривой, имеющие одинаковый time-итератор совпадут.<br />
В общем случае две точки кривой Безье второго порядка с различным time-итератором не совпадут.</p>
<h2>Свойства кривой Безье второго порядка</h2>
<ul>
<li>кривая непрерывна;</li>
<li>кривая остается кривой Безье при любых афинных преобразованиях: вращение, мас?табирование, переенос;</li>
<li>все точки кривой Безье лежат в пределах треугольника ?<font color="#0000ff"><em>SCE</em></font>;</li>
<li>точки <em><font color="#0000ff">S</font></em> и <em><font color="#0000ff">E</font></em> всегда принадлежат кривой Безье и ограничивают ее;</li>
<li>точки с равномерно изменяющимся итератором распределены плотнее на участках с б?ль?им изгибом;</li>
<li>вер?ина кривой Безье — точка с итератором t=0.5 лежит на середине отрезка, соединяющем <em><font color="#0000ff">С</font></em> и середину отрезка <font color="#0000ff"><em>SE</em></font>;</li>
<li>точка <font color="#0000ff"><em>C</em></font> в общем случае не принадлежит кривой и лежит на пересечении касательных к кривой в точках <font color="#0000ff"><em>S</em></font> и <em><font color="#0000ff">E</font></em>;</li>
<li>если точка <em><font color="#0000ff">С</font></em> лежит на прямой <font color="#0000ff"><em>SE</em></font>, то такая кривая является вырожденной;</li>
<li>площадь фигуры, образуемой кривой Безье и отрезком <font color="#0000ff"><em>SE</em></font> равняется 2/3 площади описывающего треугольника. Центр тяжести этой фигуры находится на расстоянии 1/5 от середины основания <font color="#0000ff"><em>SE</em></font> до управляющей точки <font color="#0000ff"><em>C</em></font>;</li>
</ul>
<h2>Кривая Безье и парабола</h2>
<p>Кривая Безье второго порядка является сегментом параболы.<br />
Кривая, построенная по формуле 1,  с итератором <strong>t</strong> изменяющимся в бесконечных пределах является параболой.<br />
Если кривая Безье лежит на параболе, то такая парабола по отно?ению к ней является родительской.</p>
<blockquote>
<blockquote><p><em>Это свойство также относится и к кривым Безье других степеней. Так, к примеру, отрезок можно рассматривать как Безье первого порядка, а его родителем будет линия, которой принадлежит этот отрезок.<br />
Класс <font color="#0000ff">Line</font> именно так интерпретирует отрезок для упрощения использования совместно с классом <font color="#0000ff">Bezier</font>.<br />
Кривая Безье третьего порядка на плоскости &#8211; сегмент проекции на плоскость кубической параболы, построенной в трехмерном пространстве.<br />
? общий случай: Кривая Безье порядка N на плоскости &#8211; сегмент проекции на плоскость N-мерной кривой, построенной в N-мерном пространстве.</em></p></blockquote>
</blockquote>
<h2>?менования и условные обозначения</h2>
<p>При описании алгоритмов, свойств и т.д., если не указано иное, мы используем следующие именования и условные обозначения:</p>
<ul>
<li><em>треугольник Безье, описывающий треугольник</em> — треугольник, образованный контрольными точками SCE;</li>
<li><em>основание, основание кривой Безье</em> — отрезок, образованный контрольными точками SE, основание треугольника SCE;</li>
<li><em>ось, ось кривой, осевая линия</em> —  линия, проходящая через середину основания, вер?ину и управляющую точку C</li>
<li><em>итератор, time-итератор, time, t</em> — числовое значение, характеризующее положение точки на кривой Безье.</li>
<li><em>родительская парабола, родительская кривая</em> &#8211; парабола, которой принадлежит данная кривая Безье (по умолчанию считаем, что кривая Безье ограничена в рамках значений итератора от 0 до 1).</li>
</ul>
<p><strong>Точки лежащие на кривой</strong></p>
<p><img src="http://bezier.ru/wp-content/uploads/2008/06/points.PNG" alt="BezierPoints" height="248" width="452" /></p>
<ul>
<li><strong>S</strong>  (<strong>S</strong>tart) — начальная опорная (узловая) точка (t=0) (anchor point)</li>
<li><strong>С</strong> (<strong>C</strong>ontrol) — управляющая (направляющая) точка (direction point)</li>
<li><strong>E</strong> (<strong>E</strong>nd) — конечная опорная (узловая) точка (t=1) (anchor point)</li>
<li><strong>V</strong> (<strong>V</strong>ertex) — вер?ина кривой (t=0.5)</li>
<li><strong>P<sub>t</sub></strong> (<strong>P</strong>oint, <strong>t</strong>ime) — точка на кривой, заданная итератором <strong>t</strong></li>
<li><strong>T</strong> (<strong>T</strong>op) — вер?ина родительской параболы</li>
</ul>
<p><strong>Другие точки</strong></p>
<ul>
<li><strong>M</strong> (<strong>M</strong>iddle) — середина основания —  отрезка SE</li>
<li><strong>S<sub>t</sub></strong> (<strong>S</strong>tart, <strong>t</strong>ime) — точка на отрезке SC, заданная итератором <strong>t</strong></li>
<li><strong>E<sub>t</sub></strong> (<strong>E</strong>nd, <strong>t</strong>ime) — точка на отрезке CE, заданная итератором <strong>t</strong></li>
<li><strong>F</strong> (<strong>F</strong>ocus)  — фокус родительской параболы.</li>
<li><strong>D</strong> (<strong>D</strong>irectrix) — точка пересечения оси родительской параболы и директрисы родительской параболы.</li>
<li><strong>G<sub>i</sub></strong> (center of <strong>G</strong>ravity, <strong>i</strong>nternal) — центр тяжести фигуры образуемой кривой Безье и основанием описывающего треугольника <font color="#0000ff"><em>SE</em></font>.</li>
<li><strong>G<sub>e</sub></strong> (center of <strong>G</strong>ravity, <strong>e</strong>xternal) — центр тяжести фигуры образуемой кривой Безье и сторонами описывающего треугольника <font color="#0000ff"><em>SC</em></font> и <font color="#0000ff"><em>CE</em></font>.</li>
<li><strong>G<sub>t</sub></strong> (center of <strong>G</strong>ravity, <strong>t</strong>riangle) — центр тяжести описывающего треугольника <font color="#0000ff"><em>SC</em></font><font color="#0000ff"><em>E</em></font>.</li>
</ul>
<p align="right"><font color="#0000ff"><em><strong>?ван Дембицкий</strong></em></font></p>
<blockquote><p><em><strong>Сергеев:</strong> даже &laquo;камасутра&raquo; начинается с главы &laquo;введение&raquo;&#8230;</em></p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://bezier.ru/?feed=rss2&amp;p=9</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Как работать с пакетом классов Bezier</title>
		<link>http://bezier.ru/?p=8</link>
		<comments>http://bezier.ru/?p=8#comments</comments>
		<pubDate>Thu, 06 Mar 2008 23:15:04 +0000</pubDate>
		<dc:creator>iv</dc:creator>
				<category><![CDATA[начинающим]]></category>

		<guid isPermaLink="false">http://bezier.ru/blog/?p=8</guid>
		<description><![CDATA[Здравствуй дружок,
сегодня я расскажу о том, как эффективно использовать плоды чужого труда.
Види?ь ли, в среде программистов ценятся самые ленивые. Всё это потому, что они никогда не будут делать то, что за них уже сделали другие. Когда программисты это поняли, они стали такими нямочками, что готовы делиться друг с другом плодами своего труда. Не то, что [...]]]></description>
			<content:encoded><![CDATA[<p>Здравствуй дружок,<br />
сегодня я расскажу о том, как эффективно использовать плоды чужого труда.</p>
<p>Види?ь ли, в среде программистов ценятся самые ленивые. Всё это потому, что они никогда не будут делать то, что за них уже сделали другие. Когда программисты это поняли, они стали такими нямочками, что готовы делиться друг с другом плодами своего труда. <strike>Не то, что злой Билл питающийся делами Поносова.</strike></p>
<p>Хуже того: они напридумывали всяких программулечек, которые помогают им использовать чужие разработки легко и непринужденно.</p>
<p>Если ты ленивый как программист, но еще не знае?ь стра?ного слова SVN, то настал тот момент, с которого ты начне?ь делать мень?е, а зарабатывать боль?е.</p>
<p>Мы разместили пакет классов <a href="http://bezier.googlecode.com/" title="Bezier geom package" target="_blank">на сервисе GoogleCode</a>, что возможно поставило тебя в тупик. Как этим пользоваться?</p>
<p>Если ты программируе?ь непосредственно во Flash IDE, то достоен почетного знака &laquo;Заслуженный мазохист России&raquo;. Всё это потому, что тебе приходится делать два разных дела одновременно: <em>думать когда программируе?ь</em>. Но ты пропустил новость: уже есть <a href="http://fdt.powerflasher.com/" target="_blank" title="Среда, в которой думать не нужно, а только программировать">среда разработки</a>, которая позволяет не думать, а <em>тупо программировать</em>.<br />
Есть, конечно <a href="http://images.google.ru/images?q=%D0%BF%D0%BB%D1%8F%D0%B6&amp;sourceid=navclient-ff&amp;ie=UTF-8&amp;rlz=1B3GGGL_ruRU253RU253&amp;um=1&amp;sa=N&amp;tab=wi" title="Среда, в которой даже программировать не нужно" target="_blank">среда</a>, в которой совсем программировать не нужно, но она обходится куда дороже чем FDT.</p>
<p>- А вот так, чтобы не накладно и, при этом минимизировать &laquo;<em>программировать</em>&laquo;, тем самым максимизируя &laquo;<em>тупо</em>&laquo;, да еще без потери качества? &#8211; спроси?ь ты.<br />
- Да, возможно, но для этого придется установить целый комплект: <a href="http://www.eclipse.org/" title="Eclipse" target="_blank">Eclipse</a> + <a href="http://fdt.powerflasher.com/" target="_blank" title="Среда, в которой думать не нужно, а только программировать">FDT</a>, <a href="http://subclipse.tigris.org/install.html" title="Минимизировать программирование">Subclipse</a> и научиться использовать публичные библиотеки классов.</p>
<p>Поскольку инструкций по установке этих ?тук написано тонны, считаем, что у тебя всё получилось нарядно, и в своем повествовании я плавно перехожу к главному: а как всё же стащить пакет классов Bezier себе на комп.</p>
<p>В FDT открывай <em>File &#8211; New &#8211; Other</em>, в открыв?емся окне кликай SVN и там выбери <em>Check out projects from SVN</em> и жми <em>Next</em>. Создай <em>New repository location</em> указав <tt><strong><em>http</em></strong>://bezier.googlecode.com/svn/trunk/ </tt>После этого начнется спло?ной пендинг. Дождись когда отпендится и выбери папочку bezier. После этого можно со всем согла?аться, учитывая, что у нас проект AS3.</p>
<p>? вот, настал волнующий момент: у тебя в FDT есть проект, именуемый bezier. Поздравляю! Самое главное постараться не испортить этот триумф вопросом:<br />
- А нахрена мне ва? bezier нужен?<br />
Потому что об этом я расскажу только в следующий раз.</p>
<p align="right"><font color="#0000ff"><em><strong>?ван Дембицкий</strong></em></font></p>
<blockquote><p><em><strong>Сергеев:</strong> Л.Н. Толстой. &laquo;Война и Мир&raquo;, 2 том. Про третий том я расскажу только в следующий  раз.</em></p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://bezier.ru/?feed=rss2&amp;p=8</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Текст вдоль кривой Безье</title>
		<link>http://bezier.ru/?p=6</link>
		<comments>http://bezier.ru/?p=6#comments</comments>
		<pubDate>Wed, 05 Mar 2008 22:39:17 +0000</pubDate>
		<dc:creator>Sergeyev</dc:creator>
				<category><![CDATA[Примеры использования классо]]></category>
		<category><![CDATA[StringToBezier]]></category>
		<category><![CDATA[примеры]]></category>
		<category><![CDATA[работа с текстом]]></category>

		<guid isPermaLink="false">http://bezier.ru/blog/?p=6</guid>
		<description><![CDATA[
swfobject.embedSWF("http://sergeyev.ru/bezier/StringToBezierSample.swf", "flashka", "500", "400", "9.0.0");

1
исходники
Александр Сергеев
Дембицкий: в первом классе злая-презлая учительница учила Са�?у Сергеева писать ровно по тетрадным линеечкам. Он до сих пор мстит.
]]></description>
			<content:encoded><![CDATA[<p><script type="text/javascript">
swfobject.embedSWF("http://sergeyev.ru/bezier/StringToBezierSample.swf", "flashka", "500", "400", "9.0.0");
</script></p>
<div id="flashka">1</div>
<p><a href="http://sergeyev.ru/bezier/StringToBezier.rar">исходники</a></p>
<p><span style="color: #0000ff;"><em><strong>Александр Сергеев</strong></em></span></p>
<blockquote><p><em><strong>Дембицкий</strong>: в первом классе злая-презлая учительница учила Са�?у Сергеева писать ровно по тетрадным линеечкам. Он до сих пор мстит.</em></p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://bezier.ru/?feed=rss2&amp;p=6</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Привет, мир!</title>
		<link>http://bezier.ru/?p=5</link>
		<comments>http://bezier.ru/?p=5#comments</comments>
		<pubDate>Wed, 05 Mar 2008 22:28:11 +0000</pubDate>
		<dc:creator>Sergeyev</dc:creator>
				<category><![CDATA[Новости]]></category>
		<category><![CDATA[про сайт]]></category>

		<guid isPermaLink="false">http://bezier.ru/blog/?p=5</guid>
		<description><![CDATA[Теперь сайт bezier.ru выглядит так. Мы ре?или перейти в формат блога, надеясь что это простимулирует нас боль?е работать над проектом, и легче рассказывать вам о возможностях пакета классов Bezier. На этом блоге будут публиковаться новости, примеры, дополнительные материалы, статьи и все, что касается проекта. Также есть страничка проекта на Google Code, где можно найти свежай?ие [...]]]></description>
			<content:encoded><![CDATA[<p>Теперь сайт bezier.ru выглядит так. Мы ре?или перейти в формат блога, надеясь что это простимулирует нас боль?е работать над проектом, и легче рассказывать вам о возможностях пакета классов Bezier. На этом блоге будут публиковаться новости, примеры, дополнительные материалы, статьи и все, что касается проекта. Также есть страничка проекта на <a href="http://code.google.com/p/bezier/">Google Code</a>, где можно найти свежай?ие версии исходников. Для связи с нами можете использовать комментарии к записям на этом блоге.<br />
Поехали!</p>
<p align="right"><font color="#0000ff"><em><strong>Александр Сергеев</strong></em> </font></p>
<blockquote><p><em><strong>Дембцкий:</strong> ну почему Сергееву не понравился тот милый розовый скин с сердечками?</em></p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://bezier.ru/?feed=rss2&amp;p=5</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
