边相关扫描线多边形填充算法.doc_第1页
边相关扫描线多边形填充算法.doc_第2页
边相关扫描线多边形填充算法.doc_第3页
边相关扫描线多边形填充算法.doc_第4页
边相关扫描线多边形填充算法.doc_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

边相关扫描线多边形填充算法M文件代码:function scanedge(X,Y)s,sY=size(Y);maxY=max(Y);minY=min(Y);%奇异点Y1=Y;if (Y(sY)Y(1)&Y(2)Y(1)|(Y(sY)Y(1) Y1(1)=Y(1)-1;endif (Y(sY-1)Y(sY)&Y(1)Y(sY)|(Y(sY-1)Y(sY) Y1(sY)=Y(sY)-1;endfor i=2:sY-1 if (Y(i-1)Y(i)&Y(i+1)Y(i)|(Y(i-1)Y(i) Y1(i)=Y(i)-1; endend%画出多边形hold on;plot(X(1),X(sY),Y(1),Y(sY),r);plot(X,Y,r);axis equal;grid on;%建ET表Edge=zeros(sY);ET=cell(maxY,1);for i=minY:maxY A=find(Y=i); sA=size(A); k=1; for j=1:sA(2) %扫描到P1点时 if A(j)=1 if X(sY)X(2) if Edge(sY)=0 if Y(sY)=Y(1) if X(sY)=X(1) ETi,k=max(Y1(sY),Y1(1),X(1),0; else ETi,k=max(Y1(sY),Y1(1),X(1),. (X(1)-X(sY)/(Y(1)-Y(sY); end k=k+1; end Edge(sY)=1; end if Edge(1)=0 if Y(2)=Y(1) if X(2)=X(1) ETi,k=max(Y1(2),Y1(1),X(1),0; else ETi,k=max(Y1(2),Y1(1),X(1),. (Y(2)-Y(1)/(X(2)-X(1); end k=k+1; end Edge(1)=1; end else if Edge(1)=0 if Y(2)=Y(1) if X(2)=X(1) ETi,k=max(Y1(2),Y1(1),X(1),0; else ETi,k=max(Y1(2),Y1(1),X(1),. (Y(2)-Y(1)/(X(2)-X(1); end k=k+1; end Edge(1)=1; end if Edge(sY)=0 if Y(sY)=Y(1) if X(sY)=X(1) ETi,k=max(Y1(sY),Y1(1),X(1),0; else ETi,k=max(Y1(sY),Y1(1),X(1),. (Y(1)-Y(sY)/(X(1)-X(sY); end k=k+1; end Edge(sY)=1; end end end %扫描到P1以外的点时 if A(j)=1 X1=X;X1(sY+1)=X(1); if X(A(j)-1)AET1,2(1,2) Change=AET1,1; AET1,1=AET1,2; AET1,2=Change;endfor i=ceil(AET1,1(1,2):floor(AET1,2(1,2) plot(i,1,b.,markersize,60);endm=2;for i=minY+1:maxY if isempty(ETi,1) for j=1:m; Change1,j=AETi-1,j; end k=2; while k=m if Change1,k-1(1,2)=Change1,k(1,2) for j=k-1:m-2 Change1,j=Change1,j+2; end k=k-2; m=m-2; end k=k+2; end for j=1:m AETi,j=Change1,j; AETi,j(1,2)=Change1,j(1,2)+Change1,j(1,3); end else if isempty(ETi,2) if AETi-1,1(1,2)+AETi-1,1(1,3)=ETi,1(1,2) AETi,1=ETi,1; for j=2:m AETi,j=AETi-1,j; AETi,j(1,2)=AETi-1,j(1,2)+AETi-1,j(1,3); end end if AETi-1,m(1,2)+AETi-1,m(1,3)=ETi,1(1,2) AETi,m=ETi,1; for j=1:m-1 AETi,j=AETi-1,j; AETi,j(1,2)=AETi-1,j(1,2)+AETi-1,j(1,3); end end if AETi-1,1(1,2)+AETi-1,1(1,3)ETi,1(1,2) for j=1:m; Change1,j=AETi-1,j; end k=2; while k=m if Change1,k-1(1,2)=Change1,k(1,2) for j=k-1:m-2 Change1,j=Change1,j+2; end k=k-2; m=m-2; end k=k+2; end for j=1:m AETi,j=Change1,j; AETi,j(1,2)=Change1,j(1,2)+Change1,j(1,3); end end else if AETi-1,1(1,2)+AETi-1,1(1,3)ETi,2(1,2) if m=2 m=4; AETi,1=AETi-1,1; AETi,1(1,2)=AETi-1,1(1,2)+AETi-1,1(1,3); AETi,2=ETi,1; AETi,3=ETi,2; AETi,4=AETi-1,2; AETi,4(1,2)=AETi-1,2(1,2)+AETi-1,2(1,3); else for j=2:2:m if AETi-1,j-1(1,2)+AETi-1,j-1(1,3)ETi,2(1,2) m=m+2; for k=1:j-1 AETi,k=AETi-1,k; AETi,k(1,2)=AETi-1,k(1,2)+AETi-1,k(1,3); end AETi,j=ETi,1; AETi,j+1=ETi,2; for k=j+2:m AETi,k=AETi-1,k-2; AETi,k(1,2)=AETi-1,k-2(1,2)+AETi-1,k-2(1,3); end j=m; end end end end end end for j=2:2:m for k=ceil(AETi,j-1(1,2):floor(AETi,j(1,2) plot(k,i,b.,markersize,60); end endend测试代码与输出图像:X=6,8,6,2,2;Y=7,5,1,3,6;scanedge(X,Y)figure 1X=2,6,10,10,4,2;Y=1,1,3,8,5,7;scanedge(X,Y)figure 2X=2,6,10,10,4,2,1;Y=1,1,3,8,5,7,6;scanedge(X,Y)figure 3X=2,6,10,10,8,6,4,2;Y=1,1,3,7,6,7,5,7;scane

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论