include "circle.h" void drawCircleBresenham(int centerX,int centerY,float r) { glColor3f(0.0f,1.0f,0.0f);//设置点的颜色 glBegin(GL_POINTS);//以点的方式绘制 /此处填写绘制圆代码 设置像素点颜色为 glVertex2i(x,y)*/ printf("(%d,%d) r=%f\n",centerX,centerY,r); glEnd();//结束绘制 }直线圆函数,该函数分别传入了圆心坐标和半径 ,根据此函数完成圆的绘制
时间: 2024-03-15 21:47:47 浏览: 56
根据函数中的注释,我们需要使用Bresenham算法来绘制圆形的边界。具体来说,我们可以按照以下步骤进行绘制:
1. 定义变量x和y,分别表示当前像素点的横坐标和纵坐标,初始化为0。
2. 定义变量d,表示当前像素点离圆心的距离,初始化为r。
3. 在循环中,每次计算出下一个像素点的坐标和离圆心的距离,并根据Bresenham算法的原理选择正确的下一个像素点。
4. 在循环中,使用glVertex2i函数将像素点绘制出来。
5. 循环终止条件为x的值超过y的值,即已经绘制了一整个圆。
下面是完整的函数实现:
```c++
#include "circle.h"
void drawCircleBresenham(int centerX, int centerY, float r) {
glColor3f(0.0f, 1.0f, 0.0f); // 设置点的颜色
glBegin(GL_POINTS); // 以点的方式绘制
int x = 0, y = r, d = 3 - 2 * r; // 初始化坐标和距离
while (x <= y) { // 绘制一个八分之一圆
glVertex2i(centerX + x, centerY + y);
glVertex2i(centerX + x, centerY - y);
glVertex2i(centerX - x, centerY + y);
glVertex2i(centerX - x, centerY - y);
glVertex2i(centerX + y, centerY + x);
glVertex2i(centerX + y, centerY - x);
glVertex2i(centerX - y, centerY + x);
glVertex2i(centerX - y, centerY - x);
if (d < 0) {
d += 4 * x + 6;
} else {
d += 4 * (x - y) + 10;
y--;
}
x++;
}
glEnd(); // 结束绘制
}
```
这个函数绘制的是一个八分之一圆,通过重复绘制可以得到完整的圆形。
阅读全文