Аффинные преобразования дуги эллипса
От: McSeem2 США http://www.antigrain.com
Дата: 08.05.06 01:40
Оценка:
Есть дуга эллипса на плоскости, заданная следующими параметрами:
x0,y0 — начальная точка дуги
x1,y1 — конечная точка дуги
rx,ry — радиусы по X и Y
x_rotation — угол поворота оси 0X эллипса относительно 0X системы координат.
large_arc_flag, sweep_flag — флаги, определяющие, какую из 4-х дуг рисовать (но это не так существенно)
Полностью опсисание здесь:
http://www.w3.org/TR/SVG11/paths.html#PathDataEllipticalArcCommands

К этой дуге применяются аффинные преобразования на плоскости, то есть, произвольная комбинация из поворотов, масштабирований, параллелограммных искажений (shear) и параллельных переносов. Формула для преобразований:


Известно, что при любых невырожденных аффинных преобразованиях эллипс остается эллипсом. Все, что требуется — это найти новый угол поворота и радиусы. В общем-то, дуга здесь ни при чем, поскольку мы можем вычислить центр эллипса, а все остальное нам известно. Таким образом, задача сводится к находждению нового эллипса, а точнее, радиусов и угла поворота.

Более сложная задача — проделать то же самое для перспективных преобразований. Похоже, что при любых перспективных искажениях, эллипс тоже остается эллипсом.

Есть какие идеи?
McSeem
Я жертва цепи несчастных случайностей. Как и все мы.
Re: Аффинные преобразования дуги эллипса
От: Кодт Россия  
Дата: 08.05.06 09:35
Оценка: 13 (1)
Здравствуйте, McSeem2, Вы писали:

MS>Известно, что при любых невырожденных аффинных преобразованиях эллипс остается эллипсом. Все, что требуется — это найти новый угол поворота и радиусы. В общем-то, дуга здесь ни при чем, поскольку мы можем вычислить центр эллипса, а все остальное нам известно. Таким образом, задача сводится к находждению нового эллипса, а точнее, радиусов и угла поворота.


MS>Более сложная задача — проделать то же самое для перспективных преобразований. Похоже, что при любых перспективных искажениях, эллипс тоже остается эллипсом.


Не хочу погружаться в математику... а идея вот какая.
Эллипс — это окружность (единичного радиуса, с центром в начале координат) после некоторого аффинного преобразования A0. Поскольку аффинные преобразования образуют группу, то:
1) по описанию эллипса находим A0
2) берём заданное преобразование A (применяемое уже к эллипсу)
3) получаем A1 = A0*A
4) применяем его к базовой окружности, и — вуаля — имеем новый эллипс.
Всё, что нам нужно уметь — это находить угол поворота эллипса по матрице A1. (Собственные векторы матрицы, да?)
Перекуём баги на фичи!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.