推导过程
结果
代码
#include <gl/glut.h>
#include <math.h>
// 初始化OpenGL场景
void Initial() {
glClearColor(1.0f, 1.0f, 1.0f, 1.0f); //设置窗口背景颜色为白色
glMatrixMode(GL_PROJECTION); //设置投影参数
gluOrtho2D(-400.0, 400.0, -300.0, 300.0); // 投影面上的模型坐标范围
}
//中点BH画抛物线
void Paowuxian(int a, int b) {
int x, y;
float d1, d2;
x = 0;
y = 0;
d1 = a * (x + 0.5) - b * (y + 1) * (y + 1);//判别式
glBegin(GL_POINTS);
glVertex2i(x, y);
glVertex2i(x, -y);//补第四象限的图像
while (y < 0.5 * a / b) {
if (d1 <= 0) {
d1 += a - (2 * y + 3) * b;
y++;
x++;
}
else {
d1 -= (2 * y + 3) * b;
y++;
}
glVertex2i(x, y);
glVertex2i(x, -y);//补第四象限上对称的点
}//下半部分
d2 = a / 2 - b / 4;
while (x < 1000) { //由于抛物线不封闭会一直画下去,所以设置一个结束条件
if (d2 <= 0) {
d2 += a;
x++;
}
else {
d2 += a - (2 * y + 2) * b;
x++;
y++;
}
glVertex2i(x, y);
glVertex2i(x, -y);//补第四象限上对称的点
}
glEnd();
}//上半部分
// 显示图形
void Display(void) {
void Paowuxian(int a, int b);
glClear(GL_COLOR_BUFFER_BIT); //用当前背景色填充窗口
glColor3f(1.0f, 0.0f, 0.0f); //设置当前的绘图颜色为红色
Paowuxian(100,1);
glFlush(); //处理所有的OpenGL程序
}
int main(int argc, char* argv[]) {
glutInit(&argc, argv); // glut初始化
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);//初始窗口显示模式
glutInitWindowSize(800, 600); //设置窗口的尺寸
glutInitWindowPosition(200, 200); //设置窗口的位置
glutCreateWindow("基本图形生成"); //创建一个窗口
glutDisplayFunc(Display); //设置当前窗口的显示回调函数
Initial(); //完成窗口初始化
glutMainLoop(); //启动主GLUT事件处理循环
return 0;
}