画五角星有画5点的和画10点的。5点五角星内部是有填充的,或者线有交叉。10点五角星是画出五角星的外围轮廓线。
不论是画5点五角星还是10点五角星,基本思路都是一样的。即,五角星的顶点在大圆上,五角星的拐点在小圆上。五个点与中心点连接构成的角度是360÷5=72度。
因此,5点法画五角星的代码就可以写成:
double pi = 3.1415926535;
CPoint point[5];
for(int i=0;i<5;i++)
{
point[i].x =(long)(ptCenter.x -nRadius*sin((i*72+36)*2*pi/360));
point[i].y =(long)(ptCenter.y +nRadius*cos((i*72+36)*2*pi/360));
}
for(i=0;i<5;i++)
{
pDC->MoveTo(point[i]);
pDC->LineTo(point[(i+2)%5]);
}
内部小圆的半径是大圆半径的几分之几呢?这个计算很简单。
10点法画五角星的代码可以写成:
POINT cirlce[11];
lreal largecircle_radius = Size;
lreal smallcircle_radius = (cos(72*2*_PI_/360)/cos(36*2*_PI_/360))*Size;
for(int32 i=0; i<10; i++)
{
cirlce[i].x =(long)(brush->x - largecircle_radius*sin((i*36+36)*2*_PI_/360));
cirlce[i].y =(long)(brush->y + largecircle_radius*cos((i*36+36)*2*_PI_/360));
i++;
cirlce[i].x =(long)(brush->x - smallcircle_radius*sin((i*36+36)*2*_PI_/360));
cirlce[i].y =(long)(brush->y + smallcircle_radius*cos((i*36+36)*2*_PI_/360));
}
cirlce[10] = cirlce[0];
::MoveToEx(memdc, cirlce[0].x, cirlce[0].y, NULL );
::PolylineTo(memdc, cirlce, 11);
如果用openGL画的话,代码参考
》》CSDN资料库 - VC/MFC 图形处理/算法问题
》》 能不能告诉我怎样画一个五角星?最好把算法讲得明白点,谢谢!!!