推导过程
代码部分
#include <GL/glut.h>
#include<iostream>
#include<Windows.h>
#include<math.h>
using namespace std;
void init() {
glClearColor(0.1, 0.5, 0.3, 1.0);
glMatrixMode(GL_PROJECTION);
gluOrtho2D(-250, 250.0, -250.0, 250.0);
glPointSize(2);
}
void draw(int x, int y) {
glBegin(GL_POINTS);
glVertex2i(x, y);
glEnd();
Sleep(1);
glFlush();
}
void Points(int x, int y)
{
draw(x, y);
draw(x, -y);
}
void MidPoint(int p)
{
int flag = 1;
if (p < 0) {
flag = 0;
p = abs(p);
}
int x, y;
float e;
x = 0;
y = 0;
e = 0.25 - 2.0 * p;
Points(x, y);
while (x <= 200){
float k = 0.5 * sqrt(2.0 * p) * pow(x, -0.5);
if(k < 1){
if (e >= 0) {
e += -2.0 * p;
}
else {
e += 2.0 * y + 2.0 - 2.0 * p;
y++;
}
x++;
}
else {
if (e >= 0) {
e += 2.0 * y + 3 - 2.0 * p;
x++;
}
else {
e += 2.0 * y + 3;
}
y++;
}
if (flag) {
Points(x, y);
}
else {
Points(-x, y);
}
}
}
void RenderScene() {
glClear(GL_COLOR_BUFFER_BIT);
int p;
while (1) {
cout << "输入p准焦距的值";
cin >> p;
MidPoint(p);
}
glFlush();
}
int main(int argc, char* argv[]) {
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
glutInitWindowPosition(100, 100);
glutInitWindowSize(600, 600);
glutCreateWindow("中点画抛物线 y**2 = 2px");
init();
glutDisplayFunc(RenderScene);
glutMainLoop();
return 0;
}
运行结果