下载此文档

扫描线填充算法.doc


文档分类:通信/电子 | 页数:约9页 举报非法文档有奖
1/9
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/9 下载此文档
文档列表 文档介绍
扫描线多边形填充: 1、填充的主要思想: struct Edge { float x; float Δ x; float ymin; Edge *next; }; Step1 : (初始化)将 ET 表中各元素置空,建立 ET 表 Step2 : (basket sort, 分桶分类) 为多边形 P 的每一条边建立边结构按该边的上端点的 y值y 上插入 ET 表中的第 y 上类(组) ,即插入 ET[y 上]. Step3 :( 初始化) AEL 置空//AEL=Null y:ET 表中非空元素的区域号最大值。 Step4 :扫描转化 while ( AEL or ET 非空) do { (边插入)如果 ET[y] 非空,则将 ET[y] 中各边插入 AEL 。 (排序)将 AEL 中的各边按照 x (若 x 相等按Δx 的递增顺序排序。 ( 如果 AEL 非空填色)将 AEL 中各边依次组成对, 在横坐标为 y 的扫描线上, 将以每对边的 x 坐标为端点的区间上填上多边形所需要的颜色. (下一条扫描线) y --。 (边删除)将 AEL 中满足 y=ymin 的边删除。 (边更新)将 AEL 中的各边 x 值更新, x=x+ Δx} 2、源程序 C++ 源代码: CScanLineView::CScanLineView() { num=0; StartFlag=0; EndFlag=0; OriFlag=0; WindowFlag=0; ln=0; rn=0; bn=0; tn=0; l=200; r=350; b=200; t=350; sflag=0; lflag=0; // TODO: add construction code here } CScanLineView::~CScanLineView() {} BOOL CScanLineView::PreCreateWindow(CREATESTRUCT& cs) { // TODO: Modify the Window class or styles here by modifying // the CREATESTRUCT cs return CView::PreCreateWindow(cs); } ///////////////////////////////////////////////////////////////////////////// // CScanLineView drawing void CScanLineView::OnDraw(CDC* pDC) { CScanLineDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); if(WindowFlag) { // SelectObject((HDC)*pDC,redPen); pDC->MoveTo(l,t); pDC->o(l,b); pDC->o(r,b); pDC->o(r,t); pDC->o(l,t); // SelectObject((HDC)*pDC,blackPen); } // TODO: add draw code for native data here } ////////////////

扫描线填充算法 来自淘豆网m.daumloan.com转载请标明出处.

相关文档 更多>>
非法内容举报中心
文档信息
  • 页数9
  • 收藏数0 收藏
  • 顶次数0
  • 上传人rjmy2261
  • 文件大小219 KB
  • 时间2017-05-11
最近更新