C++ 多边形扫描转换算法_C/C++语言_黑客防线网安服务器维护基地--Powered by WWW.RONGSEN.COM.CN

C++ 多边形扫描转换算法

作者:黑客防线网安C/C++教程基地 来源:黑客防线网安C/C++教程基地 浏览次数:0

本篇关键词:算法转换扫描POINTNUM
黑客防线网安网讯:  最近学习计算机图形学,写了个多边形扫描转换算法,贴出来分享一下;MFC还不是太明白,主要还是使用OnDraw函数...大家多指教...void CPolyFillView::OnDraw(CDC* pDC){CPolyFillDoc* pDoc =...
  最近学习计算机图形学,写了个多边形扫描转换算法,贴出来分享一下;
MFC还不是太明白,主要还是使用OnDraw函数...
大家多指教...
void CPolyFillView::OnDraw(CDC* pDC)
{
CPolyFillDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
const int POINTNUM=6; //多边形点数.
/定义结构体用于活性边表AET和新边表NET/
typedef struct XET
{
float x;
float dx,ymax;
XET* next;
}AET,NET;
/定义点结构体point*/
struct point
{
float x;
float y;
}polypoint[POINTNUM]={250,50,550,150,550,400,250,250,100,350,100,100};//多边形顶点
//mypoint[POINTNUM]={100,100,200,100,200,200,100,200};//正方形
/计算最高点的y坐标(扫描到此结束)**/
int MaxY=0;
int i;
for(i=0;i<POINTNUM;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;
}
/扫描并建立NET表*/
for(i=0;i<=MaxY;i++)
{
for(int j=0;j<POINTNUM;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先排序
    黑客防线网安服务器维护方案本篇连接:http://www.rongsen.com.cn/show-15055-1.html
网站维护教程更新时间:2012-04-04 22:49:05  【打印此页】  【关闭
我要申请本站N点 | 黑客防线官网 |  
专业服务器维护及网站维护手工安全搭建环境,网站安全加固服务。黑客防线网安服务器维护基地招商进行中!QQ:29769479

footer  footer  footer  footer