📄 insertvalue.cpp
字号:
#include<GL/glut.h>
#include<math.h>
#include<iostream.h>
const maxN=32;
int nValue=16;
typedef struct tagPoint
{
float x;
float y;
}Point;
void init()
{
glClearColor(1.0,1.0,1.0,0.0);
glMatrixMode(GL_PROJECTION);
gluOrtho2D(-200.0,200.0,0.0,300.0);
}
void setPixel(float xCoord,float yCoord)
{
glBegin(GL_POINTS);
glVertex2i((int)200*xCoord,(int)200*yCoord);
glEnd();
}
void paintFx()
{
float x=-1.0;
float y;
glColor3f(0.0,0.0,0.0);
for(int k=0;k<1000;k++)
{
y=1.0/(1+25*x*x);
setPixel(x,y);
x+=0.002;
}
}
void insertValue(int n)//n等份点
{
Point points[maxN+1];
float diff[maxN+1];
float x=-1.0;
int i,j;
for(i=0;i<=n;i++)
{
points[i].x=x;
points[i].y=1.0/(1+25*x*x);
x+=2.0/n;
}
for(i=0;i<=n;i++)
diff[i]=points[i].y;
for (i=0;i<n;i++)
for(j=n;j>i;j--)
diff[j]=(diff[j]-diff[j-1])/(points[j].x-points[j-1-i].x);
glColor3f(1.0,0.0,0.0);
x=-1.0;
for(i=0;i<1000;i++)
{
float tmp=1.0,newton=diff[0];
for(j=0;j<n;j++)
{
tmp=tmp*(x-points[j].x);
newton+=tmp*diff[j+1];
}
setPixel(x,newton);
x+=0.002;
}
}
void paintAll()
{
glClear(GL_COLOR_BUFFER_BIT);
paintFx();//绘制f(x)
insertValue(nValue);
glFlush();
}
void main(int argc,char **argv)
{
cout<<"输入n等分的n值:"<<endl;
cin>>nValue;
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
glutInitWindowPosition(50,100);
glutInitWindowSize(400,300);
glutCreateWindow("Computing Method Programme");
init();
glutDisplayFunc(paintAll);
glutMainLoop();
}
/*
实验完成人:pb03011103 肖璟
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -