Общие принципы векторной графики
Разум так же близок к истине, как многоугольник к кругу, ибо чем больше число углов вписанного многоугольника, тем больше он приблизится к кругу, но никогда не станет равным кругу даже и в том случае, когда углы будут умножены до бесконечности.
Николай Кузанский
Из школьного курса, который вы, может быть, успели забыть, следует, что определенную линию, например прямую или параболу, можно представить двумя способами:
- аналитически, когда используется математическая формула;
- графически, или геометрически, когда она изображается визуально на плоскости.
Соблазнительно предположить, что и все многообразие линейной графики можно представить в виде формул, которые бы ее описывали и позволяли экономно фиксировать.
Замечание
Вспомним кстати, что пиксельная графика, которая рассматривалась в части III, по критерию экономичности явно проигрывает линейной графике.
Но дело осложняется тем, что составление такой формулы является отнюдь не тривиальной задачей и ее создание может потребовать такое огромное количество времени, что эта процедура станет абсолютно нерентабельной. Более того, необходимость непрерывно изменять форму кривой полностью делает еще более затруднительным такое предположение. Но и расставаться с такой возможностью жаль.
Поэтому, естественно, в этой ситуации возникает идея, как бы с помощью одной-единственной формулы описать все многообразие кривых, используемых в линейной графике.
Но как это сделать? Следует опять мысленно вернуться к принципам пиксельной графики, в основе которой лежит технология дискретизации (разделение плоского изображения на равные площадки – пикселы) и попытаться применить тот же принцип для линейных изображений.
Информацию о принципах пиксельной графики см. в части III.
Разумеется, теперь и дискретизация приобретет иной характер – линейный, т. е. пространственная дискретизация, на которой основана пиксельная графика, сменится на линейную, поскольку имеется только одно измерение – вдоль линии.
И если уж разбивать произвольные кривые на отдельные фрагменты (сегменты), разумно принять следующие исходные условия:
- разбивать линии на достаточно мелкие (короткие) фрагменты;
- выбрать наиболее простую формулу (функцию) для их описания.
Самой простой функцией, естественно, является линейная зависимость, с помощью которой описывается прямая линия – кратчайшее расстояние между двумя точками, лежащими на плоскости.
Разбивая линейный рисунок на достаточно мелкие элементы дискретизации и соединяя полученные точки дискретизации прямыми, можно с помощью исчислимого (конечного) количества этих прямых представить любой линейный объект и любую сложную кривую.
Самым главным достоинством такой технологии является, естественно, простота; для каждой точки достаточно всего двух чисел, определяющих координаты этих точек. Таким образом, огромную кривую можно описать всего-навсего сотней пар чисел.
Однако указанная простота является причиной серьезных недостатков.
- Объекты, составленные только из прямолинейных сегментов, лишаются возможности произвольного масштабирования. Пока отрезки достаточно мелкие, они не создают впечатления угловатости, но при значительном коэффициенте увеличения углы становятся очевидными.
- Форма объекта, аппроксимированного линейными отрезками, может изменяться, например при вращении.
- Для совершенно достоверной аппроксимации формы объекта, когда окружность выглядит как окружность, а не как многоугольник, потребуются десятки тысяч линейных сегментов.
Замечание
Такой принцип по-прежнему используется, например в системах, связанных с режущими устройствами.
Указанные недостатки заставляют искать другие способы описания формы объектов и использовать более сложные кривые, в частности кривые более высоких степеней (второй, третьей и т. д.).
Пример-метафора
Упрощенно говоря, задача формулируется так: найти некий набор заготовок, каких-нибудь бесконечно гибких проволочек, из которых мы единообразным способом с помощью одной и той же формулы получим самые разные формы.
А уже из этих форм составим цепочку, т. е. последовательно свяжем их друг с другом и получим любой произвольный объект.
Для того чтобы перейти к таким кривым, необходимо вспомнить об исторических корнях.