边表法是用来绘制填充一个面的,边表法的关键是边表和连接边表的扫描线。
对于边的描述利用边表数据结构,包含边与扫描线的交点x坐标,边的最大y坐标,这样可以知道边加入到哪些扫描线上,便还有一个指针来记录扫描线上其它边。
//边数据结构
#pragma once
#ifndef __CAETZ__
#define __CAETZ__
#include "pch.h"
#include "CPoint3D.h"
#include "RGB.h"
class CAETZ
{
public:
CAETZ() = default;
CAETZ(const CPoint3D &start,const CPoint3D &end);
~CAETZ() {
}
public:
CPoint3D start3D; //起点
CPoint3D end3D; //终点
int x; //与扫描线相交的x坐标
int y; //扫描线值
int ymax; //最大的y值
double k; //斜率k
int z; //z值
CRGB rgb; //rgb值
CAETZ* pNext; //指向下一个边表的指针
};
//表数据结构
#pragma once
#ifndef __CBUCKETZ__
#define __CBUCKETZ__
#include "CAETZ.h"
#include "pch.h"
#include "CPoint3D.h"
#include "RGB.h"
class CBucketZ
{
public:
CBucketZ() = default;
CBucketZ(CPoint3D *pointList ,int pointNum);
~CBucketZ() {
CAETZ *tempPET = NULL;
while (pET != NULL)
{
tempPET = pET->pNext;
delete pET;
pET = tempPET;