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.
댓글 쓰기