//利用矩形左上角与右下角进行绘制 void CalcPoints(const RECT& rc); void CPolyCtl::CalcPoints(const RECT& rc) { const double pi = 3.14159265358979; //装载圆心的坐标 POINT ptCenter; //计算半径所表示的位置 double dblRadiusx = (rc.right - rc.left) / 2; double dblRadiusy = (rc.bottom - rc.top) / 2; //计算起始位置 double dblAngle = 3 * pi / 2; // Start at the top //计算的偏差位置 double dblDiff = 2 * pi / m_nSides; // Angle each side will make //通过矩形计算出中心点位置 ptCenter.x = (rc.left + rc.right) / 2; ptCenter.y = (rc.top + rc.bottom) / 2; //计算每个点的分布 // Calculate the points for each side for (int i = 0; i < m_nSides; i++) { //x1 = rx * cos(偏差角度+起始角度) + x0 //y1 = rx* sin(偏差角度+起始角度) + y0 m_arrPoint[i].x = (long)(dblRadiusx * cos(dblAngle) + ptCenter.x + 0.5); m_arrPoint[i].y = (long)(dblRadiusy * sin(dblAngle) + ptCenter.y + 0.5); //偏差位递增 dblAngle += dblDiff; } }