问题1:应用程序实时采集数据,需作数据随时间变化的曲线,是否只能用画图(moveto、lineto)的方法?
问题2:应用程序采集的数据保存在历史表中,又如何作某一点或最高温度(最低、平均温度)历史曲线?

解决方案 »

  1.   

    看不懂你说的。1.这是普通常识,需要怎么做就怎么做,为什么只能用“画图”?不明白,如果你指的是画图是否只能有moveto和lineto,那么我可以告诉你,画图的函数很多,Delphi提供的有点象windows提供的,而且还要多,可以查看delphi的帮助TCanvas2.画一个坐标比例图,将数据转化成坐标点,然后就可以作出来了
      

  2.   

    用TCHART:
    procedure TForm1.BitBtn1Click(Sender: TObject);
    var
     i:integer;
     x,y,anl:double;begin
      for i:= 0 to 180 do
      begin
       anl:=i*3.1415926/180;
       x:=10*cos(anl);
       y:=10*sin(anl);
       series1.AddXY(x,y,'',clred);
      end;  for i:= 180 to 360 do
      begin
       anl:=i*3.1415926/180;
       x:=10*cos(anl);
       y:=10*sin(anl);
       series2.AddXY(x,y,'',clred);
      end;end;
      

  3.   

    也可以这样画:
    a为幅度,t为周期,ox,oy为原点,pa,pt为要描点的相对坐标,
    pnum表示取多少点.都以象素数为单位.
    procedure TForm1.Button1Click(Sender: TObject);
    var a,t,ox,oy,pa,pt,i,pnum:integer;
    begin
       a:=40;t:=100;
       ox:=200;oy:=200;
       pnum:=40;
       for i:=0 to pnum do
          begin
            pa:=round(a*sin(2*pi*i/pnum));
            pt:=round(t*i/pnum);
            canvas.Pixels[ox-pt,oy+pa]:=clred;
          end;
    end;
      

  4.   

    n个长度为1的线段连起来不就是曲线吗?
    采用timer组件控制画线的过程不就行了.
      

  5.   

    用 moveto(x1,y1);
    lineto(x2,y2);x1,y1 和x2,y2为输入坐标。下一次输入时设x3,y3 和前两个进行比较……重画…… 
      

  6.   

    问题一就该用moveto,lineto,这可是科学啊,不能自己瞎画吧,,如果曲线不够圆滑,就提高采样频率,提高不了的话,可以用插值法让它圆滑点儿
      

  7.   

    问题二用sql语句把历史表中符合条件的记录拿到,以这些点为坐标,连线。
    其实都是废话,就看你怎么写sql了。