156 lines
4.3 KiB
C++
156 lines
4.3 KiB
C++
//计算二维平面数据的三方向导数,因为有很多方法可以得到xyz三列数据文件,所以数据类型为xyz的三列数据文件
|
||
//数据排列方式: x坐标 y坐标 v数值
|
||
//坐标方向: z轴向下的右旋坐标系
|
||
#include "datafunc.h"
|
||
#include "grad_z.h"
|
||
#include "grad_hx.h"
|
||
#include "grad_hy.h"
|
||
void disp_help()
|
||
{
|
||
cout<<"grad2d 0.2 - calculate horizontal and vertical gradients for an equal-grid plane data set"<<endl<<endl
|
||
<<"usage: grad2d -t<input-file> -x|-y|-z -r<xmin>/<xmax>/<ymin>/<ymax> -i<x-spacing>/<y-spacing> -w<power> [-c<col-x>,<col-y>,<col-val>] [-o<output-file>]"<<endl<<endl
|
||
<<"syntax: " << endl << "-t\tinput table data. The program takes a three-columns table data file. The order of columns are \'x\', \'y\'' and \'point-value\'. lines starts with '#' will be skipped."<<endl
|
||
<<"-x|-y|-z\tselect calculating objective. Only one objective can be chosen at a time."<<endl
|
||
<<"-r\tspecify the range of calculating area."<<endl
|
||
<<"-i\tspecify intervals of the input data."<<endl
|
||
<<"-c\tset data columns, the default is 0,1,2."<<endl
|
||
<<"-w\torders of output gradient data."<<endl
|
||
<<"-o\tspecify output-file's name. \'_gradhx|_gradhy|_gradz\' will be attached at the end of the input-name if \'-o\' is absent."<<endl<<endl
|
||
<<"example: grad2d -tin.dat -x -r0/100/0/100 -i10/10 -w1 -oout.dat"<<endl;
|
||
}
|
||
|
||
int main(int argc, char* argv[])
|
||
{
|
||
if (argc==1)
|
||
{
|
||
disp_help();
|
||
}
|
||
else
|
||
{
|
||
int caltype = 0;
|
||
int power = 1;
|
||
char cmd_type[1024] = {0};
|
||
char filename[1024] = {0};
|
||
char filetype[1024] = {0};
|
||
char outname[1024] = {0};
|
||
char colname[1024] = "0,1,2";
|
||
double range[4] = {1e+30,1e+30,1e+30,1e+30};
|
||
double interval[2] = {1e+30,1e+30};
|
||
for (int i = 1; i < argc; i++)
|
||
{
|
||
sscanf(argv[i],"%2s",cmd_type);
|
||
if (!strcmp(cmd_type,RANGE))
|
||
{
|
||
if (4!=sscanf(argv[i],"%*2s%lf/%lf/%lf/%lf",&range[0],&range[1],&range[2],&range[3]))
|
||
{
|
||
cout<<BOLDRED<<"==> "<<RESET<<"bad syntax: "<<argv[i]<<endl;
|
||
return 0;
|
||
}
|
||
else
|
||
{
|
||
if (range[0]>range[1])
|
||
{
|
||
cout<<BOLDRED<<"==> "<<RESET<<"bad syntax: "<<argv[i]<<endl;
|
||
return 0;
|
||
}
|
||
else if (range[2]>range[3])
|
||
{
|
||
cout<<BOLDRED<<"==> "<<RESET<<"bad syntax: "<<argv[i]<<endl;
|
||
return 0;
|
||
}
|
||
}
|
||
}
|
||
else if (!strcmp(cmd_type,DATA))
|
||
{
|
||
if (2!=sscanf(argv[i],"%*2s%[^.]%s",filename,filetype))
|
||
{
|
||
cout<<BOLDRED<<"==> "<<RESET<<"bad syntax: "<<argv[i]<<endl;
|
||
return 0;
|
||
}
|
||
}
|
||
else if (!strcmp(cmd_type,COLS))
|
||
{
|
||
if (1!=sscanf(argv[i],"%*2s%s",colname))
|
||
{
|
||
cout<<BOLDRED<<"==> "<<RESET<<"bad syntax: "<<argv[i]<<endl;
|
||
return 0;
|
||
}
|
||
}
|
||
else if (!strcmp(cmd_type,POWER))
|
||
{
|
||
if (1!=sscanf(argv[i],"%*2s%d",&power))
|
||
{
|
||
cout<<BOLDRED<<"==> "<<RESET<<"bad syntax: "<<argv[i]<<endl;
|
||
return 0;
|
||
}
|
||
}
|
||
else if (!strcmp(cmd_type,INTERVAL))
|
||
{
|
||
if (2!=sscanf(argv[i],"%*2s%lf/%lf",&interval[0],&interval[1]))
|
||
{
|
||
cout<<BOLDRED<<"==> "<<RESET<<"bad syntax: "<<argv[i]<<endl;
|
||
return 0;
|
||
}
|
||
else
|
||
{
|
||
if (interval[0]<=0||interval[1]<=0)
|
||
{
|
||
cout<<BOLDRED<<"==> "<<RESET<<"bad syntax: "<<argv[i]<<endl;
|
||
return 0;
|
||
}
|
||
}
|
||
}
|
||
else if (!strcmp(cmd_type,HORIZATION_X)) caltype = 1;
|
||
else if (!strcmp(cmd_type,HORIZATION_Y)) caltype = 2;
|
||
else if (!strcmp(cmd_type,VERTICAL)) caltype = 3;
|
||
else if (!strcmp(cmd_type,OUTPUT))
|
||
{
|
||
if (-1==sscanf(argv[i],"%*2s%s",outname))
|
||
{
|
||
cout<<BOLDRED<<"==> "<<RESET<<"bad syntax: "<<argv[i]<<endl;
|
||
return 0;
|
||
}
|
||
}
|
||
}
|
||
|
||
switch(caltype)
|
||
{
|
||
case 1:
|
||
{
|
||
if(!strcmp(outname,""))
|
||
{
|
||
strcat(outname,filename);
|
||
strcat(outname,"_gradhx.xyz");
|
||
}
|
||
strcat(filename,filetype);
|
||
cal_2d_hx(filename,outname,colname,range,interval,power);
|
||
}break;
|
||
case 2:
|
||
{
|
||
if(!strcmp(outname,""))
|
||
{
|
||
strcat(outname,filename);
|
||
strcat(outname,"_gradhy.xyz");
|
||
}
|
||
strcat(filename,filetype);
|
||
cal_2d_hy(filename,outname,colname,range,interval,power);
|
||
}break;
|
||
case 3:
|
||
{
|
||
if(!strcmp(outname,""))
|
||
{
|
||
strcat(outname,filename);
|
||
strcat(outname,"_gradz.xyz");
|
||
}
|
||
strcat(filename,filetype);
|
||
cal_2d_z(filename,outname,colname,range,interval,power);
|
||
}break;
|
||
default:
|
||
{
|
||
cout<<BOLDRED<<"==> "<<RESET<<"bad cal_type"<<endl;
|
||
return 0;
|
||
}
|
||
}
|
||
}
|
||
return 0;
|
||
} |