社区
图形处理/算法
帖子详情
多边形填充算法?
wx_dwl
2004-09-29 04:14:35
求多边形填充算法.
...全文
239
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来实现
多边形
填充
算法
。 首先,理解QT中的绘图机制是至关重要的。QT使用`QPainter`类来处理图形绘制,包括线条、形状和文本等。在实现
多边形
填充
时,我们需要创建一个`QPainter`对象,并在...
基于MFC实现
多边形
填充
算法
完整代码
在本资源中,我们关注的是基于MFC(Microsoft Foundation Classes)框架实现的
多边形
填充
算法
,特别是种子
填充
算法
。MFC是微软为Windows应用程序开发提供的一套C++类库,它简化了Windows API的使用。 种子
填充
算法
...
多边形
填充
算法
vc 实现
在计算机图形学中,
多边形
填充
是...总的来说,掌握
多边形
填充
算法
是图形学和游戏开发的基础,它可以帮助你更好地理解和创建复杂的2D图形效果。无论是简单的练习项目还是大型应用,理解并实现这些
算法
都是非常有价值的。
基于曲线积分的任意
多边形
填充
算法
### 基于曲线积分的任意
多边形
填充
算法
#### 摘要与背景 在计算机图形学和图像处理领域中,
多边形
填充
是一项基础而关键的技术。这项技术通常用于将矢量图形转化为光栅图形,进而使得图形能够在各种输出设备(如...
图形处理/算法
19,472
社区成员
50,678
社区内容
发帖
与我相关
我的任务
图形处理/算法
VC/MFC 图形处理/算法
复制链接
扫一扫
分享
社区描述
VC/MFC 图形处理/算法
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章