#include "circle.h" void drawcircleBresenham(int centerX,int centerY,float r) {glCo1or3F(6.BF,1.BF,6.Of);//设置点的颜色 glBegin(GL_POINTS);//以点的方式绘制 /*此处填写绘制圆代码*设置像素点颜色为glUertex2i(x,y)*/printf("(%d,%d) r=%f\n",centerX,centerY,r); glEnd();//结束绘制补充代码使其可以通过拖拽绘制圆
时间: 2024-03-16 07:40:57 浏览: 24
要实现通过拖拽绘制圆的功能,你需要在OpenGL的鼠标事件中添加对应的逻辑。具体的实现方式可以是:
1. 在鼠标按下事件中记录下鼠标的初始位置,作为圆心的坐标。
2. 在鼠标拖拽事件中计算出鼠标当前位置与初始位置之间的距离,作为圆的半径。
3. 调用绘制圆的函数,将圆心坐标和半径作为参数传递给函数即可。
以下是示例代码:
```
#include "circle.h"
int centerX, centerY; // 记录圆心坐标
float radius = 0.0f; // 记录圆的半径
void onMouseDown(int button, int state, int x, int y) {
if (button == GLUT_LEFT_BUTTON && state == GLUT_DOWN) {
// 鼠标左键按下,记录下当前位置作为圆心坐标
centerX = x;
centerY = y;
}
}
void onMouseDrag(int x, int y) {
// 计算出鼠标当前位置与初始位置之间的距离,作为圆的半径
radius = sqrt((x - centerX) * (x - centerX) + (y - centerY) * (y - centerY));
}
void onDraw() {
glClear(GL_COLOR_BUFFER_BIT);
// 绘制圆
drawcircleBresenham(centerX, centerY, radius);
// 刷新屏幕
glutSwapBuffers();
}
int main(int argc, char* argv[]) {
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE);
glutInitWindowSize(800, 600);
glutCreateWindow("Draw Circle by Dragging");
glutDisplayFunc(onDraw);
glutMouseFunc(onMouseDown);
glutMotionFunc(onMouseDrag);
glutMainLoop();
return 0;
}
```