您的位置:首页 > 运维架构

OpenGL之中点划直线(y=kx+b)

2016-03-24 21:47 344 查看
/*
pb-图形学题1;
中点画线;
虽然做出来了,但还有许多函数不懂;
给出k,起始点坐标,直线长度,画y=kx+b直线;
f=kx+b-y;
d[i]=k(x[i]+1)+b-(y[i]+0.5);
d[i+1]=k(x[i]+2)+b-(y[i+1]+0.5);
△d=d[i+1]-d[i]=k-(y[i+1]-y[i]);
d=d+k     (d<0)
d=d+k-1   (d>=0)
d[0]=k+0.5;
*/

#include <GL/glut.h>
#include<cstdio>
int x,y,len;
double k;
void init()
{
glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);                 //什么单缓存的东西,现在不懂什么意思,就当通用条件
glutInitWindowPosition(100, 100);                            //图片出现的位置
glutInitWindowSize(400, 300);                                //图片的长和宽
glutCreateWindow("pb-图形学题1");                            //图片的名字

glClearColor(0.0, 0.0, 0.0, 0.0);
glMatrixMode(GL_PROJECTION);
gluOrtho2D(-10000, 10000, -10000, 10000);
}
void setPixel (GLint x,GLint y,GLint nx,GLint ny)               //描点函数,表示从x,y到nx,ny的矩形全部涂色
{
glBegin(GL_LINES);
glVertex2i(x, y);
glVertex2i(nx,ny);
glEnd();
}
void myDisplay(void)                                              //中点直线算法
{
glRectf(-0.5f, -0.5f, 0.5f, 0.5f);
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0, 0.0, 0.0);                                    //线的颜色

int nx,ny;
double d;
len+=x;
d=k+0.5;
while (x<=len)
{
nx=x+1;
if (d<0)
{
d+=k;
ny=y;
}
else
{
d+=k-1;
ny=y+1;
}
setPixel(x,y,nx,ny);
x=nx;
y=ny;
}
glFlush();                                                   //不知道什么东西,一定要写。
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
printf("请输入直线的斜率,起始点坐标,直线的长度:\n");
scanf("%lf%d%d%d",&k,&x,&y,&len);
init();                                                     //初始化数据
glutDisplayFunc(&myDisplay);                                //调用函数
glutMainLoop();                                             //开始程序
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: