void CPolygon_ConversionView::Active_Edge_Table_Conersion(int Vertices[][2], int VertexNum)
{
int y_max = Vertices[0][1], y_min = Vertices[0][1];
for (int i = 1; i < VertexNum; i++)
{
y_max = max(y_max, Vertices[i][1]);
y_min = min(y_min, Vertices[i][1]);
}
vector ET[1000];
for (int i = 0; i < VertexNum; i++)
{
int j = (i + 1) % VertexNum;
AET node;
if (Vertices[i][1] < Vertices[j][1])
{
node.x = Vertices[i][0];
node.k_1 = (double)(Vertices[j][0] - Vertices[i][0]) / (double)(Vertices[j][1] - Vertices[i][1]);
node.y_max = Vertices[j][1];
}
else
{
node.x = Vertices[j][0];
node.k_1 = (double)(Vertices[j][0] - Vertices[i][0]) / (double)(Vertices[j][1] - Vertices[i][1]);
node.y_max = Vertices[i][1];
}
ET[Vertices[i][1] - y_min].push_back(node);
}
for (int i = 0; i <= y_max - y_min; i++)
{
if (ET[i].size() > 0)
{
sort(ET[i].begin(), ET[i].end(), cmp);
bool b = false;
int x1;
for (int j = 0; j < ET[i].size(); j++)
{
if (b)
{
for (int x = x1; x <= ET[i][j].x; x++)
{
DrawPixel(x, i + y_min);
}
b = !b;
}
else
{
x1 = ET[i][j].x;
b = !b;
}
if (ET[i][j].y_max - 1 > i + y_min)
{
AET node = ET[i][j];
node.x = ET[i][j].x + ET[i][j].k_1;
ET[i + 1].push_back(node);
}
}
}
}
}