2007년 4월 12일 목요일

Sierpinski Carpet Demo



void CGdiplusDemoView::OnDraw(CDC* pDC)
{
    Graphics g(pDC->m_hDC);

    CRect clientRect;
    GetClientRect(&clientRect);
    SolidBrush brush(Color(255, 0, 0, 0));

    SierpinskiCarpet3(g, brush, clientRect.Width()/2, clientRect.Height()/2, 120);

}

void CGdiplusDemoView::SierpinskiCarpet1(Graphics& g, SolidBrush& brush, int x, int y, int r)
{
    if ( r <= 0 )
        return;

    SierpinskiCarpet1(g, brush, x-2*r, y+2*r, r/3);
    SierpinskiCarpet1(g, brush, x-2*r, y, r/3);
    SierpinskiCarpet1(g, brush, x-2*r, y-2*r, r/3);
    SierpinskiCarpet1(g, brush, x, y+2*r, r/3);
    SierpinskiCarpet1(g, brush, x, y-2*r, r/3);
    SierpinskiCarpet1(g, brush, x+2*r, y+2*r, r/3);
    SierpinskiCarpet1(g, brush, x+2*r, y, r/3);
    SierpinskiCarpet1(g, brush, x+2*r, y-2*r, r/3);
    g.FillRectangle(&brush, x-r/4, y-r/4, r/2, r/2);
}

void CGdiplusDemoView::SierpinskiCarpet2(Graphics& g, SolidBrush& brush, int x, int y, int r)
{
    if ( r <= 0 )
        return;

    SierpinskiCarpet2(g, brush, x-2*r, y+2*r, r/2);
    SierpinskiCarpet2(g, brush, x-2*r, y, r/2);
    SierpinskiCarpet2(g, brush, x-2*r, y-2*r, r/2);
    SierpinskiCarpet2(g, brush, x, y+2*r, r/2);
    SierpinskiCarpet2(g, brush, x, y-2*r, r/2);
    SierpinskiCarpet2(g, brush, x+2*r, y+2*r, r/2);
    SierpinskiCarpet2(g, brush, x+2*r, y, r/2);
    SierpinskiCarpet2(g, brush, x+2*r, y-2*r, r/2);
    g.FillRectangle(&brush, x-r/4, y-r/4, r/2, r/2);
}

void CGdiplusDemoView::SierpinskiCarpet3(Graphics& g, SolidBrush& brush, int x, int y, int r)
{
    if ( r <= 0 )
        return;

    SierpinskiCarpet3(g, brush, x-r, y+r, r/2);
    SierpinskiCarpet3(g, brush, x+r, y+r, r/2);
    SierpinskiCarpet3(g, brush, x-r, y-r, r/2);
    SierpinskiCarpet3(g, brush, x+r, y-r, r/2);
    g.FillRectangle(&brush, x-r/3, y-r/3, r/3, r/3);
}


댓글 1개:

익명 :

People should read this.