資源簡介
該資源包主要包含了在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?????{
????????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
- 上一篇:FFT Verilog代碼
- 下一篇:常用電容封裝,帶3D,鉭電容封裝
評論
共有 條評論