一键打卡🔥 龙鳞魔堡 金豆锻造 荣誉胸章 海底寻宝 非诚勿扰 虚拟刮奖 杂货道具 好友印象 首页弹幕 中华银行 家族部落 积分兑换 图片上传 图片压缩 在线翻译 在线查毒
发表新帖 回帖
返回列表

发帖: 4773 粉丝: 1
铜币: 254 龙鳞: 127
家族: 水神殿丶
经验:
Lv12

精灵:
  • 294魔堡金豆
  • 0闪耀金条
  • 396元气能量
  • 1044超凡耐力
  

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

中华游戏网 cnyouw写于:中华游戏网-cnyouw 👦会员:白々哉 🕘时间:2011-06-11 17:06 👀围观:12077人 💬回复:2

  最近学习计算机图形学,写了个多边形扫描转换算法,贴出来分享一下;
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.y>MaxY)
MaxY=polypoint.y;
/*初始化AET表/
AET *pAET=new AET;
pAET->next=NULL;
/初始化NET表*/
NET *pNET[1024];

for(i=0;i<=MaxY;i++)
{
pNET=new NET;
pNET->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->next;
pNET->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->next;
pNET->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先排序
  中华游戏网 cnyouw.cn中华游戏网 cnyouw
SIGNATURE
发帖: 45 粉丝: 0
铜币: 226 龙鳞: 99
金豆: 93
金条: 2
能量: 19
耐力: 33
经验:
Lv2

精灵:
  
技术贴~支持~
SIGNATURE
中华游戏网 — 玩你所玩,乐你所乐!cnyouw.cn
发帖: 232 粉丝: 0
铜币: 595 龙鳞: 105.4
伴侣: 单身贵族
家族: 无门无派
经验:
Lv3

精灵:
  • 146魔堡金豆
  • 0闪耀金条
  • 14元气能量
  • 47超凡耐力
  
这个真是技术贴
SIGNATURE
海洋之星专版 www.xskj888.com]电玩城捕鱼机
发表新帖 回帖
 中华游戏网 » 电脑技术交流
快速
验证问题:
我们网站的中文名是什么? 正确答案:

Ctrl + Enter 快速发布

为防止个别捣乱会员恶意灌水
注册会员发帖量达到 10
即可解锁快捷表情发送