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); } } } } }

void CPolygon_ConversionViewActive_Edge_Table_Conersionint Vertices2 int VertexNum	确定多边形最大和最小y值	int y_max = Vertices01 y_min = Vertices01;	for int i = 1; i VertexNum; i++			y_max = Verticesi1 y_max

原文地址: https://www.cveoy.top/t/topic/bq1m 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录