2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 Аппроксимация эллиптической дуги кривой Безье. Искажения?
Сообщение28.02.2014, 05:11 
Аватара пользователя
Вопрос таков, с математической точки зрения, насколько велики отклонения аппроксимации эллиптической дуги посредством кривой Безье? Скажем так, в каком знаке после запятой будут отклонения, если большую полуось эллипса принять за единицу, и от чего они будут зависеть (угол сектора, эксцентриситет...) ?

Вот пример кода, который это делает:

Код:
void arc_to_bezier(double cx, double cy, double rx, double ry,
                       double start_angle, double sweep_angle,
                       double* curve)
    {
        double x0 = cos(sweep_angle / 2.0);
        double y0 = sin(sweep_angle / 2.0);
        double tx = (1.0 - x0) * 4.0 / 3.0;
        double ty = y0 - tx * x0 / y0;
        double px[4];
        double py[4];
        px[0] =  x0;
        py[0] = -y0;
        px[1] =  x0 + tx;
        py[1] = -ty;
        px[2] =  x0 + tx;
        py[2] =  ty;
        px[3] =  x0;
        py[3] =  y0;

        double sn = sin(start_angle + sweep_angle / 2.0);
        double cs = cos(start_angle + sweep_angle / 2.0);

        unsigned i;
        for(i = 0; i < 4; i++)
        {
            curve[i * 2]     = cx + rx * (px[i] * cs - py[i] * sn);
            curve[i * 2 + 1] = cy + ry * (px[i] * sn + py[i] * cs);
        }
    }

 
 
 
 Re: Аппроксимация эллиптической дуги кривой Безье. Искажения?
Сообщение28.02.2014, 10:49 
Возьмём эллипс $\frac{x^2}{a^2}+\frac{y^2}{b^2}=1$ и дугу $[0,\alpha]$, где $\alpha \in (0, \frac{\pi}{2}) $. Каждая точка этой дуги имеет координаты $\left(\frac{ab}{\sqrt{a^2\tg^2\alpha+b^2}},\frac{ab\tg\alpha}{\sqrt{a^2\tg^2\alpha+b^2}}\right)$. Выразите координаты соответствующей точки на кривой Безье и возьмите расстояние между ними. Это и есть величина отклонения (для первой четверти) в зависимости от размера дуги и полуосей. Предполагаю, что точность окажется тем выше, чем меньше угол $\alpha$, а характеристики эллипса повлияют не так сильно, как число опорных точек.

 
 
 
 Re: Аппроксимация эллиптической дуги кривой Безье. Искажения?
Сообщение28.02.2014, 15:11 
sla-von в сообщении #831264 писал(а):
Вот пример кода, который это делает:
Делает что?
Считает отклонения?
Аппроксимирует дугу? Как аппроксимирует? По какому принципу? Вариантов-то куча.
И хоть какие-то ограничения на дугу эту имеются? Не весь же эллипс одной кривой аппрксимируется.
Humanoid в сообщении #831235 писал(а):
и от чего они будут зависеть (угол сектора, эксцентриситет...) ?

Ясен пень, от способа аппроксимации, и от параметров дуги.
Точнее, для конкретной фиксированной дуги (с такими-то эксцентриситетом, началом и концом) --- величина отклонений зависит от способа аппроксимации.
Каков бы он ни был, на готовую формулку надеяться трудно, но можно помудрить с алгоритмом оценки.
А при относительно малой дуге, наверное, можно и формулку прикинуть. Но всё равно трудно будет.

 
 
 [ Сообщений: 3 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group