![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Banned
[+4 11.12.07]
[+4 18.03.08] Регистрация: Oct 2007
Сообщений: 269
|
Цитата:
Цитата:
|
|
|||||
|
Регистрация: Oct 2006
Сообщений: 2,283
|
Цитата:
1) создаешь битмапдата 3x3 (почему не 2x2 обьясню ниже) 2) расчет деформации // предусловие:
// {x1,y1},{x2,y2},{x3,y3} - координаты вершин рисуемого треугольниика
// {n1x,n1y},{n2x,n2y},{n3x,n3y} - координаты вершин в битмапдате 3x3
// m - матрица искомого преобразования
m = new Matrix();
var tmp=1/((n2x-n1x)*(n3x*n2y-n2x*n3y)-(n3x-n2x)*(n2x*n1y-n1x*n2y));
m.tx=((x1*n2x-x2*n1x)*(n3x*n2y-n2x*n3y)-(x2*n3x-x3*n2x)*(n2x*n1y-n1x*n2y))*tmp;
m.ty=((y1*n2x-y2*n1x)*(n3x*n2y-n2x*n3y)-(y2*n3x-y3*n2x)*(n2x*n1y-n1x*n2y))*tmp;
tmp=1/(n2x*n1y-n1x*n2y);
m.c=(n2x*x1-x2*n1x-m.tx*(n2x-n1x))*tmp;
m.d=(n2x*y1-y2*n1x-m.ty*(n2x-n1x))*tmp;
tmp=1/n1x;
m.a=(x1-m.c*n1y-m.tx)*tmp;
m.b=(y1-m.d*n1y-m.ty)*tmp;
// предусловие: // m - матрица посчитаная выше // map - битмапдата 3x3 // surface - MovieClip для рисования surface.beginBitmapFill(map, m, true); surface.moveTo(x1, y1); surface.lineTo(x2, y2); surface.lineTo(x3, y3); surface.endFill(); Теперь по поводу размера битмапки 3x3. В формулах битмаповые координаты s1x,s1y,... стоят в знаменателе и чтобы избежать деления на ноль, лучше сместить все координаты на 1. Т.е. битмапка для заливки должна быть примерно такая: ![]() Знаю написано довольно скомкано, если будут вопросы - спрашивай да, чуть не забыл. Формулы которые я привел выглядят довольно пугающе, но есть еще вариант по проще (содрал его не помню у кого). Работает он чуть медленее но зато выглядит красивше Последний раз редактировалось undefined; 03.12.2007 в 13:39. |
|
|||||
|
Banned
[+5 08.09.07]
[+4 17.01.08] Регистрация: Dec 2005
Сообщений: 556
|
Цитата:
|
|
|||||
|
Регистрация: Oct 2006
Сообщений: 2,283
|
согласен, в принципе должно работать. Кстати т.к. координаты вершин в битмапдате не меняются, формулы можно еще подсократить.
|
|
|||||
|
Banned
[+5 08.09.07]
[+4 17.01.08] Регистрация: Dec 2005
Сообщений: 556
|
|
![]() |
![]() |
Часовой пояс GMT +4, время: 03:12. |
|
|
« Предыдущая тема | Следующая тема » |
|
|