4.5.4. Твининг в искусстве и анимации Можно создать интересную анимацию, которая показывает, как одна фигура совершает «твин-пре-образование» в другую. Эта процедура наиболее проста в том случае, если обе эти фигуры являются ломаными линиями (или семействами ломаных) и состоят из одного и того же числа точек. Предположим, что первая фигура, которую мы обозначим Л, состоит из ломаной линии с множеством точек Л,., а вторая фигура В - из ломаной с множеством точек В., где i ** 0,..., и - 1. В этом случае мы можем создать ломаную P(t), называемую «твином в г», состоящую из точек:

PjLt)-(l-t)A.+ tBr

Если мы посмотрим на последовательность значений t между 0 и 1, скажем, t = 0, 0,1,0,2.....0,9,1,0, то увидим, что эта ломаная начинается с формы Л и заканчивается формой Л, а в промежутке является переходной между этими двумя формами. При малых значениях г она похожа на Л, однако по мере роста t форма этой ломаной плавно деформируется в сторону формы, близкой к Л. К примеру, при t - 0,25 точка Р,(0,25) твина находится в 25 % пути от Л к Л.

На рис. 4.21 показан простой пример, в котором ломаная Л имеет форму домика, а ломаная В имеет форму буквы Т. Точка R на домике соответствует точке S на букве Т. Различные твины точки R на домике и точки S на букве Т расположены на прямой между R и S. Твин для t = 1/2 расположен в средней точке отрезка RS. Промежуточные ломаные показывают формы твинов для t - 0, 0,25, 0,25,0,75,1,0.

Глава 4. Векторные инструменты для графики

Френсис Хилл

Рис. 4.21. Превращение буквы Т в домик Листинг 4.2. Твининг двух ломаных

void Canvas:: drawTween(Point2 А[]. Point2 В[]. int п. float t) {

// draw the tween at time t between polylines A and В // рисуем твин в момент t между ломаными А и В

for(int i - 0: i < п: i++)

{

Point2 P:

P - Tween(A[i]. B[i]. t): if(i - 0) moveTo(P.x. P.y): else 1ineTo(P.x. P.y):

}

}

Листинг 4.2 представляет собой подпрограмму drawTweenC), рисующую твин двух ломаных Л и В, каждая из которых имеет п вершин, для заданного значения t.


⇐ Предыдущая| |Следующая ⇒