多边形有效边表填充算法Word文件下载.docx
- 文档编号:14070802
- 上传时间:2022-10-18
- 格式:DOCX
- 页数:14
- 大小:215.53KB
多边形有效边表填充算法Word文件下载.docx
《多边形有效边表填充算法Word文件下载.docx》由会员分享,可在线阅读,更多相关《多边形有效边表填充算法Word文件下载.docx(14页珍藏版)》请在冰豆网上搜索。
public
Bucket(void);
〜Bucket(void);
intScanline;
AET*p;
Bucket*next;
};
(3)定义菜单
(4)添加菜单处理程序
(5)定义视图头文件
//scanfillView.h:
CscanfillView
//
类的接口
Bucket.h"
#defineNumber7
classCscanfillView:
publicCView
protected:
//仅从序列化创建
CscanfillView();
DECLARE_DYNCREATE(CscanfillView)
//属性
CscanfillDoc*GetDocument()const;
//操作public:
voidPolygonFill();
//上闭下开填充多边形
voidCreatBucket();
//建立桶节点
voidEt();
//构造边表
voidAddEdge(AET*);
//将边插入AET表
voidEdgeOrder();
//对AET表进行排序
//重写
virtualvoidOnDraw(CDC*pDC);
//重写以绘制该视图
virtualBOOLPreCreateWindow(CREATESTRUCT&
cs);
protected:
virtualBOOLOnPreparePrinting(CPrintlnfo*pInfo);
virtualvoidOnBeginPrinting(CDC*pDC,CPrintInfo*pInfo);
virtualvoidOnEndPrinting(CDC*pDC,CPrintInfo*pInfo);
//实现public:
virtual~CscanfillView();
#ifdef_DEBUG
virtualvoidAssertValid()const;
virtualvoidDump(CDumpContext&
dc)const;
#endifprotected:
COLORREFGetColor;
//调色板
CPointPoint[7];
//定义多边形
Bucket*HeadB,*CurrentB;
//桶的头结点和当前节点
AETE[Number],*HeadE,*CurrentE,*T1,*T2;
//有效边表的节点
//生成的消息映射函数protected:
DECLARE_MESSAGE_MAP()
afx_msgvoidOnMenuAET();
#ifndef_DEBUG//scanfillView.cpp中的调试版本
inlineCscanfillDoc*CscanfillView:
:
GetDocument()const
{returnreinterpret_cast<
CscanfillDoc*>
(m_pDocument);
}
#endif
(6)实现视图
//scanfillView.cpp:
CscanfillView类的实现
stdafx.h"
scanfill.h"
scanfillDoc.h"
scanfillView.h"
#definenewDEBUG_NEW
#defineROUND(a)int(a+0.5)//定义四舍五入
//CscanfillView
IMPLEMENT_DYNCREATE(CscanfillView,CView)
BEGIN_MESSAGE_MAP(CscanfillView,CView)
//标准打印命令
ON_COMMAND(ID_FILE_PRINT,&
CView:
OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT,&
OnFilePrint)ON_COMMAND(ID_FILE_PRINT_PREVIEW,&
OnFilePrintPreview)ON_COMMAND(ID_MenuAET,&
CscanfillView:
OnMenuAET)END_MESSAGE_MAP()
//CscanfillView构造/析构
CscanfillView:
CscanfillView()
//TODO:
在此处添加构造代码
//设置多边形的个顶点
Point[0]=CPoint(550,400);
Point[1]=CPoint(350,600);
Point[2]=CPoint(250,350);
Point[3]=CPoint(350,50);
Point[4]=CPoint(500,250);
Point[5]=CPoint(600,50);
Point[6]=CPoint(800,450);
〜CscanfillView()
BOOLCscanfillView:
PreCreateWindow(CREATESTRUCT&
cs)
在此处通过修改
//CREATESTRUCTcs来修改窗口类或样式
returnCView:
PreCreateWindow(cs);
//CscanfillView绘制
voidCscanfillView:
OnDraw(CDC*pDC)
CscanfillDoc*pDoc=GetDocument();
ASSERT_VALID(pDoc);
if(!
pDoc)
return;
在此处为本机数据添加绘制代码
pDC->
Polygon(Point,7);
//绘制多边形
TextOutW(550,410,_T("
P0"
));
//注意文本的输岀
TextOutW(350,600,_T("
P1"
TextOutW(230,340,_T("
P2"
TextOutW(350,30,_T("
P3"
TextOutW(490,220,_T("
P4"
TextOutW(600,30,_T("
P5"
TextOutW(805,450,_T("
P6"
//CscanfillView打印
OnPreparePrinting(CPrintlnfo*pInfo){
//默认准备
returnDoPreparePrinting(plnfo);
添加额外的打印前进行的初始化过程
OnEndPrinting(CDC*/*pDC*/,CPrintInfo*/*pInfo*/)
添加打印后进行的清理过程
//CscanfillView诊断
AssertValid()const
CView:
AssertValid();
Dump(CDumpContext&
dc)const
Dump(dc);
CscanfillDoc*CscanfillView:
GetDocument()const//非调试版本是内联的
ASSERT(m_pDocument->
lsKindOf(RUNTIME_CLASS(CscanfillDoc)));
return(CscanfillDoc*)m_pDocument;
#endif//_DEBUG
//建立桶节点函数
//CscanfillView消息处理程序
CreatBucket()
ScanMax=ScanMin=Point[O].y;
for(inti=1;
i<
Number;
i++)
if(Point[i].y<
ScanMin)
if(Point[i].y>
ScanMax)
if(ScanMin==i)//桶头结点
HeadB=newBucket;
//建立桶的头结点
CurrentB=HeadB;
//CurrentB为Bucket当前节点指针
CurrentB->
Scanline=ScanMin;
p=NULL;
//没有连接边链表
next=NULL;
else
{//建立桶的其他节点
next=newBucket;
//新建一个桶节点
CurrentB=CurrentB->
next;
//使CurrentB指向新建的桶节点
Scanline=i;
Et()
//构造边表函数
for(inti=0;
//访问每个顶点
E[i].yMax=Point[j].y;
E[i].k=(double(Point[j].x-Point[i].x))/(Point[j].y-Point[i].y);
E[i].next=NULL;
while(CurrentE->
next!
=NULL)//如果当前边已有边节点
CurrentB=NULL;
CurrentE=NULL;
//插入临时边表函数
AddEdge(AET*NewEdge)
T1=HeadE;
if(T1==NULL)//边表为空,将边表置为TempEdge
T1=NewEdge;
HeadE=T1;
}else
EdgeOrder()//对边表进行排序
AET*F,*T;
if(T1==NULL)
if仃1
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 多边形 有效 填充 算法