[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: plotted circle is regular decagon on opengl graphics
From: |
Daniel J Sebald |
Subject: |
Re: plotted circle is regular decagon on opengl graphics |
Date: |
Thu, 11 Aug 2016 14:25:36 -0500 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.7.2 |
On 08/11/2016 03:12 AM, Andreas Weber wrote:
Hi Tatsuro,
Am 11.08.2016 um 08:17 schrieb Tatsuro MATSUOKA:
Graphics tool kit: qt and fltk
plot (1:1, 'o', 'markersize', 24)
print -depsc circle.eps
plotted circle is regular decagon (ugly).
The code to draw the markers with OpenGL is in gl-render.cc
opengl_renderer::make_marker_list
case 'o':
{
double ang_step = M_PI / 5;
glBegin ((filled ? GL_POLYGON : GL_LINE_LOOP));
for (double ang = 0; ang < (2*M_PI); ang += ang_step)
glVertex2d (sz*cos (ang)/2, sz*sin (ang)/2);
glEnd ();
}
As you can see the decagon is hardcoded. AFAIK there is no "draw circle"
command in OpenGL so the only way to get a smoother circle would be to
increase the numer of segments.
I'm surprised there is no type of primitive for arcs in OpenGL (or its
utility library GLU) so that hardware/CPU optimization on graphics card
drivers could be used.
The performance cost is the cos/sin computations, not the underlying
driver. The driver essentially sweeps out the same arc no matter how
fine the angular resolution is (i.e., it may draw more polygon lines,
but the individual polygon lines are shorter so don't need as many
computations to complete).
Rik's changeset works, e.g., test:
graphics_toolkit ('qt')
plot(rand(6,1), rand(6,1), 'or')
set(get(gca,'children'),'MarkerSize',100)
set(get(gca,'children'),'MarkerFaceColor','green')
Attached is another algorithm using Pythagorean theorem that seems to
work too.
Dan
octave-nontrig_circle_symbol-djs2016aug11.patch
Description: Text Data