Глава 4
Следуя традициям, приведу сначала процедуру на псевдокоде:
Следующая функция реализует приведенный алгоритм на С++:
CBrush brSolidBrush(m_crColors[0]);
CPoint ptTriangle[3];
ptTriangle[0].x = x+len/2;
ptTriangle[1].x = x+len;
ptTriangle[2].x = x;
p->Polygon(ptTriangle,3);
if(order >0)
{
CPoint ptTriangle1[3];
ptTriangle1[0].x = x+len/4;
ptTriangle1[1].x = x+3*len/4;
ptTriangle1[2].x = x+len/2;
p->Polygon(ptTriangle1,3);
Sierpinsky(p, order - 1,x,y,len/2);
void CPaintDlg::Sierpinsky(CPaintDC *p, int order, int x, int y, int len)
{
CBrush *pOldBrush = NULL;
pOldBrush = p->SelectObject(&brSolidBrush);
ptTriangle[0].y = y-len*s3d2;
ptTriangle[1].y = y;
ptTriangle[2].y = y;
p->SelectObject(&brSolidBrush);
ptTriangle1[0].y = y-len*s3d2/2;
ptTriangle1[1].y = y-len*s3d2/2;
ptTriangle1[2].y = y;
p->SelectObject(pOldBrush);
Sierpinsky(p, order - 1,x+len/2,y,len/2);
Sierpinsky(p, order - 1,x+len/4,y-len*s3d2/2,len/2);
Для построения треугольника N-го порядка следует выполнить вызов:
Sierpinsky(pdc, 4, ptStart.x, ptStart.y, ((rRect.right-rRect.left)/2));
Передаем в параметры: контекст для рисования, порядок линии, начальную координату (x,y) и длину стороны треугольника.
Треугольник Серпинского 4-го порядка.
Назад |
Начало урока |
Вверх |
Вперед
Содержание