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);
}