Еще остался один примитив, который является одним из главных. Это естественно окружность, а как примитив с расширенными возможностями лучше сразу рассмотреть эллипс. Над прорисовкой эллипса тоже постарался Брезенхейм и облегчил задачу всем программистам до сегодняшних дней.
Вот код рисования эллипса:
int CGIScreen::Ellipse(int exc, int eyc, int ea, int eb , unsigned char Color) { int elx, ely; long aa, aa2, bb, bb2, d, dx, dy; elx = 0; ely = eb; aa = (long)ea * ea; aa2 = 2 * aa; bb = (long)eb * eb; bb2 = 2 * bb; d = bb - aa * eb + aa/4; dx = 0; dy = aa2 * eb; PutPixel(exc, eyc - ely, Color); PutPixel(exc, eyc + ely, Color); PutPixel(exc - ea, eyc, Color); PutPixel(exc + ea, eyc, Color); while (dx < dy) { if (d > 0) { ely--; dy-=aa2; d-=dy;} elx++; dx+=bb2; d+=bb+dx; PutPixel(exc + elx, eyc + ely, Color); PutPixel(exc - elx, eyc + ely, Color); PutPixel(exc + elx, eyc - ely, Color); PutPixel(exc - elx, eyc - ely, Color); }; d+=(3 * (aa - bb)/2 - (dx + dy))/2; while (ely > 0) { if (d < 0) {elx++; dx+=bb2; d+=bb + dx;} ely--; dy-=aa2; d+=aa - dy; PutPixel(exc + elx, eyc + ely, Color); PutPixel(exc - elx, eyc + ely, Color); PutPixel(exc + elx, eyc - ely, Color); PutPixel(exc - elx, eyc - ely, Color); }; return 0; };/*Ellipse*/
Здесь координатами центральной точки эллипса являются параметры exc,eyc. Параметры ea,eb это ширина и высота эллипса, подставив вместо них одинаковые значения Вы сможете нарисовать окружность.
Теперь еще два более крупных примитива состоящих из линий. Первый это прямоугольник:
int CGIScreen::Rectangle(int x1,int y1,int x2,int y2, unsigned char color) { Line(x1,y1,x2,y1,color); Line(x1,y1,x1,y2,color); Line(x2,y1,x2,y2,color); Line(x1,y2,x2,y2,color); }/*Rectangle*/
и закращенный прямоугольник:
int CGIScreen::FillRectangle(int X1,int Y1,int X2,int Y2, unsigned char Color) { int I; if (Y1>Y2) {I=Y1;Y1=Y2;Y2=I;}; for (I=Y1;I<=Y2;I++) line(X1,I,X2,I,Color); }/*FillRectangle*/
Теперь на этой базе вы сможете строить более сложные объекты.