bresenham算法画圆c语言,Bresenham算法画圆及Open Gl实现

输入圆的半径R。

计算初始值d=1-R、x=0、y=R。

绘制点(x,y)及其在八分圆中的另外七个对称点。

判断d的符号。若d≤0,则先将d更新为d+2x+3,再将(x,y)更新为(x+1,y);否则先将d更新为d+2(x-y)+5,再将(x,y)更新为(x+1,y-1)。

当x ≤y时,重复步骤3和4。否则结束。

Open Gl实现

头文件

#include

#include

#include

#include

#include

画圆

void DrawCircle() {

int r;

cin >> r;

int d = 1 - r;

int x = 0, y = r;

glClear(GL_COLOR_BUFFER_BIT);

glColor3f(1.0, 0.0, 0.0);

glBegin(GL_POINTS);

while (x <= y) {

glVertex2i(x, y);

glVertex2i(y, x);

glVertex2i(-y, x);

glVertex2i(-x, y);

glVertex2i(-x, -y);

glVertex2i(-y, -x);

glVertex2i(y, -x);

glVertex2i(x, -y);

if (d <= 0)

d += 2 * x + 3;

else {

d += 2 * (x - y) + 5;

y--;

}

x++;

}

glEnd();glFlush();

}

主函数

int main(int argc, char** argv) {

glutInit(&argc, argv);//glut初始化

glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);// 显示模式:双缓冲、RGBA

glutInitWindowPosition(50, 100);

glutInitWindowSize(400, 400);

glutCreateWindow("Draw");

glClearColor(1.0, 1.0, 1.0, 1.0);// 缓存清空后的颜色值

glMatrixMode(GL_PROJECTION);

glLoadIdentity();//恢复初始坐标系

gluOrtho2D(-200, 200.0, -200, 200.0);

int choice = 0;

cin >> choice;

if(choice==1)

glutDisplayFunc(DrawLine);

if(choice==2)

glutDisplayFunc(DrawCircle);

if(choice==3)

glutDisplayFunc(DrawEllipse);

// 通知开始GLUT的内部循环

glutMainLoop();

return 0;

}

输入示例

d318ce8f2aa3?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

输入示例

运行结果

d318ce8f2aa3?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

运行结果

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值