我现在绘制一个正太分布函数图像,函数为y=(1/(sqrt(2*PI)*sigma))*exp(-1*pow(x-miu,2)/(2*sigma*sigma));代码如下:void CNiheDlg::OnPaint() 
{ CPaintDC dc(this); // device context for painting
CRect rc;
GetClientRect(&rc);
CPen pen(PS_SOLID,1,RGB(0,0,0));
CPen*pPen=dc.SelectObject(&pen);
dc.SetViewportOrg(20,rc.bottom/2);//设置屏幕中心为原点(窗口的原点,视口的中心)
dc.MoveTo(-20,0);
dc.LineTo(rc.right,0);//横坐标轴
dc.MoveTo(20,-233);
dc.LineTo(20,rc.bottom);//纵坐标轴
pen.DeleteObject();
pen.CreatePen(PS_SOLID,1,RGB(255,0,0));
pPen=dc.SelectObject(&pen);

int x=0;
int y;
double miu=80;
double sigma=1;
y=20.f*y_value(x,miu,sigma);
dc.MoveTo(20+x,y);
for(int  i=2;i<200;i++)
{
x=i;
y=20.f*y_value(x,80,sigma);
dc.LineTo(20+x,y);
}
dc.SelectObject(pPen);

}
double CNiheDlg::y_value(double x,double miu,double sigma)
{
double s;
s=(1/(sqrt(2*PI)*sigma))*exp(-1*pow(x-miu,2)/(2*sigma*sigma)); return s;
}画出的线不是曲线,而是一条直线,只有在x取到miu值时,稍有凸起,其他的x值对应的线都是直线,我应该怎么改才能画出一条平滑的正态分布曲线呢!谢谢  以前没画过  画了半天 还是这个现象。(我在调式的过程中发现除了x取到miu值时y值不是0,其他的x值所求得的y都是0,怎么弄啊 谢谢了)

解决方案 »

  1.   

    在循环里加上dc.MoveTo(20+x,y);试试
      

  2.   

    [Quote=引用 1 楼 beyondhaven 的回复:]
    在循环里加上dc.MoveTo(20+x,y);试试
    [/Quote不行   我那个算法是不写错了啊!不可能啊  我那时从书上抄的正态分布公式啊。
      

  3.   

    问题已经搞定,和大家分享一下 函数的原型为y=(1/(sqrt(2*PI)*sigma))*exp(-1*pow(x-miu,2)/(2*sigma*sigma));再次基础上要做一些改动写成这样y=A*exp(-1*pow(x-miu,2)*5*sigma/10000);A是幅值可以随便设,其余是改动后的函数,为什么是这样改动我也不知道,我只是搜了一些相关的资料发现别人在一些函数的原型上做了一些改动  我就把我的也改了一下,调试中不断地试了一些参数,这个参数设置比较合适!如果有知道为什么要改动原函数参数的原因告我一些!