本作业详细介绍了使用VC++编程环境绘制五角星的方法,包括几何原理、代码实现和调试技巧,是学习计算机图形学的基础实践。
在图形学作业中使用VC++绘制五角星的代码如下:
```cpp
void CHuayuView::OnDraw(CDC* pDC)
{
CHuayuDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// 画五角星
int X0=100, Y0=100, R=80;
float a[6][3], b[6][3];
float xr;
float pi = 3.14;
a[1][1] = X0;
a[1][2] = Y0 + R;
// 计算五角星的顶点
for (int i=2; i<6; ++i) {
float angle = pi * 3.5 / 10 - (i-2)*pi/5;
a[i][1] = X0 + R*sin(angle);
a[i][2] = Y0 + R*cos(angle);
}
// 计算五角星的中间点
xr = (a[2][2]-Y0)/cos(pi / 5);
b[1][1]=X0-sin(pi/5)*xr;
b[1][2] = a[2][2];
for(int i=2; i<6; ++i) {
float angle = pi * 3.5 / 10 - (i-4)*pi/2.5;
b[i][1]=X0+sin(angle)*xr;
b[i][2] = Y0-cos(angle)*xr;
}
// 连接顶点和中间点
pDC->MoveTo(a[5][1], a[5][2]);
for(int i=1; i<6; ++i) {
pDC->LineTo(b[i][1], b[i][2]);
pDC->LineTo(a[i][1], a[i][2]);
}
// 连接顶点形成五角星
pDC->MoveTo(a[1][1], a[1][2]);
for(int i=0; i<5; ++i) {
int next = (i+4)%5;
pDC->LineTo(b[next+1][1], b[next+1][2]);
pDC->MoveTo(a[(next+1)][1], a[(next+1)][2]);
}
// 计算填充区域的中心点
int c[5][2];
for(int i=0; i<5; ++i) {
c[i][0]=(a[i+1][1]+b[i+1][1]+X0)/3;
c[i][1]=(a[i+1][2]+b[i+1][2]+Y0)/3;
}
int d[5][2];
for(int i=0; i<5; ++i) {
d[i][0] = (a[i + 1][1] + b[(i + 2)%6][1] + X0) / 3;
d[i][1] = (a[i + 1][2] + b[(i + 2)%6][2] + Y0) / 3;
}
// 设置填充颜色
CBrush brush;
brush.CreateSolidBrush(RGB(0,255,0));
pDC->SelectObject(&brush);
for(int i=0; i<5; ++i){
pDC->ExtFloodFill(c[i][0],c[i][1],RGB(0,0,0),FLOODFILLBORDER);
Sleep(40);
}
CBrush brush2;
brush2.CreateSolidBrush(RGB(222, 111, 222));
pDC->SelectObject(&brush2);
for(int i=0; i<5; ++i){
pDC->ExtFloodFill(d[i][0],d[i][1],RGB(0,0,0),FLOODFILLBORDER);
Sleep(40);
}
}
```
这段代码将绘制一个五角星,并以两种不同的颜色填充其内部区域。