《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