¿¹Á¦ ÇÁ·¢Å»

 ´ÙÀ½Àº Àç±ÍÈ£ÃâÀ» ÀÌ¿ëÇÑ °£´ÜÇÑ ¸Àº¸±âÀÔ´Ï´Ù. ¸î ÁÙ µÇÁö ¾ÊÁö¸¸ °á°ú´Â ¿¹ÃøºÒÇãÁÒ. ±×·³ °á°úºÎÅÍ »ìÆìº¸±â·Î ÇÒ±î¿ä.

 °£´ÜÇÑ ±×¸²À̱ä ÇÏÁö¸¸ ÀÌ°Ç ¸Àº¸±â´Ï±î¿ä. ´ÙÀ½Àº ÄÚµùºÎºÐÀÔ´Ï´Ù.

 OnDraw() ÇÔ¼ö¸¦ ´ÙÀ½°ú °°ÀÌ °íÄ¡°í, ºä¿¡ ¸â¹öÇÔ¼ö·Î f_won() °ú circle() À̶õ ÇÔ¼ö¸¦ Ãß°¡ÇÕ´Ï´Ù. ±×¸®°í´Â ½ÇÇàÇÕ´Ï´Ù. ±×·³ À§¿Í °°Àº ±×¸²À» º¼ ¼ö ÀÖÁÒ.

¿©±â¼­ ÇѰ¡Áö »ý°¢ÇØ¾ß ÇÒ °Ô Àִµ¥¿ä. ¹Ù·Î Ellipse() ÇÔ¼ö¿Í Arc() ÇÔ¼öÀÇ Â÷ÀÌÁ¡ÀÔ´Ï´Ù. ¹«½¼ Â÷ÀÌÀÎÁö ´«À¸·Î È®ÀÎÇÏ·Á¸é ¿ì¼± ¹ØÀÇ circle()ÇÔ¼ö¿¡¼­ ÁÖ¼®Ã³¸®ÇÑ Ellipse()ÇÔ¼öºÎºÐÀÇ ÁÖ¼®À» ¾ø¾Ö°í,  Arc() ÇÔ¼öºÎºÐÀ» ÁÖ¼®Ã³¸®ÇÑ ´ÙÀ½ ½ÇÇàÇØ º¸¼¼¿ä. ±×·³ ´«¿¡ È® ¶î°Ì´Ï´Ù. ¹Ù·Î ±×¸®´Â ¿øÀÇ ¼ÓÀ» ä¿ì´À³ª ¾Æ´Ï³ÄÀÇ Â÷ÀÌÀÔ´Ï´Ù.

 »ç½Ç Ellipse()ÇÔ¼ö´Â Ÿ¿øÀ» ±×¸®´Â ÇÔ¼öÀ̰í, Arc() ÇÔ¼ö´Â È£¸¦ ±×¸®´Â ÇÔ¼öÀÔ´Ï´Ù. ¾Æ½±°Ôµµ Åͺ¸C¿¡ ÀÖ´Â Circle()À̶ó´Â ÇÔ¼ö´Â ºñÁÖ¾ó C++¿¡¼± ¾øÀ¸´Ï Á÷Á¢ ¸¸µé¾î ¾²¸é µË´Ï´Ù. Çʿ信 µû¶ó ¼ÓÀÌ Âù ¿øÀ» ±×¸®·Á¸é Ellipse() ÇÔ¼ö¸¦ ¾²°í, ¼ÓÀ» ä¿ìÁö ¾ÊÀº ¿øÀ» ±×¸®·Á¸é Arc()ÇÔ¼ö¿¡¼­ ½ÃÀÛÁ¡°ú ³¡Á¡ÀÇ ÁÂÇ¥¸¦ °°°Ô ³õÀ¸¸é µË´Ï´Ù.

void CFractal1View::OnDraw(CDC* pDC)
{
        CFractal1Doc* pDoc = GetDocument();
        ASSERT_VALID(pDoc);
        // TODO: add draw code for native data here
        int x, y, r;

        r=x=y=200;  // Àüü Å©±â ¼³Á¤    
        f_won(x, y, r, pDC);
}

void CFractal1View::f_won(int x, int y, int r, CDC *pDC)
{
        if(r>1) {
                circle(x, y, r, pDC);

                f_won(x-r/2, y, r/2, pDC);
                f_won(x+r/2, y, r/2, pDC);
            }
}

void CFractal1View::circle(int x, int y, int r, CDC *pDC)
{
        //pDC->Ellipse(x-r, y-r, x+r, y+r);
        pDC->Arc(x-r, y-r, x+r, y+r, x-r, y-r, x-r, y-r);
}

 

- f_won() ÇÔ¼öÀÇ º¯Çü

 f_won()ÇÔ¼ö¸¦ Á¶±Ý º¯ÇüÇϸé ÀüÇô »õ·Î¿î ¸ð¾çÀÇ ÇÁ·¢Å»ÀÌ »ý¼ºµË´Ï´Ù.

void CFractal1View::f_won(int x, int y, int r, CDC *pDC)
{
        if(r>8) {
                circle(x, y, r, pDC);
                
                f_won(x-r/2, y, r/2, pDC);
                f_won(x+r/2, y, r/2, pDC);
                
                f_won(x, y-r/2, r/2, pDC);
                f_won(x, y+r/2, r/2, pDC);

        }
}

 ---------------------------------------------------------

void CFractal1View::f_won(int x, int y, int r, CDC *pDC)
{
        if(r>8) {
                circle(x, y, r/2, pDC);
                
                f_won(x-r/2, y, r/2, pDC);
                f_won(x+r/2, y, r/2, pDC);
                
                f_won(x, y-r/2, r/2, pDC);
                f_won(x, y+r/2, r/2, pDC);

        }
}

----------------------------------------------------

void CFractal1View::f_won(int x, int y, int r, CDC *pDC)
{
        if(r>1) {
                circle(x, y, r, pDC);
                
                f_won(x-r/2, y, r*0.4, pDC);
                f_won(x+r/2, y, r*0.4, pDC);
                
                f_won(x, y-r/2, r*0.4, pDC);
                f_won(x, y+r/2, r*0.4, pDC);
        }
}

---------------------------------------------------

 OnDraw() ´Â À§ÀÇ ¿¹Á¦ ±×´ë·Î ¾²°í, f_won()À» Á¶±Ý °íÄ¡°í, circle() ´ë½Å FillEllipse()¸¦ ¸â¹öÇÔ¼ö·Î Ãß°¡ÇÕ´Ï´Ù. »ö±òÀÌ µé¾î°£ ù ¿¹Á¦ÀÔ´Ï´Ù.

 

void CFractal1View::f_won(int x, int y, int r, CDC *pDC)
{
        int red, green, blue;

        if(r>8) {
                red = rand() % 255;     // Ä÷¯¸¦ ·£´ýÇÏ°Ô ¼³Á¤
                green = rand() % 255;
                blue = rand() % 255;
                
                CBrush brush, *pOldBrush;
                brush.CreateSolidBrush(RGB(red, green, blue)); // ºê·¯½Ã »ý¼º
                pOldBrush=(CBrush *)pDC->SelectObject(&brush); // DC¿¡ ºê·¯½Ã ¼±ÅÃ

                FillEllipse(x, y, r/2, r/3, pDC);
                                                
                f_won(x-r/2, y, r/2, pDC);
                f_won(x+r/2, y, r/2, pDC);
                
                f_won(x, y-r/2, r/2, pDC);
                f_won(x, y+r/2, r/2, pDC);
            
                pDC->SelectObject(pOldBrush);  // DC º¹¿ø
        }
}

void CFractal1View::FillEllipse(int x, int y, int xradius, int yradius, CDC *pDC)
{
        pDC->Ellipse(x, y, x+xradius*2, y+yradius*2);
}