1、请各位关心此源码的朋友帮助将其完善请各位关心此源码的朋友帮助将其完善,谢谢,希望大家共同进步。 等值线源码如下: #define MAXX 50 #define MAXY 50 #include #include #include #include #include #include /*=用趋势面加权最小二乘法计算网点高程制=*/ #include #include #include int CN1,CN2,NP1; /*-CN1,CN2为网点间距,NP1为测量点个数-*/ int X0,Y0; /*-X0,Y0为网格起点坐标-*/ void wzjs(int n,int m,float*x
2、,float *y,float *z,float *bb) int i,j,k,k0,k1,n0,hh=0; double cnum,x1,x2,y1,y2,xt,yt,xxt,yyt,xyt,zt,A,B,c; double e1010=0,u10=0; for(i=0;i=n;i+) /*-列网(X向)-*/ A=X0+i*CN1; for(j=0;j=m;j+) /*-横网(y向)-*/ B=Y0+j*CN2; for(k=0;k10;k+) uk=0; for(k0=0;k010;k0+) ekk0=0; for(k=0;kNP1;k+) /*-高斯法计算曲面方程值并计算网格点值-*/
3、 hh=0; if(A=*(x+k)&B=*(y+k) *(*(bb+i)+j)=*(z+k); hh=1; break; x1=*(x+k); y1=*(y+k); x2=x1*x1; y2=y1*y1; cnum=(x1-A)*(x1-A)+(y1-B)*(y1-B); cnum=1/cnum; xt=cnum*x1; yt=cnum*y1; xxt=x2*cnum; yyt=y2*cnum; xyt=x1*yt; e11=e11+cnum; e12=e12+xt; e13=e13+yt; e14=e14+xyt; e15=e15+xxt; e16=e16+yyt; e24=e24+x2*
4、yt; e25=e25+x2*xt; e26=e26+y2*xt; e36=e36+y2*yt; e44=e44+x2*yyt; e45=e45+x2*xyt; e46=e46+y2*xyt; e55=e55+x2*xxt; e66=e66+y2*yyt; zt=*(z+k)*cnum; u1=u1+zt; u2=u2+x1*zt; u3=u3+y1*zt; u4=u4+x1*y1*zt; u5=u5+x2*zt; u6=u6+y2*zt; if(hh=1) continue; e22=e15; e23=e14; e33=e16; e34=e26; e35=e24; e56=e44; for(
5、k=1;k6;k+) for(k0=k+1;k07;k0+) ek0k=ekk0; for(k=1;k7;k+) ek7=uk; n0=6; for(k=1;kn0;k+) for(k0=k+1;k0n0+1;k0+) for(k1=k+1;k10;k-) c=0; for(k0=k+1;k00&b20&i2n&j2m); k=k/2; if(xak+1-xak-1)0.3) sin=VERT_DIR; /*-书写等值数字-*/ else if(ybk+1-ybk-1)0.3) sin=VERT_DIR; else sin=(ybk+1-ybk-1)/(xak+1-xak-1); settex
6、tstyle(TRIPLEX_FONT,sin,3); setcolor(WHITE); settextjustify(CENTER_TEXT,CENTER_TEXT); outtextxy(xak,ybk,item); setcolor(GREEN); #include hmain.h /*读入数据*/ void rcvda(char *flname,float *x,float *y,float *z,int *n0); /*划分网格并计算网点*/ void wzjs(int n,int m,float*x,float *y,float *z,float *bb); /*计算等值点*/ v
7、oid bzdzd(int w,int *n,int *m,float *bb); /*绘制等值线*/ void xcln(int n,int m,float ratox,float ratoy,char *item); /*-全局变量-*/ int CN1,CN2,NP1; int X0,Y0,kk,kk1; float flagxMAXXMAXY,flagyMAXXMAXY; /*void mapmode();-图形模式-*/ /*=设置图形模式=*/ void mapmode() int gdriver=DETECT,gmode,errorcode; /*-自动探测-*/ errorco
8、de=registerbgidriver(EGAVGA_driver); if(errorcode0) printf(Graphics error:n%s,grapherrormsg(errorcode); /*-报告注册错误-*/ printf(nPress any key to halt:); getch(); exit(1); initgraph(&gdriver,&gmode,); /*-初始化图形模式-*/ errorcode=graphresult(); if(errorcode!=grOK) printf(Graphics error:n%s,grapherrormsg(erro
9、rcode); printf(nPress any key to halt:); getch(); exit(1); /*=主函数=*/ main() int i,j,n,m,w,pn1,pn2,pn3,n0=0,ccc; float xMAXX,x0MAXX,yMAXY,y0MAXY,zMAXX,ratox,ratoy; float mx,my,mz,nx,ny,nz; char flname12,item10,ch; float bb1MAXXMAXY=0; float *bbMAXX; for(i=0;iMAXX;i+) bbi=&bb1i0; /*-将数组清零-*/ clrscr();
10、 mapmode(); /*-设置图形模式-*/ printf(请输入数据文件名:); scanf(%s,flname); rcvda(flname,x,y,z,&n0); /*-从文件读入数据-*/ mx=nx=x0; my=ny=y0; mz=nz=z0; for(i=0;imx) mx=xi; else if(ximy) my=xi; else if(yimz) mz=zi; else if(zinz) nz=zi; NP1=n0; printf(nmaxx=%.lf minx=%.lfn,mx,nx); printf(nmaxy=%.lf miny=%.lfn,my,ny); prin
11、tf(nmaxz=%.lf minz=%.lfn,mz,nz); printf(n请输入网格间距:); scanf(%d,&CN1); CN2=CN1; n=(int)(mx-nx)/CN1; /*-计算网格数-*/ m=(int)(my-ny)/CN2; X0=(int)(nx/CN1); X0=X0*CN1; /*-计算起始点的坐标-*/ Y0=(int)(ny/CN2); Y0=Y0*CN2; ratox=n*CN1/640.0; ratoy=m*CN2/480.0; /*-x,y方向系数-*/ wzjs(n,m,x,y,z,bb); /*-计算等值点-*/ printf(n请输入最小等
12、值线值:); scanf(%d,&pn1); printf(n请输入最大等值线值:); scanf(%d,&pn2); printf(n请输入等值线间距:); scanf(%d,&pn3); cleardevice(); for(i=0;in0;i+) x0i=(xi-X0)/ratox; /*-计算各点的屏幕坐标-*/ y0i=(yi-Y0)/ratoy; setcolor(RED); circle(x0i,getmaxy()-y0i,3); /*-画一圆示型值点-*/ for(w=pn1;w=pn2;w+=pn3) /*-逐条等值线形成-*/ bzdzd(w,&n,&m,bb); /*-计
13、算等值点-*/ itoa(w,item,10); /*-将整数W转换成字符用于标注-*/ xcln(n,m,ratox,ratoy,item); /*-绘制等值线-*/ getch(); closegraph(); /*=从文件读入数据=*/ #include hmain.h void rcvda(char *flname,float *x,float *y,float *z,int *n0) FILE *stream; if(stream=fopen(flname,rt)=NULL) /*-打开文件-*/ printf(nCant open %s:,flname); getch(); exi
14、t(0); while(!feof(stream) /*-读文件直到结束-*/ fscanf(stream,%f,(x+*n0); fscanf(stream,%f,(y+*n0); fscanf(stream,%f,(z+*n0); *n0=*n0+1; /*-指定区域变动-*/ fclose(stream); /*=用趋势面加权最小二乘法计算网点高程制=*/ #include #include #include int CN1,CN2,NP1; /*-CN1,CN2为网点间距,NP1为测量点个数-*/ int X0,Y0; /*-X0,Y0为网格起点坐标-*/ void wzjs(int
15、n,int m,float*x,float *y,float *z,float *bb) int i,j,k,k0,k1,n0,hh=0; double cnum,x1,x2,y1,y2,xt,yt,xxt,yyt,xyt,zt,A,B,c; double e1010=0,u10=0; for(i=0;i=n;i+) /*-列网(X向)-*/ A=X0+i*CN1; for(j=0;j=m;j+) /*-横网(y向)-*/ B=Y0+j*CN2; for(k=0;k10;k+) uk=0; for(k0=0;k010;k0+) ekk0=0; for(k=0;kNP1;k+) /*-高斯法计算
16、曲面方程值并计算网格点值-*/ hh=0; if(A=*(x+k)&B=*(y+k) *(*(bb+i)+j)=*(z+k); hh=1; break; x1=*(x+k); y1=*(y+k); x2=x1*x1; y2=y1*y1; cnum=(x1-A)*(x1-A)+(y1-B)*(y1-B); cnum=1/cnum; xt=cnum*x1; yt=cnum*y1; xxt=x2*cnum; yyt=y2*cnum; xyt=x1*yt; e11=e11+cnum; e12=e12+xt; e13=e13+yt; e14=e14+xyt; e15=e15+xxt; e16=e16+y
17、yt; e24=e24+x2*yt; e25=e25+x2*xt; e26=e26+y2*xt; e36=e36+y2*yt; e44=e44+x2*yyt; e45=e45+x2*xyt; e46=e46+y2*xyt; e55=e55+x2*xxt; e66=e66+y2*yyt; zt=*(z+k)*cnum; u1=u1+zt; u2=u2+x1*zt; u3=u3+y1*zt; u4=u4+x1*y1*zt; u5=u5+x2*zt; u6=u6+y2*zt; if(hh=1) continue; e22=e15; e23=e14; e33=e16; e34=e26; e35=e24
18、; e56=e44; for(k=1;k6;k+) for(k0=k+1;k07;k0+) ek0k=ekk0; for(k=1;k7;k+) ek7=uk; n0=6; for(k=1;kn0;k+) for(k0=k+1;k0n0+1;k0+) for(k1=k+1;k10;k-) c=0; for(k0=k+1;k0n0+1;k0+) c=c+ekk0*uk0; uk=(ekn0+1-c)/ekk; *(*(bb+i)+j)=u1+A*(u2+B*u4+A*u5)+B*(u3+B*u6); /*=标记出网格每边上是否有一高程的等值点=*/ #include hmain.h float f
19、lagxMAXXMAXY,flagyMAXXMAXY;/*-等值点标志-*/ void bzdzd(int w,int *n,int *m,float *bb) int i,j; float m1,m2; for(i=0;i*n+1;i+) /*-列网(X向)-*/ for(j=0;j*m;j+) m1=w-*(*(bb+i)+j); if(m1=0) m1=-0.01; m2=w-*(*(bb+i)+j+1); if(m2=0) m2=-0.01; if(m1*m20) flagyij=m1/(m1-m2); else flagyij=-2; for(i=0;i*n;i+) /*-横网(y向
20、)-*/ for(j=0;j*m+1;j+) m1=w-*(*(bb+i)+j); if(m1=0) m1=-0.01; m2=w-*(*(bb+i+1)+j); if(m2=0) m2=-0.01; if(m1*m2j1) flag=1; else if(i2i1) flag=2; else if(*b2=j2*CN2) flag=3; else flag=4; switch(flag) case 1: if(flagyi2j20) /*-判断向左走-*/ i0=i2; j0=j2; s1=0; else if(flagyi2+1j20) i0=i2+1; j0=j2; s1=0; else if(flagxi2j2+10) i0=i2; j0=j2+1; s1=1; else return 1; break; case
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2