资源简介
江苏科技大学计科专业计算机图形学实验图形区域填充代码,列表应该还有实验报告
代码片段和文件信息
/**************************
* Includes
*
**************************/
#include
#include
#include “gl/glut.h“
#include “windows.h“
const int POINTNUM=7; //多边形点数.
/******定义结构体用于活性边表AET和新边表NET***********************************/
typedef struct XET
{
float x;
float dxymax;
XET* next;
}AETNET;
/******定义点结构体point******************************************************/
struct point
{
float x;
float y;
}
polypoint[POINTNUM]={2505055015055040025025010035010010012030};//多边形顶点
void PolyScan()
{
/******计算最高点的y坐标(扫描到此结束)****************************************/
int MaxY=0;
int i;
for(i=0;i if(polypoint[i].y>MaxY)
MaxY=polypoint[i].y;
/*******初始化AET表***********************************************************/
AET *pAET=new AET;
pAET->next=NULL;
/******初始化NET表************************************************************/
NET *pNET[1024];
for(i=0;i<=MaxY;i++)
{
pNET[i]=new NET;
pNET[i]->next=NULL;
}
glClear(GL_COLOR_BUFFER_BIT); //赋值的窗口显示.
glColor3f(0.00.00.0); //设置直线的颜色红色
glBegin(GL_POINTS);
/******扫描并建立NET表*********************************************************/
for(i=0;i<=MaxY;i++)
{
for(int j=0;j if(polypoint[j].y==i)
{ //一个点跟前面的一个点形成一条线段,跟后面的点也形成线段
if(polypoint[(j-1+POINTNUM)%POINTNUM].y>polypoint[j].y)
{
NET *p=new NET;
p->x=polypoint[j].x;
p->ymax=polypoint[(j-1+POINTNUM)%POINTNUM].y;
p->dx=(polypoint[(j-1+POINTNUM)%POINTNUM].x-polypoint[j].x)/(polypoint[(j-1+POINTNUM)%POINTNUM].y-polypoint[j].y);
p->next=pNET[i]->next;
pNET[i]->next=p;
}
if(polypoint[(j+1+POINTNUM)%POINTNUM].y>polypoint[j].y)
{
NET *p=new NET;
p->x=polypoint[j].x;
p->ymax=polypoint[(j+1+POINTNUM)%POINTNUM].y;
p->dx=(polypoint[(j+1+POINTNUM)%POINTNUM].x-polypoint[j].x)/(polypoint[(j+1+POINTNUM)%POINTNUM].y-polypoint[j].y);
p->next=pNET[i]->next;
pNET[i]->next=p;
}
}
}
/******建立并更新活性边表AET*****************************************************/
for(i=0;i<=MaxY;i++)
{
//计算新的交点x更新AET
NET *p=pAET->next;
while(p)
{
p->x=p->x + p->dx;
p=p->next;
}
//更新后新AET先排序*************************************************************/
//断表排序不再开辟空间
AET *tq=pAET;
p=pAET->next;
tq->next=NULL;
while(p)
{
while(tq->next && p->x >= tq->next->x)
tq=tq->next;
NET *s=p->next;
p->next=tq->next;
tq->next=p;
p=s;
tq=pAET;
}
//(改进算法)先从AET表中删除ymax==i的结点****************************************/
AET *q=pAET;
p=q->next;
while(p)
{
if(p->ymax==i)
{
q->next=p->next;
delete p;
p=q->next;
}
else
{
q=q->next;
p=q->next;
}
}
//将NET中的新点加入AET并用插入法按X值递增排序**********************************/
p=p
- 上一篇:计算机面试常见题目及答案
- 下一篇:粒子滤波目标跟踪算法
相关资源
- 计算机图形学正十二面体旋转
- 山东大学图形学实验三:半边结构,
- 计算机图形学消隐实验转
- 计算机图形学实验报告
- 计算机图形学,实现茶壶旋转,颜色
- VC++计算机图形学制作二维图形变换代
- 计算机图形学作业原创C/C++ VC++6.0,
- VC++6.0编写的画图软件
- 计算机图形学MFC
- 计算机图形学大作业 用vc++编的,包括
- 计算机图形学动态图形源代码
- 计算机图形学作业源程序
- graphics C语言图形学画汽车,多边形扫
- 计算机图形学三维变换
- 计算机图形学大实验直线DDA和bresenh
- 计算机图形学 OPENGL 多边形填充 有序
- MFC图形学透视投影
- 图形学矩阵、向量类C++实现
- 计算机图形学扫描线填充算法
- Koch曲线算法 计算机图形学 孔令德 案
- 计算机图形学旋转茶壶
- 计算机图形学实验 绘制渐变三角形
- 计算机图形学实验——科赫雪花
- 图形学试验-平移对称旋转缩放算法
- C语言 种子填充 计算机图形学
- 计算机图形学课程设计源代码
- 图形学c语言动画-会动的汽车
- c++ OpenGL DDA/Bresenham 算法画直线, 多
- 光线跟踪纯C++)
- 计算机图形学-简单的会动机器人
评论
共有 条评论