|
楼主 |
发表于 2004-5-2 23:19:10
|
显示全部楼层
<>下面程序是在TC环境下实现y=sin(x) ,,-pi<x<pi 。</P><>/*y=sin(x),-pi<x<pi*/
#define pi 3.14159265
#include <stdio.h>
#include <math.h>
#include <graphics.h>
main()
{
int driver=DETECT,moder,ierror; /*指定driver为DETECT,这时系统装入检测到的合适的驱动程序,且置moder为所检测到驱动器的最高分辨率的图形模式。*/
int i,x0,y0,x1,y1,xmax,ymax;
double x,y,dx;
struct arccoordstype arcinfo;
initgraph(&driver,&moder," ");/*初始化图形系统。driver用来表示图形卡,是一个整数,也用来指定所用的图形驱动程序;moder为图形模式,它是一个整数。*/
ierror=graphresult(); /*返回最近一次图形操作对应的错误代码。此错代码报告一个错误,当graphresult()被调用后,将错误码复位为0,即grOk。*/
if(ierror!=0)
{
printf("graphics error:%s\n",grapherrormsg(ierror));/*grapherrormsg()为返回一个指向错误信息串的指针。*/
printf("ress any key to halt.");
getch(); /*getch()作用相当于一个等待开关,当你击任一这键后,程序运行下一条命令。*/
exit(1); /* terminate with an error code */
}
xmax=getmaxx(); /*返回当前x方向分辨率,getmaxx()返回当前图形驱动程序和模式下屏幕的最大x坐标。如像素为800*600,这时getmaxx()返回799,那是屏幕的最大x坐标。*/
ymax=getmaxy(); /*返回当前y方向分辨率,getmaxx()返回当前图形驱动程序和模式下屏幕的最大y坐标。如像素为800*600,这时getmaxx()返回599,那是屏幕的最大y坐标。*/
setbkcolor(GREEN);/*设置当前背景色。*/
dx=pi/400;
x=-pi;
x0=(int)(0.5*xmax+x*xmax/8); /*笛卡尔坐标系变换为设备坐标系。设备坐标系取左上角为坐标原点,水平向右为X正向,垂直向下为Y轴方向。*/
y=sin(x);
y0=(int)(0.5*ymax-y*ymax/(2*pi));/*笛卡尔坐标系变换为设备坐标系。*/
moveto(x0,0.5*ymax); /*将当前位置CP移到指定点。*/
x1=(int)(0.5*xmax-x*xmax/7);
lineto(x1,0.5*ymax); /*从当前位置CP到(x,y)画直线段。该函数用当前颜色,线型,线宽从当前位置CP到(x,y)画一条直线段,调用完成后将当前位置C定位在新点(x,y)。*/
linerel(-20,6);/*从当前位置CP到与CP有相对距离的点画直线。linerel(),从CP到与CP有相对距离(dx,dy)的点用当前颜色,线型,线宽画一条直线段,调用完成后CP坐标增加(dx,dy)。*/
moverel(0,-12);/*将当前位置CP移动到指定点。*/
lineto(x1,0.5*ymax);
settextstyle(0,0,1);/*为图形模式设置当前文本属性。设置文本字体:8*8位字体;文本方向:从左到右;字符大小:8*8像素矩阵。*/
moverel(-10,-15);
outtext("X");/*向屏幕当前位置CP显示一字符串。*/
y1=(int)(0.7*ymax);
x1=(int)(0.5*xmax);
moveto(x1,y1);
lineto(x1,0.4*y1);
linerel(6,20);
moverel(-12,0);
linerel(6,-20);
moverel(-15,0);
outtext("Y");
moveto((int)(0.5*xmax),(int)(0.5*ymax));
moverel(10,10);
outtext("0");
moverel(-(int)(0.5*xmax)+40,0);
outtext("-pi");
moverel((int)(0.5*xmax)+160,0);
outtext("pi");
moveto(200,20);
setcolor(YELLOW);/*利用调色板设置当前画图颜色。*/
moveto(180,100);
settextstyle(0,0,2);/*设置文本字体:8*8位字体;文本方向:从左到右;字符大小:16*16像素矩阵。*/
setcolor(RED);
outtext("y=sin(x) , -pi<x<pi");
moveto(x0,y0);
for(i=1;i<=800;i++)
{
x=x+dx;
y=sin(x);
x1=(int)(0.5*xmax+x*xmax/8);
y1=(int)(0.5*ymax-y*ymax/6);
lineto(x1,y1);
}
getch();
closegraph();/*退出图形系统。该函数无返回值。*/
}</P> |
|