画一个五角星

来源:互联网 发布:莫知我哀的句式 编辑:程序博客网 时间:2024/05/17 04:24

画五角星有画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 图形处理/算法问题

    》》  能不能告诉我怎样画一个五角星?最好把算法讲得明白点,谢谢!!!