NewTOAPIA.Drawing.math_stroke.calc_arc C# (CSharp) Method

calc_arc() public method

public calc_arc ( IVertexDest vc, double x, double y, double dx1, double dy1, double dx2, double dy2 ) : void
vc IVertexDest
x double
y double
dx1 double
dy1 double
dx2 double
dy2 double
return void
        void calc_arc(IVertexDest vc,
                      double x, double y,
                      double dx1, double dy1,
                      double dx2, double dy2)
        {
            double a1 = Math.Atan2(dy1 * m_width_sign, dx1 * m_width_sign);
            double a2 = Math.Atan2(dy2 * m_width_sign, dx2 * m_width_sign);
            double da = a1 - a2;
            int i, n;

            da = Math.Acos(m_width_abs / (m_width_abs + 0.125 / m_approx_scale)) * 2;

            add_vertex(vc, x + dx1, y + dy1);
            if (m_width_sign > 0)
            {
                if (a1 > a2) a2 += 2 * Math.PI;
                n = (int)((a2 - a1) / da);
                da = (a2 - a1) / (n + 1);
                a1 += da;
                for (i = 0; i < n; i++)
                {
                    add_vertex(vc, x + Math.Cos(a1) * m_width, y + Math.Sin(a1) * m_width);
                    a1 += da;
                }
            }
            else
            {
                if (a1 < a2) a2 -= 2 * Math.PI;
                n = (int)((a1 - a2) / da);
                da = (a1 - a2) / (n + 1);
                a1 -= da;
                for (i = 0; i < n; i++)
                {
                    add_vertex(vc, x + Math.Cos(a1) * m_width, y + Math.Sin(a1) * m_width);
                    a1 -= da;
                }
            }
            add_vertex(vc, x + dx2, y + dy2);
        }