資源簡介
采用完全Bresenham算法生成橢圓,有別于中點Bresenham算法生成橢圓
代碼片段和文件信息
#include?
#include?
void?drawEllipse?(int?a?int?b?int?xLoc?int?yLoc)?
{?
??????glPushMatrix?();?
?????int?x?y;?
?????float?p1?p2?aa?bb;?
?????aa?=?a?*?a;?
?????bb?=?b?*?b;?
?????p1?=?-2*b+1;?
?????glTranslatef?((GLfloat)?xLoc?(GLfloat)?yLoc?0.0f);?
?????x?=?0;??
?????y?=?b;?
?????glBegin?(GL_POINTS);?
?????glVertex2i?(?x??y);?
?????glVertex2i?(-x??y);?
?????glVertex2i?(-x?-y);?
?????glVertex2i?(?x?-y);?
?????while?(bb*x ?????{???
?????????if?(p1?<=0)?
?????????{?p1+=(2*bb*(2*x+1))/a*a;
??
????????
?????????}?
?????????else
?????????????{?p1+=2*bb*(2*x+1)/a*a+2*(-2*y+1)+2;
??????
????????????
?????????????--?y;?
?????????????}?
?????????++?x;?
?????????glVertex2i?(?x??y);?
?????????glVertex2i?(-x??y);?
?????????glVertex2i?(-x?-y);?
?????????glVertex2i?(?x?-y);?
?????}?
?????p2?=?2*y*y-2*y-2*(aa*bb-bb*x*x)/aa+1;//2*x*x+2*x-2*(aa*bb-aa*(y-1)*(y-1))/bb+1;?
?????while?(y>0)?
?????{????
??????????if?(p2?<=?0)?
??????????{?
?????????????++?x;?
?????????????p2+=2*aa*(-2*y+1)/bb+2*(2*x+1)+2;?
?
??????????}?
??????????else
??????????{
?????????????p2+=2*aa*(-2*y+1)/bb;?
?
??????????}?
??????????--?y;?
??????????glVertex2i?(?x??y);?
- 上一篇:飛機訂票系統,c++程序
- 下一篇:C語言寫矩陣庫,適合做矩陣運算
評論
共有 條評論