《Windows C 图形程序设计》

教学演示 3.4

JXYS3.4 用椭圆弧函数绘制正弦波、圆形圆弧图形

  ZXB.CPP ZXB.EXE CKGLa.cpp CKGLa.exe YXYH.CPP YXYH.EXE

 1.语句

 1) 绘制圆形和圆弧
   椭圆形
   Ellipse(hdc,int(x0-360),int(y0-210),int(x0+360),int(y0+210));

   水平排放两圆
   for(x=x0-325;x<x0+320.0;x+=328)
   {
   Ellipse(hdc,int(x),int(y0-162),int(x+324),int(y0+162));
   }

  圆弧曲线
   hPen=CreatePen(fnPenStyle,nPenWidth,crPenColor);
   SelectObject(hdc,hPen);
   for(x=x0-323;x<x0+320.0;x+=329)
   {
   Arc(hdc,int(x),int(y0-ym),int(x+160.0),int(y0+ym),
   int(x+160.0),int(y0),int(x),int(y0));
   Arc(hdc,int(x+160.0),int(y0-ym),int(x+320.0),int(y0+ym),
   int(x+160.0),int(y0),int(x+320.0),int(y0));
   }

 1.1) 绘制水平和垂直轴线

 2) 用椭圆弧函数绘制正弦波
   hPen=CreatePen(fnPenStyle,nPenWidth,crPenColor);
   SelectObject(hdc,hPen);
   for(ym=90.0;ym<=180.0;ym+=30.0)
   {
   for(x=x0-314.0;x<x0+314.0;x+=314.0)
   {
   Arc(hdc,int(x),int(y0-ym),int(x+157.0),int(y0+ym),
   int(x+157.0),int(y0),int(x),int(y0));
   Arc(hdc,int(x+157),int(y0-ym),int(x+314.0),int(y0+ym),
   int(x+157),int(y0),int(x+314.0),int(y0));
   }
   }

 3) 绘制左窗口边框和扫描刷新窗口
   for(x=x01-184;x<x01+184;x+=0.01)
   {
   for(y=y0-220;y<y0-218;y++)
   {
   SetPixel(hdc,int(x),int(y),RGB(255,0,255));
   }
   }

   for(y=y0-214;y<y0+214;y+=0.3)
   {
   for(x=x01-178;x<x01+178;x++)
   {
   SetPixel(hdc,int(x),int(y),RGB(0,180,180));
   }
   }

 4)  绘制右窗口边框和扫描刷新窗口
   for(x=x02-184;x<x02+184;x+=0.01)
   {
   for(y=y0-220;y<y0-218;y++)
   {
   SetPixel(hdc,int(x),int(y),RGB(0,255,0));
   }
   }

   for(x=x02-178;x<x02+178;x+=0.2)
   {
   for(x=x01-178;x<x01+178;x++)
   {
   SetPixel(hdc,int(x),int(y),RGB(255,0,0));
   }
   }

 5) 绘制右窗口的正弦波,半波数5,9,25个,幅高40
 5.1) 绘制正弦波,半波数5,幅高40
   // 半波宽度 xw,幅高 ym,半波数 bs
   xw=60,ym=40,bs=5;

   // 正半波
   {
   for(x=x02-xw*bs/2;x<=x02+(bs/2-1)*xw;x+=2*xw)
   {
   Arc(hdc,int(x),int(y01-ym),int(x+xw),int(y01+ym),
   int(x+xw),int(y01),int(x),int(y01));
   }
   }

   / 负半波
   {
   for(x=x02-xw*(bs/2-1);x<=x02+(bs/2-2)*xw;x+=2*xw)
   {
   Arc(hdc,int(x),int(y01-ym),int(x+xw),int(y01+ym),
   int(x),int(y01),int(x+xw),int(y01));
   }
   }

 6) 输出左窗口文本 DrawText
   TextOut(hdc, 96,int(y0-150), "Windows C 图形程序设计",22);
   TextOut(hdc,135,int(y0-120), "正弦波图形",10);
   TextOut(hdc, 50,int(y0-90),  "1. 用点函数黄绿青色水平垂直扫描刷新全屏",39);
   TextOut(hdc, 50,int(y0-60),  "2. 用点函数绘制紫绿青边框线",27);
   TextOut(hdc, 50,int(y0-30),  "3. 绘制正弦波,半波数5,幅高80,120,160",40);
   TextOut(hdc, 50,int(y0),     "4. 保留紫绿青边框线扫描刷新窗口",31);
   TextOut(hdc, 50,int(y0+30),  "5. 绘制正弦波,半波数9,17,53个,幅高40",40);
   TextOut(hdc, 50,int(y0+60),  "6. 保留紫绿青边框线扫描刷新窗口",31);
   TextOut(hdc, 50,int(y0+90),  "7. 绘制小窗口边框和扫描刷新小窗口",33);
   TextOut(hdc, 50,int(y0+120), "8. 用椭圆弧函数绘制右窗口多波峰正弦波图形",41);
   TextOut(hdc, 50,int(y0+150), "9. 输出左窗口文本",17);
   TextOut(hdc,150,int(y0+180), "佛山 谢山水 2003.5.5.",21);

 2.程序源代码 ZXB.CPP CKGLa.cpp YXYH.CPP

 3.程序可执行文件 ZXB.EXE CKGLa.exe YXYH.EXE

 4.程序运行结果图形 xhy.gif ZXB.gif