数模论坛

 找回密码
 注-册-帐-号
搜索
热搜: 活动 交友 discuz
查看: 3643|回复: 5

[讨论]用你们会的软件编程实现:y=sin(x) ,-pi

[复制链接]
发表于 2004-4-8 21:43:50 | 显示全部楼层 |阅读模式
<>编程实现: y=sin(x)  ,,-pi&lt;x&lt;pi   <X<I)
可用C语言,C++,VB,Delphi,java,vc++等编程软件
运行以后,在坐标轴上画出正弦函数!</P>
[此贴子已经被作者于2004-5-1 23:13:00编辑过]

 楼主| 发表于 2004-4-8 21:47:09 | 显示全部楼层
如果你们会,请把源代码发到这里来,好吗?
我们再综合比较一下各种编程软件的异同!
 楼主| 发表于 2004-5-2 23:19:10 | 显示全部楼层
<>下面程序是在TC环境下实现y=sin(x)  ,,-pi&lt;x&lt;pi 。</P><>/*y=sin(x),-pi&lt;x&lt;pi*/
#define pi 3.14159265
#include &lt;stdio.h&gt;
#include &lt;math.h&gt;
#include &lt;graphics.h&gt;
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(&amp;driver,&amp;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&lt;x&lt;pi");
   moveto(x0,y0);
   for(i=1;i&lt;=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>
发表于 2004-4-25 06:59:31 | 显示全部楼层
<>你是要画图吗?</P><>要是画图,对于不同的编译器,不同的类库画图的方法是不一样的</P><>要是做这样一个函数的话应该都是大体一样的吧,我想可以用一个无穷级数去逼近</P>
发表于 2004-5-1 18:22:59 | 显示全部楼层
<>各种有各种的优点?</P><>你是想干嘛呢?</P><>我有不知道?</P>
 楼主| 发表于 2004-5-1 23:04:34 | 显示全部楼层
<>我用C语言编这个正弦函数的思想是用很多的直线段连接起来的,这需要调用图像函数。如果是用数组画出它的大体轨迹这题就变得十分容易了。</P>
您需要登录后才可以回帖 登录 | 注-册-帐-号

本版积分规则

小黑屋|手机版|Archiver|数学建模网 ( 湘ICP备11011602号 )

GMT+8, 2024-11-27 08:31 , Processed in 0.087396 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表