资源简介
改进的有效边表算法(y-x算法)。可实现opengl环境下的多点间空白填充。
代码片段和文件信息
#include
#include
#include
#include
std::ifstream cin (“polypoints.txt“);
using std::vector;
using std::endl;
typedef struct _EdgeItem
{
float x;
int yMax;
float reverseK;
_EdgeItem * next;
}EdgeItem;
vector g_pItemVector;
typedef struct _Point
{
int x;
int y;
}Point;
typedef struct _EdgePtr
{
int nScanLine;
EdgeItem * pItem;
}EdgePtr;
typedef struct _PolyPoints
{
Point * pPoint;
int n;
int yMax;
int yMin;
}PolyPoints;
EdgePtr * g_pEdgeList;
EdgePtr * g_pActiveEdgeList;
PolyPoints g_polyPoints;
void inputPoints (void)
{
int n;
cin>>n;
if (n < 3)
{
std::cout<<“number of points can not be less than 3“< exit (0);
}
g_polyPoints.n = n;
g_polyPoints.pPoint = new Point[n];
g_polyPoints.yMax = INT_MIN;
g_polyPoints.yMin = INT_MAX;
int x y;
for (int i = 0; i < n; ++i)
{
cin>>x>>y;
g_polyPoints.pPoint[i].x = x;
g_polyPoints.pPoint[i].y = y;
if (g_polyPoints.yMax < y)
{
g_polyPoints.yMax = y;
}
if (g_polyPoints.yMin > y)
{
g_polyPoints.yMin = y;
}
}
}
float calculateReverseK (const Point & p1 const Point & p2)
{
return (float)(p2.x - p1.x) / (float)(p2.y - p1.y);
}
void sortOneScanLineEdgeList (EdgePtr & edgePtr)
{
EdgeItem * pEdgeItem = edgePtr.pItem;
EdgeItem * pNext;
EdgeItem * pTmp;
while (pEdgeItem)
{
pNext = pEdgeItem->next;
pTmp = pEdgeItem;
while (pNext)
{
if (pNext->x < pTmp->x)
{
pTmp = pNext;
}
pNext = pNext->next;
}
if (pTmp != pEdgeItem)
{
float fTmp = pTmp->x;
pTmp->x = pEdgeItem->x;
pEdgeItem->x = fTmp;
int iTmp = pTmp->yMax;
pTmp->yMax = pEdgeItem->yMax;
pEdgeItem->yMax = iTmp;
float kTmp = pTmp->reverseK;
pTmp->reverseK = pEdgeItem->reverseK;
pEdgeItem->reverseK = kTmp;
}
pEdgeItem = pEdgeItem->next;
}
pEdgeItem = edgePtr.pItem;
EdgeItem * pStart = NULL;
EdgeItem * pEnd = NULL;
while (pEdgeItem)
{
pEnd = pStart = pEdgeItem;
pNext = pStart->next;
while (pNext && (pNext->x == pStart->x))
{
pEnd = pNext;
pNext = pNext->next;
}
while (pStart != pEnd)
{
pTmp = pStart;
pNext = pTmp->next;
while (pN
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 112128 2013-11-05 21:18 改进的有效边表算法\Debug\改进的有效边表算法.exe
文件 667788 2013-11-05 21:18 改进的有效边表算法\Debug\改进的有效边表算法.ilk
文件 1084416 2013-11-05 21:18 改进的有效边表算法\Debug\改进的有效边表算法.pdb
文件 650 2013-11-05 21:18 改进的有效边表算法\改进的有效边表算法\Debug\cl.command.1.tlog
文件 7068 2013-11-05 21:18 改进的有效边表算法\改进的有效边表算法\Debug\CL.read.1.tlog
文件 392 2013-11-05 21:18 改进的有效边表算法\改进的有效边表算法\Debug\CL.write.1.tlog
文件 2 2013-11-05 21:18 改进的有效边表算法\改进的有效边表算法\Debug\li
文件 2 2013-11-05 21:18 改进的有效边表算法\改进的有效边表算法\Debug\li
文件 2 2013-11-05 21:18 改进的有效边表算法\改进的有效边表算法\Debug\li
文件 2 2013-11-05 21:18 改进的有效边表算法\改进的有效边表算法\Debug\li
文件 1194 2013-11-05 21:18 改进的有效边表算法\改进的有效边表算法\Debug\li
文件 2790 2013-11-05 21:18 改进的有效边表算法\改进的有效边表算法\Debug\li
文件 498 2013-11-05 21:18 改进的有效边表算法\改进的有效边表算法\Debug\li
文件 334140 2013-11-05 21:18 改进的有效边表算法\改进的有效边表算法\Debug\Source.obj
文件 265216 2013-11-05 21:18 改进的有效边表算法\改进的有效边表算法\Debug\vc110.idb
文件 364544 2013-11-05 21:18 改进的有效边表算法\改进的有效边表算法\Debug\vc110.pdb
文件 106 2013-11-05 21:18 改进的有效边表算法\改进的有效边表算法\Debug\改进的有效边表算法.lastbuildstate
文件 1691 2013-11-05 21:18 改进的有效边表算法\改进的有效边表算法\Debug\改进的有效边表算法.log
文件 54 2013-11-05 21:14 改进的有效边表算法\改进的有效边表算法\polypoints.txt
文件 10955 2013-11-05 21:18 改进的有效边表算法\改进的有效边表算法\Source.cpp
文件 4029 2013-11-05 20:59 改进的有效边表算法\改进的有效边表算法\改进的有效边表算法.vcxproj
文件 955 2013-11-05 20:59 改进的有效边表算法\改进的有效边表算法\改进的有效边表算法.vcxproj.filters
文件 36110336 2013-11-05 23:16 改进的有效边表算法\改进的有效边表算法.sdf
文件 948 2013-11-05 20:58 改进的有效边表算法\改进的有效边表算法.sln
..A..H. 19968 2013-11-05 23:16 改进的有效边表算法\改进的有效边表算法.v11.suo
目录 0 2013-11-05 21:18 改进的有效边表算法\改进的有效边表算法\Debug
目录 0 2013-11-05 21:16 改进的有效边表算法\Debug
目录 0 2013-11-05 21:10 改进的有效边表算法\改进的有效边表算法
目录 0 2013-11-05 23:16 改进的有效边表算法
----------- --------- ---------- ----- ----
............此处省略2个文件信息
评论
共有 条评论