生成一个MFC画五角星vs算法,要求有setpixel不需要填充
时间: 2024-03-16 14:42:27 浏览: 217
好的,我了解了你的要求。下面是一个简单的 MFC 代码示例,用于绘制一个五角星:
```
void CMyView::OnDraw(CDC* pDC)
{
CPen pen(PS_SOLID, 1, RGB(0, 0, 0));
CPen* pOldPen = pDC->SelectObject(&pen);
int x = 100; // 五角星中心点的 x 坐标
int y = 100; // 五角星中心点的 y 坐标
int r = 50; // 五角星外接圆的半径
int r2 = r * sin(18 * 3.1415926 / 180) / sin(126 * 3.1415926 / 180); // 五角星内接圆的半径
// 绘制五角星的五个点
POINT pts[5];
for (int i = 0; i < 5; i++)
{
pts[i].x = (int)(x + r * cos((18 + 72 * i) * 3.1415926 / 180) + 0.5);
pts[i].y = (int)(y - r * sin((18 + 72 * i) * 3.1415926 / 180) + 0.5);
}
pDC->Polyline(pts, 5);
// 绘制五角星的五条边
for (int i = 0; i < 5; i++)
{
int x1 = (int)(x + r2 * cos((54 + 72 * i) * 3.1415926 / 180) + 0.5);
int y1 = (int)(y - r2 * sin((54 + 72 * i) * 3.1415926 / 180) + 0.5);
int x2 = (int)(x + r2 * cos((126 + 72 * i) * 3.1415926 / 180) + 0.5);
int y2 = (int)(y - r2 * sin((126 + 72 * i) * 3.1415926 / 180) + 0.5);
pDC->MoveTo(x1, y1);
pDC->LineTo(x2, y2);
}
pDC->SelectObject(pOldPen);
}
```
该示例使用 `Polyline` 函数绘制五角星的五个点,使用 `MoveTo` 和 `LineTo` 函数绘制五角星的五条边。其中,五角星的外接圆半径 `r` 和内接圆半径 `r2` 的计算公式如下:
```
r2 = r * sin(18 * 3.1415926 / 180) / sin(126 * 3.1415926 / 180)
```
你也可以使用 `SetPixel` 函数来实现绘制五角星的功能,以下是一份示例代码:
```
void CMyView::OnDraw(CDC* pDC)
{
CPen pen(PS_SOLID, 1, RGB(0, 0, 0));
CPen* pOldPen = pDC->SelectObject(&pen);
int x = 100; // 五角星中心点的 x 坐标
int y = 100; // 五角星中心点的 y 坐标
int r = 50; // 五角星外接圆的半径
int r2 = r * sin(18 * 3.1415926 / 180) / sin(126 * 3.1415926 / 180); // 五角星内接圆的半径
// 绘制五角星的五个点
POINT pts[5];
for (int i = 0; i < 5; i++)
{
pts[i].x = (int)(x + r * cos((18 + 72 * i) * 3.1415926 / 180) + 0.5);
pts[i].y = (int)(y - r * sin((18 + 72 * i) * 3.1415926 / 180) + 0.5);
}
for (int i = 0; i < 5; i++)
{
pDC->SetPixel(pts[i].x, pts[i].y, RGB(0, 0, 0));
}
// 绘制五角星的五条边
for (int i = 0; i < 5; i++)
{
int x1 = (int)(x + r2 * cos((54 + 72 * i) * 3.1415926 / 180) + 0.5);
int y1 = (int)(y - r2 * sin((54 + 72 * i) * 3.1415926 / 180) + 0.5);
int x2 = (int)(x + r2 * cos((126 + 72 * i) * 3.1415926 / 180) + 0.5);
int y2 = (int)(y - r2 * sin((126 + 72 * i) * 3.1415926 / 180) + 0.5);
pDC->MoveTo(x1, y1);
pDC->LineTo(x2, y2);
}
pDC->SelectObject(pOldPen);
}
```
该示例使用 `SetPixel` 函数绘制五角星的五个点,其他绘制方式与前一个示例相同。
阅读全文