最近写了很多的图形学方面的程序,给大家分享下。
源代码如下,需要opengl库函数的支持。
#include <GL/glut.h>
#include<Windows.h>
GLfloat bc=0.0001f;
int sign=0;
void drawparabola(GLfloat point[10][2],GLint num)
{
GLfloat px,py;
GLint i=0;
for(i=0;i<num-2;i++)
{ GLfloat t,tempt;
if(i==0||i==num-3)
{
if(sign==0)
{ tempt=0.0f;sign=1;}
else
{ tempt=0.5f;sign=0;}
for(t=tempt;t<(tempt+0.5f);)
{
px=(2*t*t-3*t+1)*point[i][0]+(4*t-4*t*t)*point[i+1][0]+(2*t*t-t)*point[i+2][0];
py=(2*t*t-3*t+1)*point[i][1]+(4*t-4*t*t)*point[i+1][1]+(2*t*t-t)*point[i+2][1];
t=t+bc;
glColor3f(1.0,1.0,0.0);
glBegin(GL_POINTS);
glVertex2f(px,py);
glEnd();
}
}
}
for(i=0;i<num-3;i++)
{ GLfloat t;
for(t=0.0f;t<=0.5f;)
{
px=(-4*t*t*t+4*t*t-t)*point[i][0]+(12*t*t*t-10*t*t+1)*point[i+1][0]+(-12*t*t*t+8*t*t+t)*point[i+2][0]+(4*t*t*t-2*t*t)*point[i+3][0];
py=(-4*t*t*t+4*t*t-t)*point[i][1]+(12*t*t*t-10*t*t+1)*point[i+1][1]+(-12*t*t*t+8*t*t+t)*point[i+2][1]+(4*t*t*t-2*t*t)*point[i+3][1];
t=t+bc;
glColor3f(1.0,0.0,0.0);
glBegin(GL_POINTS);
glVertex2f(px,py);
glEnd();
}
}
}
void display()
{
GLfloat point[7][2]={{-0.7f,-0.2f},{-0.5f,0.6f},{-0.2f,-0.2f},{0.4f,0.6f},{0.6f,-0.2f},{0.8f,0.6f},{1.0,-0.2f}};
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0,0.0,0.0);//设置当前颜色状态为红色
drawparabola(point,7);
glFlush();//发送缓冲区
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB|GLUT_SINGLE);
glutInitWindowPosition(100, 100);
glutInitWindowSize(400, 400);
glutCreateWindow("抛物样条曲线");
glutDisplayFunc(display);
glutMainLoop();
return 0;
}