Есть дуга эллипса на плоскости, заданная следующими параметрами:
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) и параллельных переносов. Формула для преобразований:
Известно, что при любых невырожденных аффинных преобразованиях эллипс остается эллипсом. Все, что требуется — это найти новый угол поворота и радиусы. В общем-то, дуга здесь ни при чем, поскольку мы можем вычислить центр эллипса, а все остальное нам известно. Таким образом, задача сводится к находждению нового эллипса, а точнее, радиусов и угла поворота.
Более сложная задача — проделать то же самое для перспективных преобразований. Похоже, что при любых перспективных искажениях, эллипс тоже остается эллипсом.
Есть какие идеи?