资源简介

该资源包主要包含了在dev环境下通过glut实现中点画线算法的完整代码

资源截图

代码片段和文件信息

#include 
#include 
#include
#include
#include
using namespace std;

int xs ys xe ye;

void init(void)
{
    glClearColor(1.0 1.0 1.0 0.0);  // Set display-window color to white.
    glMatrixMode(GL_PROJECTION);       // Set projection parameters.
    gluOrtho2D(0.0 200.0 0.0 150.0);
}

/*
    数值微分方法画线
*/
void MidpointLine(int x1 int y1 int x2 int y2)
{
    glColor3f(1.0 0.0 0.0);       // 红色
    glPointSize(2.0f);

    /*
        两点重合尚未判断glVertex2i(x y);
    */
    int x = x1 y = y1;
int a = y1 - y2 b = x2 - x1;
int cx = (b >= 0 ? 1 : (b = -b -1));
int cy = (a <= 0 ? 1 : (a = -a -1));

    glVertex2i(x y);
 
int d d1 d2;
if (-a <= b) // 斜率绝对值 <= 1
{
d = 2 * a + b;
d1 = 2 * a;
d2 = 2 * (a + b);
while(x != x2)
{
if (d < 0)
y += cy d += d2;
else
d += d1;
x += cx;
glVertex2i(x y);
}
}
else // 斜率绝对值 > 1
{
d = 2 * b + a; 
d1 = 2 * b;
d2 = 2 * (a + b);
while(y != y2) 

if(d < 0)
d += d1; 
else 
x += cx d += d2; 
y += cy; 
glVertex2i(x y);

}

}



void LineDDA1(int x1 int y1 int x2 int y2)
{
    glColor3f(0.0 0.0 0.0);       // 黑色
    glPointSize(2.0f);

    /*
        两点重合尚未判断
    */

    int dm = 0;
    if (abs(x2 - x1) >= abs(y2 - y1))
    {
        dm = abs(x2 - x1);              // x 为计长方向
    }
    else
    {
        dm = abs(y2 - y1);              // y 为计长方向
    }
    float dx = (float)(x2 - x1) / dm;   // 当 x 为计长方向,dx = 1
    float dy = (float)(y2 - y1) / dm;   // 当 y 为计长方向,dy = 1
    float x = x1;
    float y = y1;

    for (int i = 0; i < dm; ++i)
    {
        glBegin(GL_POINTS);
        glVertex2f((int)x (int)y);
        glEnd();
        glFlush();
        x += dx;
        y += dy;
    }
}


/*
    交换两个int 类型的变量的值
*/
void swap_value(int* a int* b)
{
    int tmp = *a;
    *a = *b;
    *b = tmp;
}


// 窗口大小改变时调用的登记函数
void ChangeSize(GLsizei w GLsizei h)
{

    if (h == 0)     h = 1;

    // 设置视区尺寸
    glViewport(0 0 w h);

    // 重置坐标系统
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();

    // 建立修剪空间的范围
    if (w <= h)
        glOrtho(0.0f 250.0f 0.0f 250.0f*h / w 1.0 -1.0);
    else
        glOrtho(0.0f 250.0f*w / h 0.0f 250.0f 1.0 -1.0);

}

void lineSegment()
{
//glClear(GL_COLOR_BUFFER_BIT);
glColor3f(0.0 0.0 0.0);
glBegin(GL_POINTS);
MidpointLine(xs ys xe ye);
glEnd();
glFlush();
}
/*

*/
void display(void)
{
    // 用当前背景色填充窗口,如果不写这句会残留之前的图像
    glClear(GL_COLOR_BUFFER_BIT);
    
     xs = 20; ys = 120; xe = 120; ye = 40;
    
    for(int i=8x12 = 10 y12 = 10 x22 = 210 y22 = 10;i>1;i--)
    {
     LineDDA1(x12 y12 x22 y22);
y12+=20;
y22+=20; 
    }
    for(int j=12x13=10y13=10x23=10y23=130;j>1;j--)
    {
     LineDDA1(x13 y13 x23 y23);
x13+=20;
x23+=20;
    }
  

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2018-09-11 15:48  2\
     文件        3513  2018-09-11 15:48  2\main.cpp
     文件      430774  2018-09-11 15:48  2\main.o
     文件        1358  2018-09-12 10:57  2\Makefile.win
     文件         944  2018-09-04 12:07  2\Project1.dev
     文件      460853  2018-09-11 15:48  2\Project1.exe
     文件         111  2018-09-12 10:57  2\Project1.layout
     文件         908  2018-09-04 11:19  2\项目1.dev
     文件      461365  2018-09-11 15:31  2\项目1.exe
     文件         111  2018-09-11 16:37  2\项目1.layout

评论

共有 条评论