实验一 多边形彩色填充
实验目的
学习并掌握Y-X扫描线算法
掌握基于 Win32、Visual C++环境下MFC编程绘制图形
实验原理
对任一条扫描线,确定该扫描线与多边形边的交点位置,自左向右存储,并对每对内部交点间的帧缓存填写指定颜色
算法步骤
扫描线链表
4. 边表ET :初始化时建立全局边表(ET),包含多边形所有边,按边端点的ymin排序存放。即:若该边的下端点为ymin,则该边就放在扫描线ymin对应的链表中。每条扫描线交的多边形的边按其下端点的x坐标增序排列。
5. 活跃边表AET:与当前扫描线相交的边称为活性边,按与扫描线交点x坐标递增的顺序存放在一个链表中,称此链表为活性边表(AET)
实验关键代码
CPolyFill::CPolyFill()
{
m_pEDGEs = NULL;
m_pET = NULL;
m_pAET = NULL;
MinY = 10000;
MaxY = -1;
MinX = 10000;
MaxX = -1;
}
CPolyFill::~CPolyFill()
{
if(m_pEDGEs) delete[] m_pEDGEs;
if(m_pET) delete[] m_pET;
if(m_pAET) delete[] m_pAET;
}
// 统计多边形各条边的信息,生成Edge结构。
void CPolyFill::BuildEDGEs()
{
if(m_pEDGEs)
{
delete[] m_pEDGEs; m_pEDGEs = NULL;
}
m_pEDGEs = new EDGE[m_PtNum];
for(int i = 0; i m_PtNum-1; i++)
{
if (m_Pts[i].y m_Pts[i+1].y)
{
m_pEDGEs[i].Up = m_Pts[i];
m_pEDGEs[i].Down = m_Pts[i+1];
}
else
{
m_pEDGEs[i].Up = m_Pts[i+1];
m_pEDGEs[i].Down = m_Pts[i];
}
m_pEDGEs[i].EG.Ymax = m_pEDGEs[i].Up.y ;
m_pEDGEs[i].EG.X = m_pEDGEs[i].Down.x;
m_pEDGEs[i].EG.Dx = double((m_pEDGEs[i].Up.x - m_pEDGEs[i].Down.x))/(m_pEDGEs[i].Up.y - m_pEDGEs[i].Down.y);
}
if (m_Pts[0].y m_Pts[m_PtNum-1].y)
{
m_pEDGEs[m_PtNum-1].Up = m_Pts[0];
m_pEDGEs[m_PtNum-1].Down = m_Pts[m_PtNum-1];
}
else
{
m_pEDGEs[m_PtNum-1].Up = m_Pts[m_PtNum-1];
m_pEDGEs[m_PtNum-1].Down = m_Pts[0];
}
m_pEDGEs[m_PtNum-1].EG.Ymax = m_pEDGEs[m_PtNum-1].Up.y ;
m_pEDGEs[m_PtNum-1].EG.X = m_pEDGEs[m_PtNum-1].Down.x;
m_pEDGEs[m_PtNum-1].EG.Dx = double((m_pEDGEs[m_PtNum-1].Up.x - m_pEDGEs[m_PtNum-1].Down.x))/(m_pEDGEs[m_PtNum-1].Up.y - m_pEDGEs[m_PtNum-1].Down.y);
}
void CPolyFill::Polygon(CPoint *pts, int cnt)
{
m_Pts = pts;
m_PtNum = cnt;
BuildEDGEs(); // 计算出每条多边形边的斜率,Ymax, Xmin等。
CreateET(); // 初始化全局边表
InitAET(); // 初始化活跃边表
}
void CPolyFill::CreateET()
{
GetMinMaxY(MinY,MaxY);
if(m_pET)
{
delete [] m_pET;
m_pET = NULL;
}
m_pET = new CArrayEdge,Edge[MaxY- MinY+1];
// Add
您可能关注的文档
- 常微分方程初值问题数值解法的计算机实现.doc
- 多路数据采集系统设计.doc
- 基于PHP旅游网站设计与实现.doc
- 基于51单片机简易计算器的设计毕业论文.doc
- 基于Java的Hannoi塔软件设计.doc
- JavaEE开发技术与案例教程教学课件ppt作者刘彦君金飞虎.pptx
- 全国电子商务大赛获奖作品.doc
- 基于java在线音乐系统的设计与实现毕业论文.doc
- 通信工程现代综合实训.doc
- 门禁控制系统管理制度.doc
- 河南许昌市鄢陵县2025-2026学年高一上学期10月月考语文试题.docx
- 黑龙江省新时代高中教育联合体2025-2026学年高三上学期期中联考巩固卷(一)语文试题.docx
- 黑龙江省新时代高中教育联合体2025-2026学年高一上学期期中联考巩固卷(二)语文试题.docx
- 江苏省南京七校联合学情调研2026届高三上学期10月月考语文试题.docx
- 湖北省黄冈市部分学校2025-2026学年高一上学期期中考试语文试题.docx
- 江苏省连云港市灌南县2025-2026学年高一上学期期中考试语文试题.doc
- 江苏省高邮市2025-2026学年高二上学期10月调研测试语文试题.docx
- 湖北省黄冈市普通高中2024-2025学年高二上学期期中考试语文试题.docx
- 河北省衡水市2025-2026学年高三上学期第四次调考语文试题(解析版).docx
- 黑龙江省绥化市新时代2025-2026学年高一上学期期中联考语文试题.docx
原创力文档

文档评论(0)