#pragma once class Edge { public: int ya; int yb; int xc; int dx; float dir; Edge *next; }; #pragma once class Point { public: int x; int y; Point() { x=0; x=0; } }; void C°úÁ¦3View::OnDraw(CDC* /*pDC*/) { C°úÁ¦3Doc* pDoc = GetDocument(); ASSERT_VALID(pDoc); if (!pDoc) return; int dot[6] = {10, 10, 600, 100, 100, 500}; fill_triangle(3, dot, 000000); // TODO: ¿©±â¿¡ ¿ø½Ã µ¥ÀÌÅÍ¿¡ ´ëÇÑ ±×¸®±â Äڵ带 Ãß°¡ÇÕ´Ï´Ù. } // C°úÁ¦3View ¸Þ½ÃÁö 󸮱â void C°úÁ¦3View::fill_triangle(int n, int dot[], int Color) { Edge* EL[3]; // Edge List ¼±¾ð //Edge* AEL; Point *pts = new Point[n]; // Á¡µé n °³ ¼±¾ð for(int cnt1=0; cnt1 < n; cnt1++) // dotÀÇ Á¡µé·Î pts ÃʱâÈ­ { pts[cnt1].x = (dot[(cnt1*2)]); pts[cnt1].y = (dot[(cnt1*2)+1]); } for(int cnt2=0; cnt2 < n; cnt2++) //Edge n°³¸¸Å­ ÃʱâÈ­ { EL[cnt2] = new Edge; EL[cnt2]->next = NULL; } creatEL(n, pts, EL);// Edge List »ý¼º CClientDC dc(this); CString string1, string1_next, string2, string2_next, string3, string3_next; string1.Format(_T("EL[0] : %d , next : %d"), EL[0], EL[0]->next); string2.Format(_T("EL[1] : %d , next : %d"), EL[1], EL[1]->next); string3.Format(_T("EL[2] : %d , next : %d"), EL[2], EL[2]->next); dc.TextOutW(pts[0].x, pts[0].y, string1); dc.TextOutW(pts[1].x, pts[1].y, string2); dc.TextOutW(pts[2].x, pts[2].y, string3); } void C°úÁ¦3View::creatEL(int n, Point pts[], Edge* EL[]) { Point p1, p2; // ÀÓÀÇÀÇ µÎ°³ÀÇ Á¡ ¼³Á¤ p1.x = pts[n-1].x; // pts¹è¿­ÀÇ Á¡µéÁß °¡Àå ¸¶Áö¸· [n-1]°ª À» p1 À¸·Î p1.y = pts[n-1].y; for(int count=0; countya = low.y; // ÀÛÀº y edge->yb = high.y; // Å« y edge->xc = low.x; // Ãʱâ xIntersect °ªÀº xa Áֻ缱ÀÌ ¿È°Ü°¡¸é¼­ ¹Ù²ï´Ù edge->dir = -(((float)high.y - (float)low.y)/((float)high.x - (float)low.x)); // dir°ªÀÌ ¾ç¼ö¸é up À½¼ö¸é down edge->next = EL; insertEdge(EL, edge); } void C°úÁ¦3View::insertEdge(Edge* node, Edge* edge) { if(!node->next==NULL) { edge->next = node->next; node->next = edge; } else { edge->next = NULL; *node = *edge; node->next = edge; } }