下面这些程序在调用时输出的结果都是数字,怎么修改才能让他们调用时输出的是波形,请大家帮忙
//正弦信号程序:
void signal_sin(double amp,double f, double dt, double  phi, double *y, int N)
{
double pi;
int i;
pi = atan(1.0) * 4.0; 
for (i=0;i<N;i++) y[i]= amp * sin(2.0*pi * f * dt * i  + phi );
}
//三角波程序:
void signal_tri(double amp, double w, double flat_t,double dt, double *y, int N)
{
double slop1,slop2,L,x,w1,w2,t;
int i;
L = w + flat_t;
w1 = w /2.0; w2= w1;
slop1 = amp / w1;
slop2 = -amp / w2;
for (i=0;i<N;i++)
{
t = dt * (double) i;
x =  t -  L * (double) ( (int) (t / L)); 
if (x >= 0.0 && x <= w1) y[i] = slop1 * x;
if (x > w1 && x < w ) y[i] = amp + slop2 * (x - w1);
if (x >= w && x <= L ) y[i] = 0.0;
};
}
//矩尺波程序:
void signal_jc(double amp, double w1, double w2, double flat_t,double dt, double *y, int N)
{
double w,L,t,x,slop1,slop2;
int i;
w = w1+w2;
L = w + flat_t;
slop1 = amp / w1;
slop2 = -amp / w2;
for (i=0;i<N;i++)
{
t = dt * (double) i;
x =  t -  L * (double) ( (int) (t / L)); 
if (x >= 0.0 && x <= w1) y[i] = slop1 * x;
if (x > w1 && x < w ) y[i] = amp + slop2 * (x - w1);
if (x >= w && x <= L ) y[i] = 0.0;
};

解决方案 »

  1.   

    每个函数都有amp参数,可以作为幅度放大、缩小倍数使用。
    输出他们的波形:有了函数值输出波形就是画图任务了。
      

  2.   

    void CboxingView::OnDraw(CDC* pDC)
    {
    CboxingDoc* pDoc = GetDocument();
    ASSERT_VALID(pDoc); double yn[1000];
    signal_sin(40,0.01, 45, yn, 1000) ;
    }
    /**
    //amp:Y的扩大倍数
    //f:频率(每秒的周期数)
    //phi:弧度
    //y[]:纵坐标
    //N:横坐标(秒)
    */
    void CboxingView::signal_sin(double amp,double f, double  phi, double y[], int N) 

    double pi; 
    int i; 
    CClientDC dc(this);
    pi = atan(1.0) * 4.0; 
    dc.MoveTo (0,0);
    for (i=0;i <N;i++) 
    {
    y[i]= amp * sin(2.0*pi * f * double( i)+ phi)+200; 

    dc.SetPixel(i,y[i],RGB(0,0,0));
    dc.LineTo  (i,y[i]);
    dc.MoveTo (i,y[i]);
    }} 
    正弦波,其他的类似。自己先仿照作做看,不行的话,我再帮你
      

  3.   

    如果是动态的话,就把画图的调用放到ontimer的方法里面。
      

  4.   

    ok~~给我个油箱吧~~全程序太长~在这里贴不下,以前给人贴全程序的时候,系统说我恶意刷楼,不让我发另:自己加个"math.h"就可以。
      

  5.   

    另:这个是mfc项目的“单文档“工程