资源描述:
《首先,谢谢兄,国庆快乐~.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、首先,谢谢师兄,国庆快乐~一:作业是用MFC做的,执行文件为“HomeworkOnMFC.exe”1、运行后,可在按键“绘图”中点击“绘制坐标轴”和“绘制等值线”来显示绘图结果。2、自定义了类Point,记录插值点的信息。类申明是在Point.h中,代码如下:classPoint//定义类,包含每个插值点的信息,每个函数的内容在Point.cpp中{public:Point(){x=0;y=0;}Point(doublea,doubleb){x=a;y=b;}doublefuction_value();//该绘图点p的函数值doubleslope_pp();//pp1
2、的斜率doublegradientx();//f(x,y)对x的偏导数doublegradienty();//f(x,y)对y的偏导数intpositon();//函数值大于,position取;函数值小于,position取-1;函数值等于,position取doubledistant();//插值点p和起始点p1之间的距离doublex;//横坐标doubley;//纵坐标//Point();//virtual~Point();//protected://DECLARE_MESSAGE_MAP()};类定义是在Point.cpp中,代码如下:externdoubl
3、epx0;externdoublepy0;externdoublepx1;externdoublepy1;externdoubleFt;//Point//IMPLEMENT_DYNAMIC(Point,CWnd)//BEGIN_MESSAGE_MAP(Point,CWnd)//END_MESSAGE_MAP()doublePoint::fuction_value(void)//返回函数值f(x,y)=x*x+y*y{return(pow(x,2)+pow(y,2));}doublePoint::slope_pp(void)//点p0p1之间的斜率{return((y-
4、py1)/(x-px1));}doublePoint::gradientx(void)//函数f(x,y)关于x的偏导数{return(x/sqrt(pow(x,2)+pow(y,2)));}doublePoint::gradienty(void)//函数f(x,y)关于y的偏导数{return(y/sqrt(pow(x,2)+pow(y,2)));}intPoint::positon()//确定插值点是在等值线之外还是之内{if((pow(x,2)+pow(y,2))>Ft)return1;elseif((pow(x,2)+pow(y,2))5、;//elseif((pow(x,2)+pow(y,2))==Ft)elsereturn0;}doublePoint::distant()//插值点到p1点的距离{return(sqrt(pow(x-px1,2)+pow(y-py1,2)));}1、算法的实现是在“类视图”——“CHomeworkOnMFCview”中的函数CDraw_Isoline(CDC*pDC)中,代码如下:voidCHomeworkOnMFCView::CDraw_Isoline(CDC*pDC)//采用算法.3绘制等值线{doublestep;if(abs(px1-px0)<=abs(py1
6、-px0))//确定步长step,为了保证精度,由p0p1之间x轴或y轴方向较大距离确定步长{step=abs(px1-px0)/200;}elsestep=abs(py1-py0)/200;Pointp[10000],p0(px0,py0),p1(px1,py1);//Point为之定义的点类,定义在Point.cpp中Pointtemp1,temp2,temp;p[0]=p0;inti;doublecos,sin;for(i=0;p[i].distant()>step;i++)//以插值点和p1点之间的距离小于步长step为结束标志{temp1.x=p[i].x+
7、step/pow(1+pow(p[i].slope_pp(),2),0.5);temp1.y=p[i].y+step*p[i].slope_pp()/pow(1+pow(p[i].slope_pp(),2),0.5);//沿pp1方向前进一个stepif(temp1.positon()>0)//如果在函数值大于Ft,沿逆法线方向前进一步step{while(temp1.positon()>0)//如果前进后仍大于Ft,继续沿逆法线方向前进{cos=temp1.gradientx()/sqrt(pow((pow(temp1.gradientx(),2)