|
|
编了一个很烂的程序测试两种画线算法的速度. 在画的线数少于250的时候DDA算法快.很莫名其妙,为什么有这样的差别.
#include <GL/gl.h>
#include <GL/glaux.h>
#include <time.h>
#define PNT(x, y) { glBegin (GL_POINTS); glVertex2i (x, y); glEnd (); }
void DDAline (int x0, int y0, int x1, int y1)
{
float i, j;
for (i = x0, j = y0; i <= x1; i += (x1 > x0)*2-1, j += 1.0*(y1 - y0)/(x1-x0))
PNT ((int)i, (int)j);
}
void BresehamLine (int x0, int y0, int x1, int y1)
{
int dx = x1 - x0, dy = y1 - y0;
int p0 = dy * 2 - dx, pk = p0;
int x, y;
for (x = x0+1, y = y0; x <= x1; x++) {
int key = pk > 0;
y += key;
pk += (dy << 1) - ((dx * key) << 1);
PNT (x, y);
}
}
int main(int argc, char** argv)
{
int x = 10, y = 10, i;
time_t bg, bg2;
auxInitDisplayMode (AUX_SINGLE | AUX_RGBA);
auxInitPosition (0, 0, 500, 500);
auxInitWindow (argv[0]);
glClearColor (0.0, 0.0, 0.0, 0.0);
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0, 1.0, 1.0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-500, 500, -500, 500, -1.0, 1.0);
bg = clock ();
for (i = 0; i < 250; ++i)
DDAline (0, 0, 500, 300);
bg = clock () - bg;
//glFlush ();
bg2 = clock ();
for (i = 0; i < 250; ++i)
BresehamLine (0, 0, 500, 300);
bg2 = clock () - bg2;
//glFlush ();
if (bg2 >= bg)
BresehamLine (0, 0, 100, 0);
glFlush ();
Sleep(2000);
return 0;
}
|
|