社区
图形处理/算法
帖子详情
多边形填充算法?
wx_dwl
2004-09-29 04:14:35
求多边形填充算法.
...全文
240
2
打赏
收藏
多边形填充算法?
求多边形填充算法.
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
2 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
handwolf
2004-09-30
打赏
举报
回复
共享给你吧!别忘记结帖哦,兄弟!
typedef struct tEdge
{
int ymin;
float x,dx;
struct tEdge *next;
}Edge;
typedef Edge* pEdge;
void InsertEdge(Edge *list,Edge *edge)
{
Edge *p,*q=list;
p=q->next;
while(p)
{
if(edge->x<p->x||edge->x+edge->dx<p->x+p->dx)
p=0;
else
{
q=p;
p=p->next;
}
}
edge->next=q->next;
q->next=edge;
}
void BuildEdgeList(int cnt,POINT *pts,Edge *edges[],int nScanMin)
{
Edge *edge;
POINT p1,p2;
int i;
p1=pts[cnt-1];
for(i=0;i<cnt;i++)
{
p2=pts[i];
if(p1.y!=p2.y)
{
edge=(Edge *)malloc(sizeof(Edge));
edge->dx=-(float)(p2.x-p1.x)/(p2.y-p1.y);
if(p1.y>p2.y)
{
edge->x=float(p1.x);
edge->ymin=p2.y;
InsertEdge(edges[p1.y-nScanMin],edge);
}
else
{
edge->x=float(p2.x);
edge->ymin=p1.y;
InsertEdge(edges[p2.y-nScanMin],edge);
}
}
p1=p2;
}
}
void BuildActiveList(int scan,Edge *active,Edge *edges[],int nScanMin)
{
Edge *p,*q;
p=edges[scan-nScanMin]->next;
while(p)
{
q=p->next;
InsertEdge(active,p);
p=q;
}
}
void FillScan(CDC *pDC,int scan,Edge *active,COLORREF color)
{
Edge *p1,*p2;
p1=active->next;
while(p1)
{
p2=p1->next;
pDC->MoveTo(int(p1->x+0.5),scan);
pDC->LineTo(int(p2->x+0.5),scan);
p1=p2->next;
}
}
void DeleteAfter(Edge *q)
{
Edge *p=q->next;
q->next=p->next;
free(p);
}
void UpdateActiveList(int scan,Edge *active)
{
Edge *q=active,*p=active->next;
while(p)
{
if(scan<=p->ymin)
{
p=p->next;
DeleteAfter(q);
}
else
{
p->x=p->x+p->dx;
q=p;
p=p->next;
}
}
}
void AreaFill(CDC *pDC,int cnt,POINT *pts,COLORREF color)
{
Edge *active;
int i,scan,scanmin=1000,scanmax=0;
for(i=0;i<cnt;i++)
{
if(scanmax<pts[i].y) scanmax=pts[i].y;
if(scanmin>pts[i].y) scanmin=pts[i].y;
}
pEdge *edges=(pEdge *)malloc((scanmax-scanmin+1)*sizeof(Edge));
for(scan=scanmin;scan<=scanmax;scan++)
{
edges[scan-scanmin]=(Edge *)malloc(sizeof(Edge));
edges[scan-scanmin]->next=0;
}
BuildEdgeList(cnt,pts,edges,scanmin);
active=(Edge *)malloc(sizeof(Edge));
active->next=0;
for(scan=scanmax;scan>=scanmin;scan--)
{
BuildActiveList(scan,active,edges,scanmin);
FillScan(pDC,scan,active,color);
UpdateActiveList(scan-1,active);
}
free(active);
for(scan=scanmin;scan<=scanmax;scan++)
{
free(edges[scan-scanmin]);
}
free(edges);
}
调用 AreaFill(CDC *pDC,int cnt,POINT *pts,COLORREF color) 就可以了
handwolf
2004-09-30
打赏
举报
回复
我有,但是分数太低了哦!
实验三计算机图形学
多边形
填充
算法
.doc
实验三计算机图形学
多边形
填充
算法
QT实现
多边形
填充
算法
利用QT实现
多边形
的
填充
算法
,在网格下坐标系下,双击两下鼠标显示起点,之后点击依次连线,一共七条线,首尾要在同一个坐标才能实现功能。
基于MFC实现
多边形
填充
算法
完整代码
使用VS 2017实现
多边形
填充
中的种子
填充
算法
,此资源包括完整的项目文件,可以直接使用。此代码仅供学习交流使用。
多边形
填充
算法
vc 实现
实现用扫描线
算法
和种子
算法
对
多边形
进行
填充
还可以画线和
多边形
基于曲线积分的任意
多边形
填充
算法
基于曲线积分的任意
多边形
填充
算法
,大家可以参考一下,启发一下思路。
图形处理/算法
19,472
社区成员
50,678
社区内容
发帖
与我相关
我的任务
图形处理/算法
VC/MFC 图形处理/算法
复制链接
扫一扫
分享
社区描述
VC/MFC 图形处理/算法
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章