OnDraw
CRect rect;
GetClientRect(&rect);
//将坐标轴及原点移至中央
pDC->SetMapMode(MM_ANISOTROPIC);
pDC->SetWindowExt(rect.Width(), rect.Height());
pDC->SetViewportExt(rect.Width(), -rect.Height());
pDC->SetViewportOrg(rect.Width() / 2, rect.Height() / 2);
rect.OffsetRect(-rect.Width() / 2, -rect.Height() / 2);
int r = 200, n = 5, k = 0, j = 4;//r为初始最大的分割圆半径,j为交互传 入的递归次数
double PI = 3.14159;
CPoint P[5];//5等分圆得到五个顶点
double Theta = 2 * PI / n;
double Alta = PI / 10;
double Ethta = PI / 5;
double lr = 1 / (cos(Ethta) * cos(Ethta) * 4);每次递归分割圆的缩小比例
CPen greenPen, bluePen, * pOldPen;
greenPen.CreatePen(0, 1, RGB(0, 255, 0));
bluePen.CreatePen(0, 1, RGB(0, 0, 255));
while (k < j)
{
for (int i = 0; i < n; i++) {
P[i].x = round(r * cos(i * Theta + Alta * (1+k*2)));
P[i].y = round(r * sin(i * Theta + Alta * (1+k*2)));
}
pOldPen = pDC->SelectObject(&greenPen);
for (int i = 0; i < n; i++)
{
pDC->MoveTo(P[i]);
pDC->LineTo(P[(i + 2) % 5]);//隔点绘制五角星
}
pDC->SelectObject(pOldPen);
pOldPen = pDC->SelectObject(&bluePen);
for (int i = 0; i < n; i++)
{
pDC->MoveTo(P[i]);
pDC->LineTo(P[(i + 1) % 5]);//连续点绘制正五边形
}
pDC->SelectObject(pOldPen);
r = r * lr;
k++;
}