C编写坡度计算出问题

晓枫gis 2012-09-10 04:48:38
//最大坡降计算坡度坡向
#include<stdio.h>
#include<math.h>
#include"mpi.h"
void Slope_max(int** a,int i,int j,float *p1,int *p2,int NODATA_VALUE);
int main(int argc,char**argv){

FILE *fp=fopen("D:\\t.txt","r");
FILE* f1=fopen("D:\\t1.txt","w"); //建立存放坡度计算数据目录
FILE* f2=fopen("D:\\t2.txt","w"); //建立存放坡向计算数据目录
int nrows,ncols;
int NODATA_VALUE;
int cellsize;
int mysize;
int **a;
float *p1=NULL;
int *p2=NULL;

if(fp==NULL)
printf("Cannot open file!");

/*从t.txt文档中读入数据*/
fscanf(fp,"ncols %d\n",&ncols);
fscanf(fp,"nrows %d\n",&nrows);
fscanf(fp,"xllcorner 776458.52709961\nyllcorner 5317389.7575073\ncellsize %d\n",&cellsize);
fscanf(fp,"NODATA_value %d\n",&NODATA_VALUE);

mysize=nrows/2;

/*从t.txt文档中读入高程数据存放在数组a中*/
a=new int*[nrows+2];
for(int i=0;i<ncols+2;i++)a[i]=new int[ncols];
for(int i=0;i<nrows+2;i++)
for(int j=0;j<ncols+2;j++)
a[i][j]=NODATA_VALUE;
for(int i=1;i<nrows+1;i++){ //向a中读入数据
for(int j=1;j<ncols+1;j++)
fscanf(fp,"%d ",&a[i][j]);
fscanf(fp,"\n");
}

for(int i=1;i<nrows+1;i++){
for(int j=1;j<ncols+1;j++){
Slope_max(a,i,j,p1,p2,NODATA_VALUE);
fprintf(f1,"%f ",*p1);
fprintf(f2,"%d ",*p2);
}
fprintf(f1,"\n");
fprintf(f2,"\n");
}

return 0;
}

void Slope_max(int** b,int i,int j,float *p1,int* p2,int NODATA_VALUE){

int dz=0;
int loop1=0,loop2=0;
float Slope;
int Slopedest;

for(int m=i-1;m<i+2;m++)
for(int n=j-1;n<j+2;n++){
if(m==i&&n==j)continue;
if(*(*(b+m)+n)=NODATA_VALUE)continue;
if(dz<abs(*(*(b+i)+j)-*(*(b+m)+n))){
dz=abs(*(*(b+i)+j)-*(*(b+m)+n));
loop1=m;
loop2=n;
}
}
if((loop1==i-1&&loop2==j-1)||(loop1==i+1&&loop2==j-1)
||(loop1==i-1&&j==j+1)||(loop1==i+1&&loop2==j+1))
Slope=atan(dz/(100*sqrt(2.0)));
else Slope=atan((float)dz/100);
Slopedest=(loop1-1)*45;
p1=&Slope;p2=&Slopedest;
}
希望高手大虾们帮我看下问题出在哪里
...全文
159 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
安装后c盘有源代码。 高速公路坐标高程计算软件 高速公路坐标高程计算软件是在多年的施工放样工作中总结来的一个很有效的程序。 它是公路、铁路施工放样的好助手,可以帮你完成以前你用很大的精力和时间完成的计算。 它能在工作中给予很大的方便,使你能从繁琐的计算工作中解脱来,你只要按要求将已 知的几个数据输入即可,并大大的提高了计算精确性和准确性。操作简便、实用,适合采 用坐标法放样,如具有全站仪和测距仪的测量放线工作,快速准确定位,很有推广价值。 高速公路坐标高程计算软件可以帮你完成直线、圆曲线、缓和曲线(完全缓和曲线和 不完全缓和曲线)、S形曲线、复曲线、试车场高速环道布劳斯曲线的中桩和任意长度、任 意角度边桩坐标和高程的计算,并可根据你有要求加任意点的坐标。计算方法根据曲线是 否完整对称可以选择交点法计算和特殊点计算方法。生成的坐标成果可以直接通过数据线 导入全站仪,也可以导入Excel中便于打印,导入AUTOCAD中生成DWG图形,根据线形是否平 顺来检验坐标准确性。 高速公路坐标高程计算软件应用于公路、铁路、等坐标高程计算,可用来计算桥梁桩基、 立柱、支座垫石、护栏、桥面系及涵洞通道坐标高程,可计算试车场高速环道布劳斯曲线坐 标,是施工放样和图纸坐标高程复核的好帮手,还可以用来复核工程上广泛应用的可编程计 算器CASIO 5800坐标高程避免错。 他是一个免费软件,没有任何限制。附送CASIO4850,5800程序及算法。 下载地址:天空软件站,搜索高速公路坐标高程计算。 本软件简要说明: 一、线元法计算平曲线(主程序) 1、J为起算点里程,C、D为起算点的X、Y坐标,F为起算点的切线方位角,R为圆曲线半径 (左偏取负,右偏取正),A、B为第一、第二缓和曲线回旋参数,O为圆曲线长度,Ki为该 分段的终点里程; 2、对于直线段或圆曲线段,起算点可取直线或圆曲线上的任意一点; 3、对于带第一、第二缓和曲线的平曲线段,起算点应取HY点; 4、K为所求点的里程,T、P为第一偏距、偏角,S、Z为第二偏距、偏角,偏角取从该点的 切线顺时针旋转的夹角; 5、分段法则:直线单独分段;单一的圆曲线单独分段;缓和曲线1+圆曲线+缓和曲线2为一 个整体单独分段,若不存在第一或第二缓和曲线(即不完全缓和曲线)仍然可以计算; 若不存在圆曲线,则O取零; 6、对于两圆夹一段缓和曲线分段这种类型,缓和曲线应该分到半径较小的那个圆上,因为 程序算法本来就是从HY和YH点小半径R向大半径∞方向进行推算的,不同于以往从ZH或HZ点计算, 从ZH或HZ点推算是从大半径∞向小半径R方向进行推算的。 这种情况下回旋参数A=根号下√abs(Ls*R1*R2/(R1-R2)),Ls为缓和曲线长,R1,R2为半径。 7、若第一或者第二缓和曲线不存在,此时A或B可取零; 8、F、Q切线方位角输入输均为度.分秒的格式,例如153°24′05.24″=153.240524。 Q改变时,可按照新方位角为基准,结合第一第二偏距、偏角重新计算所求点; 9、输入平曲线参数后,默认为计算全线坐标,可修改来计算某段曲线,默认间距也可修改; 10、可参考CAD图《平曲线计算图例》; 11、生成的中桩CAD脚本设置成在世界坐标系下生成,注意的是世界坐标系与大地测量坐标系 的区别是XY坐标是互换的,否则画的图形与实际相反。先打开CAD,设置好图层名称、颜色, 并设置为当前层,然后单击CAD的工具==>运行脚本==>选中生成的脚本文件即可。 12、输的坐标结果可以导入到EXCEL中,操作办法为:打开EXCEL,然后把坐标数据复制到 单元格里,然后单击数据==>分列==>选中分隔符号==>下一步==>选中TAB键和逗号==>下一步 ==>完成即可。下一次可直接在此表中粘贴,数据自动分列。 二、缓和曲线计算(辅助程序) 1、本程序为辅助程序,用来从ZH点或HZ点计算整条完全的缓和曲线, 若不知道HY点X、Y、Q参数,可用此程序计算来,然后输入平曲线参数; 2、参数设置参考平曲线计算; 3、导到EXCEL的办法同平曲线计算; 三、直线计算(辅助程序) 1、本程序为辅助程序,若已知P1(X1,Y1),P1-->P2的距离I及方位角J(度.分秒格式), 可计算坐标P2(X2,Y2)。 四、方位角计算 1、已知两点的坐标,可计算P1-->P2的距离及方位角; 2、角度可以进行加减运算。(单位:度.分秒格式) 五、竖曲线计算(主程序) 1、J为起算点里程,Y为起算点的高程,R为圆曲线半径(取绝对值),E、F为第一、 第二坡度,不带%号,例如2.5%的坡度就输入2.5,上坡取正值,下坡取负值; 2、K为所求点的里程,T为边桩到设计高程点的斜距,I为横坡,向外流水取正, 向中心流水取负,G为边桩的高程; 3、分段法则:以两竖曲线之间直线段中间的任意一点为分界,如上图中的K1、K2、K3; 注意分离式路基一般要单独分段,分段时如果从起点就开始变坡,第一个分段起点必须 与终点里程应相同或小1毫米,否则程序不能计算第一个分段的横坡; 4、无论任何时候R不能取零,否则可能导致被零除的错误; 5、可参考CAD图《竖曲线计算图例》; 6、导到EXCEL的办法同平曲线计算; 六、交点法点计算平曲线(辅助程序) 1、交点法计算平曲线功能,是用来计算对称的完全缓和曲线的,如果特征点里程与图纸不符, 必须查明原因,比如是由断链或者不完全缓和曲线引起的。 一般地,匝道用线元法,主线用交点法,因为匝道的线型不一定是标准的交点法线型,如果不是标准的交点法线型,用常规方法推算是不对的,交点法适用于缓1+圆+缓2这种线型,对于缓1+圆1+缓2+圆2这种,缓2是分到圆1还是圆2上是有区别的,如果缓2分到半径小的圆上就适用交点法,反之则不适用。 2、最后一个交点如果R、Ls、T、L如果不知道,R随便输入一个不为零的数字比如111, Ls、T、L输入零就可以了。 七、其他说明 1、本程序是在WINXP下编译的,如果在WIN98、WIN2000下运行提示少DLL文件的话可以从网 上下载,拷贝到%windir%\system及system32目录,并用示例的格式来注册。 2、本软件由心梦(QQ704728827)和陈晓猫(QQ43308724)共同编写完成,有错误欢迎指正。 EMAIL:liuzhao3@163.com。

69,379

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧