exporting patch: # HG changeset patch # User Daniel J Sebald # Date 1470943121 18000 # Thu Aug 11 14:18:41 2016 -0500 # Node ID e05e5775f7736d7bed7a2203f68edfeda95dedf5 # Parent 16efd0403698c1736db5aeeeadf08738cfece1a8 Use non-trig formula for rendering a circle * gl-render.cc (make_marker_list): Sweep across the x-axis pixel resolution rather than arc angle when rendering circle symbol. diff --git a/libinterp/corefcn/gl-render.cc b/libinterp/corefcn/gl-render.cc --- a/libinterp/corefcn/gl-render.cc +++ b/libinterp/corefcn/gl-render.cc @@ -3841,15 +3841,14 @@ opengl_renderer::make_marker_list (const break; case 'o': { - int div = static_cast (M_PI * sz / 4); - if (! (div % 2)) - div += 1; // ensure odd number for left/right symmetry - div = std::max (div, 5); // ensure at least a few vertices are drawn - double ang_step = M_PI / div; + int x_limit = sz/2; + double x_limit_squared = x_limit * x_limit; glBegin (filled ? GL_POLYGON : GL_LINE_LOOP); - for (double ang = 0; ang < 2*M_PI; ang += ang_step) - glVertex2d (sz/2*cos (ang), sz/2*sin (ang)); + for (int x = x_limit; x > -x_limit; x--) + glVertex2d (x, sqrt (x_limit_squared - x*x)); + for (int x = -x_limit; x < x_limit; x++) + glVertex2d (x, -sqrt (x_limit_squared - x*x)); glEnd (); } break;