用VC画五角星的方法

     五角星有五个点,通过其中的两个可以确定圆心,由圆心可以找出另外的三个点,只要把这五个点都找全了,运用pDC->MoveTo() ,pDC->LineTo()按一定的点顺序就可以把五角星画出来。

 

//这是在确定五个点的坐标。
  int x1=x0,
      x2=(int)(x0-Math.sin(ch)*r),
      x3=(int)(x0+Math.sin(ch)*r),
      x4=(int)(x0-Math.sin(ch/2)*r),
      x5=(int)(x0+Math.sin(ch/2)*r);
  int y1=y0-r,
      y2=(int)(y0-Math.cos(ch)*r),
      y3=y2,
      y4=(int)(y0+Math.cos(ch/2)*r),
      y5=y4;
//由半径和圆心确定了五个点的坐标

 

  //五角星是中心对称图形,角度的实际取值范围在“0——72”之间;
  int x[]={(int)(x0+Math.sin(de)*r),
           (int)(x0-r*Math.sin(ch-de)),
           (int)(x0+r*Math.cos(de-ch/4)),
           (int)(x0-r*Math.sin(ch/2+de)),
           (int)(x0+r*Math.sin(ch/2-de)),
          };
  int y[]={(int)(y0-r*Math.cos(de)),
           (int)(y0-r*Math.cos(ch-de)),
           (int)(y0+r*Math.sin(de-ch/4)),
           (int)(y0+r*Math.cos(ch/2+de)),
           (int)(y0+r*Math.cos(ch/2-de)),
           }

以上是可能用到的核心代码。

    double de = atan((b2-a2)/(b1-a1));
    double ch = 144*pi/180;

    double de = atan((b2-a2)/(b1-a1));
    double ch = 72*pi/180;
图形学作业:五角星VC++法 void CHuayuView::OnDraw(CDC* pDC) { CHuayuDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); // TODO: add draw code for native data here //五角星 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; a[2][1] = X0 + R * sin(pi / 2.5); a[2][2]= Y0 + R * cos(pi / 2.5); a[3][1] = R * sin(pi / 5) + X0; a[3][2] = Y0 - R * cos(pi / 5); a[4][1] = -R * sin(pi / 5) + X0; a[4][2] =a[3][2]; a[5][1] = X0 - R * sin(pi / 2.5); a[5][2] = a[2][2]; xr = (a[2][2] - Y0) / cos(pi / 5); b[1][1] = X0 - sin(pi / 5) * xr; b[1][2] = a[2][2]; b[2][1] = X0 + sin(pi / 5) * xr; b[2][2] = b[1][2]; b[3][1] = sin(pi / 2.5) * xr + X0; b[3][2] = -cos(pi / 2.5) * xr + Y0; b[4][1] = X0; b[4][2] = -xr + Y0; b[5][1] = -sin(pi / 2.5) * xr + X0; b[5][2] = b[3][2]; pDC->MoveTo(a[5][1], a[5][2]); int i; for(i=1;iLineTo(b[i][1], b[i][2]); pDC->LineTo(a[i][1], a[i][2]); } pDC->MoveTo(a[1][1], a[1][2]);pDC->LineTo(b[4][1], b[4][2]); pDC->MoveTo(a[2][1], a[2][2]);pDC->LineTo(b[5][1], b[5][2]); pDC->MoveTo(a[3][1], a[3][2]);pDC->LineTo(b[1][1], b[1][2]); pDC->MoveTo(a[4][1], a[4][2]);pDC->LineTo(b[2][1], b[2][2]); pDC->MoveTo(a[5][1], a[5][2]);pDC->LineTo(b[3][1], b[3][2]); int c[5][2]; for(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(i=0;iSelectObject(&brush); for(i=0;iExtFloodFill(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(i=0;iExtFloodFill(d[i][0],d[i][1],RGB(0,0,0),FLOODFILLBORDER); Sleep(40); } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值