您的当前位置:首页螺旋线绘制

螺旋线绘制

2022-02-07 来源:飒榕旅游知识分享网
用C语言编写绘制画阿基米德螺旋线ρ= θ在[-150,150]区间内的曲线的程序,要求步长为0.1。 解答:

#include #include #include #include void main()

{int driver,mode; int x,y,x0,y0; float sita,r;

driver=DETECT;mode=VGAHI;

initgraph(&driver,&mode,\"\"); /*初始化图形模式*/ sita=-150.0;r=sita; /*绘图起点位置*/

x0=getmaxx()/2;y0=getmaxy()/2; /*取原点为屏幕的中心*/ x=x0+r*cos(sita); /*计算起点坐标*/ y=y0+r*sin(sita);

moveto(x,y); /*移绘图笔到起点*/ while(sita<150.0) {sita+=0.1;r=sita;

x=x0+r*cos(sita); /*计算下一点坐标*/ y=y0+r*sin(sita);

lineto(x,y); /*画线*/ }

x=x0+150*cos(150.0); /*计算终点坐标*/ y=y0+150*sin(150.0);

lineto(x,y); /*落笔到终点*/ getch(); /*按任何键继续*/ closegraph(); /*关闭图形模式*/ }

9.7 编写程序先绘出直角坐标系,再画出正弦曲线和余弦曲线,区间为[0,2π]。 解答:

#include #include #include #include void main()

{int driver,mode;

int x,y,x0,y0,maxx,maxy; float sita,r; sita=0;

driver=DETECT;mode=VGAHI;

initgraph(&driver,&mode,\"..\\\\BGI\"); /*初始化图形模式*/ maxx=getmaxx()/2;maxy=getmaxy()/2; /*xy坐标的单位值*/

x0=maxx;y0=maxy; /*取原点为坐标为屏幕的左边中心*/ moveto(0,y0); /*移绘图笔到原点*/ lineto(2*x0,y0); /*画线*/ moveto(x0,0); /*移绘图笔*/ lineto(x0,2*y0); /*画线*/

x=x0; /*计算起点坐标*/

y=y0;

moveto(x,y); /*移绘图笔到起点*/ setcolor(GREEN); /*设置绘图笔颜色*/ while(sita<2*3.1416) {sita+=0.1;

x=x0+sita*maxx/(2*3.1416); /*计算下一点坐标*/ y=y0-sin(sita)*maxy;

lineto(x,y); /*画线*/ }

x=x0+maxx; /*计算终点坐标*/ y=y0-sin(2*3.1426)*maxy;

lineto(x,y); /*落笔到终点*/ sita=0; /*计算cos函数 */

x=x0+sita*maxx/(2*3.1416); /*计算起点坐标*/ y=y0-cos(sita)*maxy;

moveto(x,y); /*移绘图笔到起点*/ setcolor(YELLOW); while(sita<2*3.1416) {sita+=0.1;

x=x0+sita*maxx/(2*3.1416); /*计算下一点坐标*/ y=y0-cos(sita)*maxy;

lineto(x,y); /*画线*/ }

x=x0+maxx; /*计算终点坐标*/ y=y0-cos(2*3.1426)*maxy;

lineto(x,y); /*落笔到终点*/ getch(); /*按任何键继续*/ closegraph(); /*关闭图形模式*/ }

9.9 设计简单的下拉菜单,实现Turbo C的主菜单以及Run的子菜单。 解答:

#include #include void main()

{int i,key0,key,key1,y,test;

char *m[]={\"File\

\"Debug\

char *f[]={\"Run Ctrl-F9\子菜单*/

\"Programick Alt-F3\ \"New \ \"Save F2\ \"Write to \ \"Directory \ \"Change dir \ \"Os shell \ \"Quit Alt-X\

char buf0[80*2],buf[16*10*2],buf1[16*2]; /*定义保存屏幕区域的数组*/ textbackground(BLUE); /*定义背景颜色*/ clrscr();

window(1,1,80,1); /*定义主菜单区域的窗口*/ textbackground(WHITE); /*设置窗口背景颜色*/

textcolor(BLACK); /*设置窗口字符颜色*/ clrscr();

window(1,1,80,2); for(i=0;i<8;i++)

cprintf(\" %s\显示主菜单*/

gettext(1,1,80,2,buf0); /*保存主菜单区域内容*/ while(1) {key=0;

while(bioskey(1)==0); /*等待键盘输入*/ key=bioskey(0); /*取键盘输入码*/

key=key&0xff?0:key>>8; /*屏蔽低8位,只取扩充键码*/ if(key==45) exit(0); /*如果是按Alt+X则退出*/

if(key==33) /*如果是按Alt+F则进入子菜单处理*/ {textbackground(BLACK); textcolor(WHITE); gotoxy(4,1);

cprintf(\"%s\

gettext(4,2,19,11,buf); /*保存窗口区域的原有内容*/ window(4,2,19,11); textbackground(WHITE); textcolor(BLACK); clrscr();

window(4,1,19,12); gotoxy(1,1);

putch(0xDA); /*作一个单线矩形边框*/ for(i=2;i<16;i++) putch(0xC4); putch(0xBF);

for(i=2;i<10;i++)

{gotoxy(1,i);putch(0xB3); gotoxy(16,i);putch(0xB3); }

gotoxy(1,10); putch(0xC0);

for(i=2;i<16;i++) putch(0xC4); putch(0xD9);

for(i=1;i<10;i++) /*显示File子菜单内容*/

{gotoxy(2,i+1);

cprintf(\"%s\

}

gettext(2,2,18,3,buf1); /*保存产生色棒前的原来信息*/ textbackground(BLACK); /*产生一个色棒*/ textcolor(WHITE); gotoxy(2,2);

cprintf(\"%s\ y=2; key0=0;

while(key0!=27&&key0!=13) /*输入为ESC或回车键则退出循环*/

{ while(bioskey(1)==0); /*等待键盘输入*/ key0=key1=bioskey(0); /*取键盘输入码*/ key0=key0&0xFF; /*只取ASCII码*/

key1=key1&0xFF?0:key1>>8; /*屏蔽低8位,只取扩充键码*/

if(key1==72||key1==80) /*如果为上、下箭头键*/

{puttext(2,y,18,y+1,buf1); /*恢复保存在buf1的屏幕内容*/ if(key1==72) y=y==2?10:y-1; /*上箭头处理*/ if(key1==80) y=y==10?2:y+1; /*下箭头处理*/

gettext(2,y,18,y+1,buf1); /*保存新色棒产生前屏幕区域的内容*/ textbackground(BLACK); /*产生新色棒*/ textcolor(WHITE); gotoxy(2,y);

cprintf(\"%s\ }

test=y-1;

}

if(key0==13) /*输入回车键对子菜单操作的处理(简化)*/

{switch(test) {case 1:break; case 2:break;

/*此处为case 3到case 8*/

case 9:exit(0); default:break; } }

window(1,1,80,2);

puttext(1,1,80,2,buf0); /*恢复主菜单*/ puttext(4,2,19,11,buf); /*释放子菜单窗口*/

} } }

因篇幅问题不能全部显示,请点此查看更多更全内容