一、 实验目的。
使用改进的X扫描线算法进行多边形的填充。
二、 实验工具
VC6.0
三、 实验步骤
1.首先了解多边形填充:
输入:多边形顶点序列输出:最佳逼近这个多边形的像素点集
利用X-射线扫描思想:确定多边形所占用的最大扫描线数,得到多边形顶点max, min从Ymax移动到Ymin
然后进行一些 求交,排序,配对,着色。
在求交排序中采用y向连贯性算法进行改进。
**2.学习y向连贯性算法的大概思路:
** 优先
X | Ymax | 1/k | next
交点递增;交点相同,则增量递增
变成有效边表(开始为空的删除无效边之后的表)
X | Ymax | 1/k | next
X+1/k | Ymax | 1/k | next(y向递增)
(考虑到由于链表可能会很复杂,所以会用结构体代替链表。)
3.建立一个工程文件,将思路转化为c编程语言,进行编译。
代码如下:
#include <windows.h>
#include <stdio.h>
#include <graphics.h>
#include <conio.h>
#include <string.h>
#include <queue>
using namespace std;
struct XET //定义了一个结构体存储来边表
{
float xmin,ymax,ymin,dx;
//dx=1/k, ymin为了扫描的时候判断扫描线是否在ymax和ymin之间
}pNET[1024];
struct node //定义扫描线与边的交点
{
float x,y;
}point[1024];
drawColor(float a,float b,int y)
{
int x;
for(x=a+0.5;x<=b+0.5;x++)
putpixel(x,y,RED); // 在指定位置画一红的像素
}
priority_queue<float,vector<float>,greater<float> >s;