logplus/app/fdsa4_test/CBUIprogram.cpp

1607 lines
41 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "MemRdWt.h"
#include "math.h"
#include "BaseFun.h"
#include <stdio.h>
#include "DepthProgress.h"
#include <iostream>
#include <fstream>
#include<time.h>
//#include <Windows.h>
#include <QFileDialog>
#include <QTextStream>
#include <math.h>
#include"fftw3.h"
#include"Att_c_find.h"
#include"hilbert.h"
#include"Inputtuban.h"
//#include"maxInArray.h"
#include"SLG_plate.h"
#include"Zc_Zm_comb.h"
#include"S_per.h"
#include"Ecc_Co.h"
#include"FindPeak.h"
#include"InArray_self.h"
#include"Rate_Co.h"
#include"Thcav_Co.h"
#include"findcc.h"
#ifdef BOOL
#undef BOOL
#endif
#include <Windows.h>
using namespace std;
#define PI (float)3.1415926
#define NN 300
#define NFFT 80
//FILE* fpF,*fpF1,*fpN1,*fpN,*fpR,*fpR1,*fp11,*fp12,*fp13,*fpSPR;
//FILE* fpJc;
//FILE* fpR1,*fpR2,*fpR3,*fpR4,*fpR5,*fpR6,*fpR7;
//------------------------轟矜錦맣----------------------------------------------
Slf_WAVE mWave[1];
using namespace std;
#define OUTNAME "OUT1"
extern "C"{
//------------------------------------------------------------------轟矜錦맣----------------------------------------------------------------------------------
_declspec (dllexport) struct INC_STRU INC={12,
"FWGN:陶꺼藤樓,raw;; \
FWST:陶꺼儺넨,┢s;;\
NWGN:쐤꺼藤樓,raw;;\
NWST:쐤꺼儺넨,┢s;; \
RWGN:묾驪藤樓,raw;;\
RWST:묾驪儺넨,┢s;; \
MWAVE:콧쉬꺼혓窟,┢s;; \
MWGN:콧쉬藤樓,raw;; \
MWST:콧쉬儺넨,┢s;; \
W80F:侊똑혓窟,→;; \
RB:렘貫혓窟,(▲);; \
RPS:裏醵혓窟,r/s;;"};
_declspec (dllexport) struct INP_STRU INP;
//_declspec (dllexport) struct OUTC_STRU OUTC={18, "ATT:鉀숑;;\
RATE:묾驪槻쪽;;\
ATTC:敬빈鉀숑;;\
ZCC:敬빈羸예;;\
SLG:폭捻미榴檄;;\
THC:敬밗비똑;;\
AMP:敬밗코귿닛꾹똑;;\
SPR_ALL:미竟欖궐;;\
LPR_ALL:捻竟欖궐;;\
GPR_ALL:폭竟欖궐;;\
THCAV:敬밗틱엇비똑;;\
THCMN:敬밗離鬼비똑;;\
THCMX:敬밗離댕비똑;;\
ECM:老포앙櫓똑;;\
CEM:敬밗앙櫓똑;;\
THerr:敬밗비똑셕炬轎뀌;;\
THLR:敬밗愆呵쪽;;\
THCSD:깃硫비똑;;"};
//
////8, "ATT:36돛꺼近鉀숑令;dB/m; RATE:72돛꺼近돨묾驪槻쪽令;%; ATTC:敬빈鉀숑쪽;none; ZCC:敬빈羸예;MRayI; SLG:敬빈폭捻미榴檄;none; THC:꿎좆돨敬밗비똑;mm;AMP:敬밗코꼬榴檄류똑;none;SLGall:꿔쇌룐몰팀송;none;"
//_declspec (dllexport) struct OUTP_STRU OUTP;
_declspec (dllexport) struct HD_STRU HD={0.0,9999.0,0.0,0.0,0.0,0.0,0.0,"CBUIprogram.INP","CBUIprogram.TLP"};
__declspec (dllexport) struct CONC_STRU CONC={32,
"CTH:敬밗비똑,mm;;;;10.54;\
CT:彊콧잚謹;;;;1;\
IT:敬밗넹당,mm;;;;139.7;\
MT:콧쉬잚謹;;;;1;\
STEV:敬밗<E695AC>醵,m/s;;;;5200;\
ZM1:콧쉬羸예,MRayls;;;;1.5;\
LSM:틱뺄朞嶝;;;;2;\
BW:묾驪槻쪽;;;;0.08;\
CON1:鉀숑叫攣,dB/m;;;;-35;\
CON2:묾驪叫攣;;;;0.01;\
CON3:老포끽鑒;;;;0.55;\
RWD:묾驪꺼역눗儺珂,┢s;;;;20;\
RWL:묾驪꺼儺珂눗낀,┢s;;;;30;\
FPS:읊캠꺼璣룟폅迦듐;;;;20;\
FPE:읊캠꺼璣룟老岺듐;;;;300;\
RM1:묾驪꺼틉堵품눗,kHz;;;;20;\
RM2:묾驪꺼틉堵빈눗,kHz;;;;40;\
RL:묾驪꺼珂堵눗낀,┢s;;;;48;\
S1:미宮輕념뀌쌔岺令,%;;;;10;\
S2:미宮輕념櫓쌔岺令,%;;;;70;\
S3:미宮輕념봤쌔岺令,%;;;;90;\
L1:捻宮輕념봤쌔岺令,%;;;;10;\
L2:捻宮輕념櫓쌔岺令,%;;;;20;\
L3:捻宮輕념뀌쌔岺令,%;;;;90;\
G1:폭宮輕념쌔岺令,%;;;;90;\
CCMX:단꾼<EB8BA8>掘쌔岺令,m;;;;2;\
CCMN:단꾼苟掘쌔岺令,m;;;;1;\
NSR:쐤꺼꽃湳쇌몰,┢s;;;;400;\
FSR:陶꺼꽃湳쇌몰,┢s;;;;400;\
RSR:묾驪꺼꽃湳쇌몰,┢s;;;;400;\
CID:묾驪꺼老포꽝鑒,mm;;;;29.5;\
CD:읊캠꺼老포꽝鑒,mm;;;;27.2;"
};
_declspec (dllexport) struct CON_STRU CON={10.54,1,139.7,1,5200,1.5,2,0.08,-35,0.01,0.55,20,30,20,300,20,40,48,10,70,90,10,20,90,90,2,1,400,400,400,29.5,27.2};
_declspec (dllexport) struct ErrorInf errorinf;
__declspec (dllexport) struct LogType LogType={};//WAVE_OBJECT,WAVE_OBJECT,WAVE_OBJECT,WAVE_OBJECT,WAVE_OBJECT,WAVE_OBJECT
__declspec( dllexport ) CMemRdWt MemRdWt;
_declspec (dllexport) int CBUIprogram();
}
typedef struct ss_struct
{
int GNO;
float GSDEP,GEDEP;
int GRESULT;
} GUJING;
struct Fdpr {
float fdep;
float fspr;
// float flpr;
float fgpr;
};
int getRange(float y,float S1,float S2,float S3)
{
if (y >= 0 && y < S1) return 0;
if (y >= S1 && y < S2) return 1;
if (y >= S2 && y < S3) return 2;
if (y >= S3 && y <= 100) return 3;
return -1;
}
struct Process_Struct
{
//------------------------------------轟矜錦맣-------------------------------------
//float ATT, RATE,ATTC,ZCC,SLG,THC,AMP,SPR_ALL,LPR_ALL, GPR_ALL,THCAV,THCMN,THCMX,ECM, CEM, THerr, THLR,THCSD;
float CTH,CT,IT,MT,STEV,ZM1,LSM,BW,CON1,CON2,CON3,RWD,RWL,FPS,FPE,RM1,RM2,RL,S1,S2,S3,L1,L2,L3,G1,CCMX,CCMN,NSR,FSR,RSR,CID,CD;
int Process();
};
int CBUIprogram()
{
//-------------------------------------轟矜錦맣----------------------------------------
Process_Struct Process;
return Process.Process();
}
int Process_Struct::Process()
{
if(HD.Sdep >= HD.EndDep)
{
AfxMessageBox("뎠품뇹잿쒜뙈<EFBFBD>똑唐轎\n綠界岺셕炬");
return 0;
}
//-------------------------------------轟矜錦맣----------------------------------------
MemRdWt.Const();
MemRdWt.In();
MemRdWt.Out();
//char name[100];
//MemRdWt.GetInCurveName(0,name);
Slf_WAVE waveinf;
//-----------------------------------------2 삿혤꽝鑒긴좆(轟矜錦맣)-----------------------------------------------
#pragma region 삿혤꽝鑒
//float NSR[36], FSR[36], RSR[72];
GetPosValue(CTH,CON,1,1);
GetPosValue(CT,CON,2,1);
GetPosValue(IT,CON,3,1);
GetPosValue(MT,CON,4,1);
GetPosValue(STEV,CON,5,1);
GetPosValue(ZM1,CON,6,1);
GetPosValue(LSM,CON,7,1);
GetPosValue(BW,CON,8,1);
GetPosValue(CON1,CON,9,1);
GetPosValue(CON2,CON,10,1);
GetPosValue(CON3,CON,11,1);
GetPosValue(RWD,CON,12,1);
GetPosValue(RWL,CON,13,1);
GetPosValue(FPS,CON,14,1);
GetPosValue(FPE,CON,15,1);
GetPosValue(RM1,CON,16,1);
GetPosValue(RM2,CON,17,1);
GetPosValue(RL,CON,18,1);
GetPosValue(S1,CON,19,1);
GetPosValue(S2,CON,20,1);
GetPosValue(S3,CON,21,1);
GetPosValue(L1,CON,22,1);
GetPosValue(L2,CON,23,1);
GetPosValue(L3,CON,24,1);
GetPosValue(G1,CON,25,1);
GetPosValue(CCMX,CON,26,1);
GetPosValue(CCMN,CON,27,1);
GetPosValue(NSR,CON,28,1);
GetPosValue(FSR,CON,29,1);
GetPosValue(RSR,CON,30,1);
GetPosValue(CID,CON,31,1);
GetPosValue(CD,CON,32,1);
#pragma endregion
IT=IT/25.4;
float gd_Zc[100], gd_Att[100], ld_Zc[100], ld_Att[100], sd_Zc[100], sd_Att[100], gu_Zc[100], gu_Att[100], lu_Zc[100], lu_Att[100], su_Zc[100], su_Att[100];
Tubanpara(MT, CTH, gd_Zc, gd_Att, ld_Zc, ld_Att, sd_Zc, sd_Att, gu_Zc, gu_Att, lu_Zc, lu_Att, su_Zc, su_Att);
#pragma region F2D鑒莉<E99192>
float **F2D = new float*[36];
for(int _ii = 0; _ii < 36; _ii++)
F2D[_ii] = new float[NN];
float **N2D = new float*[36];
for(int _ii = 0; _ii < 36; _ii++)
N2D[_ii] = new float[NN];
float **R2D = new float*[72];
for(int _ii = 0; _ii < 72; _ii++)
R2D[_ii] = new float[NN];
#pragma endregion
#pragma region F_hx_abs鑒莉<E99192>
float **F_hx_abs = new float*[36];
for(int _ii = 0; _ii < 36; _ii++)
F_hx_abs[_ii] = new float[NN];
float **N_hx_abs = new float*[36];
for(int _ii = 0; _ii < 36; _ii++)
N_hx_abs[_ii] = new float[NN];
float **R_hx_abs = new float*[72];
for(int _ii = 0; _ii < 72; _ii++)
R_hx_abs[_ii] = new float[NN*2];
float **R_hx_group = new float*[72];
for (int _ii = 0; _ii < 72; _ii++)
R_hx_group[_ii] = new float[NN * 2];
//#pragma region RR2D/XX_abs/pha/p
float **RR2D = new float*[72];
for(int _ii = 0; _ii < 72; _ii++)
RR2D[_ii] = new float[NN*2];
float **R_XX_abs = new float*[72];
for(int _ii = 0; _ii < 72; _ii++)
R_XX_abs[_ii] = new float[NN*2];
float **F_lb = new float*[36];
for (int _ii = 0; _ii < 36; _ii++)
F_lb[_ii] = new float[NN];
#pragma endregion
#pragma region 꺼죗鑒앴놓迦뺏쇱꿴
QStringList _nList;
_nList << "ATT" << "RATE" << "ATTC" << "ZCC" << "SLG" << "THC"<<"AMP";
for(int _i = 0; _i < _nList.size(); _i++)
{
int index1 = MemRdWt.OpenWave(_nList[_i].toStdString().c_str());
if(index1 > 0)
continue;
Slf_WAVE myWave;
strcpy(myWave.Name, _nList[_i].toStdString().c_str());
strcpy(myWave.AliasName, _nList[_i].toStdString().c_str());
strcpy(myWave.DepthUnit, "m");
myWave.CodeLen = 4;//float
myWave.RepCode = 4;
myWave.DefVal = 0;
myWave.StartDepth = HD.Sdep;
myWave.EndDepth = HD.Edep;
myWave.DepLevel = HD.Rlev;
strcpy(myWave.DepthUnit,"m");
myWave.StartTime=0;
myWave.TimeLevel=5;
myWave.ArrayNum = 1;//黎죗鑒
if(_nList[_i] == "ATT")
{myWave.TimeSamples = 36;
myWave.TimeLevel=10;}
else if(_nList[_i] == "SLGall")
myWave.TimeSamples = 1;
else
myWave.TimeSamples = 72;
strcpy(myWave.TimeUnit,"ns");
index1 = MemRdWt.OpenWave((Slf_WAVE *)&myWave);
}
#pragma endregion
#pragma region 혓窟鑒앴놓迦뺏쇱꿴
//MemRdWt.OpenCurve("SPR_all");
int index1 = MemRdWt.OpenCurve("SPR_all");
if(index1 < 0)
{
Slf_CURVE myWave;
strcpy(myWave.Name, "SPR_all");
strcpy(myWave.AliasName, "SPR_all");
strcpy(myWave.DepthUnit, "m");
myWave.CodeLen = 4;//float
myWave.RepCode = 4;
myWave.DefVal = 0;
myWave.StartDepth = HD.Sdep;
myWave.EndDepth = HD.Edep;
myWave.DepLevel = HD.Rlev;
strcpy(myWave.DepthUnit,"m");
index1 = MemRdWt.OpenCurve((Slf_CURVE *)&myWave);
}
//
int index2 = MemRdWt.OpenCurve("LPR_all");
if(index2 < 0)
{
Slf_CURVE myWave;
strcpy(myWave.Name, "LPR_all");
strcpy(myWave.AliasName, "LPR_all");
strcpy(myWave.DepthUnit, "m");
myWave.CodeLen = 4;//float
myWave.RepCode = 4;
myWave.DefVal = 0;
myWave.StartDepth = HD.Sdep;
myWave.EndDepth = HD.Edep;
myWave.DepLevel = HD.Rlev;
strcpy(myWave.DepthUnit,"m");
index2 = MemRdWt.OpenCurve((Slf_CURVE *)&myWave);
}
//
int index3 = MemRdWt.OpenCurve("GPR_all");
if(index3 < 0)
{
Slf_CURVE myWave;
strcpy(myWave.Name, "GPR_all");
strcpy(myWave.AliasName, "GPR_all");
strcpy(myWave.DepthUnit, "m");
myWave.CodeLen = 4;//float
myWave.RepCode = 4;
myWave.DefVal = 0;
myWave.StartDepth = HD.Sdep;
myWave.EndDepth = HD.Edep;
myWave.DepLevel = HD.Rlev;
strcpy(myWave.DepthUnit,"m");
index3 = MemRdWt.OpenCurve((Slf_CURVE *)&myWave);
}
int index4 = MemRdWt.OpenCurve("THCAV");
if(index4 < 0)
{
Slf_CURVE myWave;
strcpy(myWave.Name, "THCAV");
strcpy(myWave.AliasName, "THCAV");
strcpy(myWave.DepthUnit, "m");
myWave.CodeLen = 4;//float
myWave.RepCode = 4;
myWave.DefVal = 0;
myWave.StartDepth = HD.Sdep;
myWave.EndDepth = HD.Edep;
myWave.DepLevel = HD.Rlev;
strcpy(myWave.DepthUnit,"m");
index4 = MemRdWt.OpenCurve((Slf_CURVE *)&myWave);
}
int index5 = MemRdWt.OpenCurve("THerr");
if(index5 < 0)
{
Slf_CURVE myWave;
strcpy(myWave.Name, "THerr");
strcpy(myWave.AliasName, "THerr");
strcpy(myWave.DepthUnit, "m");
myWave.CodeLen = 4;//float
myWave.RepCode = 4;
myWave.DefVal = 0;
myWave.StartDepth = HD.Sdep;
myWave.EndDepth = HD.Edep;
myWave.DepLevel = HD.Rlev;
strcpy(myWave.DepthUnit,"m");
index5 = MemRdWt.OpenCurve((Slf_CURVE *)&myWave);
}
int index6 = MemRdWt.OpenCurve("THCMN");
if(index6 < 0)
{
Slf_CURVE myWave;
strcpy(myWave.Name, "THCMN");
strcpy(myWave.AliasName, "THCMN");
strcpy(myWave.DepthUnit, "m");
myWave.CodeLen = 4;//float
myWave.RepCode = 4;
myWave.DefVal = 0;
myWave.StartDepth = HD.Sdep;
myWave.EndDepth = HD.Edep;
myWave.DepLevel = HD.Rlev;
strcpy(myWave.DepthUnit,"m");
index6 = MemRdWt.OpenCurve((Slf_CURVE *)&myWave);
}
int index7 = MemRdWt.OpenCurve("THCMX");
if(index7 < 0)
{
Slf_CURVE myWave;
strcpy(myWave.Name, "THCMX");
strcpy(myWave.AliasName, "THCMX");
strcpy(myWave.DepthUnit, "m");
myWave.CodeLen = 4;//float
myWave.RepCode = 4;
myWave.DefVal = 0;
myWave.StartDepth = HD.Sdep;
myWave.EndDepth = HD.Edep;
myWave.DepLevel = HD.Rlev;
strcpy(myWave.DepthUnit,"m");
index7 = MemRdWt.OpenCurve((Slf_CURVE *)&myWave);
}
int index8 = MemRdWt.OpenCurve("THLR");
if(index8 < 0)
{
Slf_CURVE myWave;
strcpy(myWave.Name, "THLR");
strcpy(myWave.AliasName, "THLR");
strcpy(myWave.DepthUnit, "m");
myWave.CodeLen = 4;//float
myWave.RepCode = 4;
myWave.DefVal = 0;
myWave.StartDepth = HD.Sdep;
myWave.EndDepth = HD.Edep;
myWave.DepLevel = HD.Rlev;
strcpy(myWave.DepthUnit,"m");
index8 = MemRdWt.OpenCurve((Slf_CURVE *)&myWave);
}
int index9 = MemRdWt.OpenCurve("ECM");
if(index9 < 0)
{
Slf_CURVE myWave;
strcpy(myWave.Name, "ECM");
strcpy(myWave.AliasName, "ECM");
strcpy(myWave.DepthUnit, "m");
myWave.CodeLen = 4;//float
myWave.RepCode = 4;
myWave.DefVal = 0;
myWave.StartDepth = HD.Sdep;
myWave.EndDepth = HD.Edep;
myWave.DepLevel = HD.Rlev;
strcpy(myWave.DepthUnit,"m");
index9 = MemRdWt.OpenCurve((Slf_CURVE *)&myWave);
}
int index10 = MemRdWt.OpenCurve("CEM");
if(index10 < 0)
{
Slf_CURVE myWave;
strcpy(myWave.Name, "CEM");
strcpy(myWave.AliasName, "CEM");
strcpy(myWave.DepthUnit, "m");
myWave.CodeLen = 4;//float
myWave.RepCode = 4;
myWave.DefVal = 0;
myWave.StartDepth = HD.Sdep;
myWave.EndDepth = HD.Edep;
myWave.DepLevel = HD.Rlev;
strcpy(myWave.DepthUnit,"m");
index10 = MemRdWt.OpenCurve((Slf_CURVE *)&myWave);
}
int index11 = MemRdWt.OpenCurve("THCSD");
if(index11 < 0)
{
Slf_CURVE myWave;
strcpy(myWave.Name, "THCSD");
strcpy(myWave.AliasName, "THCSD");
strcpy(myWave.DepthUnit, "m");
myWave.CodeLen = 4;//float
myWave.RepCode = 4;
myWave.DefVal = 0;
myWave.StartDepth = HD.Sdep;
myWave.EndDepth = HD.Edep;
myWave.DepLevel = HD.Rlev;
strcpy(myWave.DepthUnit,"m");
index11 = MemRdWt.OpenCurve((Slf_CURVE *)&myWave);
}
#pragma endregion
int SL=(HD.EndDep-HD.Sdep)/HD.Rlev+5;
float SPR_all;
float LPR_all;
float GPR_all;
float THCAV[1];
float THerr,THCMX,THCMN,THLR,ECM,CEM,THCSD;
#pragma region 꺼죗鑒앴index삿혤
int ATT_index = MemRdWt.OpenWave("ATT");
int RATE_index = MemRdWt.OpenWave("RATE");
int ATTC_index = MemRdWt.OpenWave("ATTC");
int ZCC_index = MemRdWt.OpenWave("ZCC");
int SLG_index = MemRdWt.OpenWave("SLG");
int THC_index = MemRdWt.OpenWave("THC");
//속흙敬밗코꼬류똑渴놔
int AMP_index = MemRdWt.OpenWave("AMP");
//혓窟
int SPR_all_index = MemRdWt.OpenCurve("SPR_all");
int LPR_all_index = MemRdWt.OpenCurve("LPR_all");
int GPR_all_index = MemRdWt.OpenCurve("GPR_all");
int THCAV_index = MemRdWt.OpenCurve("THCAV");
int THerr_index = MemRdWt.OpenCurve("THerr");
int THCMN_index = MemRdWt.OpenCurve("THCMN");
int THCMX_index = MemRdWt.OpenCurve("THCMX");
int THLR_index = MemRdWt.OpenCurve("THLR");
int ECM_index = MemRdWt.OpenCurve("ECM");
int CEM_index = MemRdWt.OpenCurve("CEM");
int THCSD_index = MemRdWt.OpenCurve("THCSD");
#pragma endregion
#pragma region 삿혤input鑒앴돨index
int FGN_index = MemRdWt.OpenWave("FWGN");
int NGN_index = MemRdWt.OpenWave("NWGN");
int RGN_index = MemRdWt.OpenWave("RWGN");
int FDL_index = MemRdWt.OpenWave("FWST");
int NDL_index = MemRdWt.OpenWave("NWST");
int RDL_index = MemRdWt.OpenWave("RWST");
int FWAVEindex[36], NWAVEindex[36], RWAVEindex[72];
for(int _i = 0; _i < 36; _i++)
{
QString num = QString::number(_i + 1);
num = (num.length() == 1)? "0" + num : num;
QString fwaveName = "FWAVE" + num;
QString nwaveName = "NWAVE" + num;
FWAVEindex[_i] = MemRdWt.OpenWave(fwaveName.toStdString().c_str());
NWAVEindex[_i] = MemRdWt.OpenWave(nwaveName.toStdString().c_str());
if(FWAVEindex[_i] < 0 || NWAVEindex[_i] < 0)
return 0;
}
for(int _i = 0; _i < 72; _i++)
{
QString num = QString::number(_i + 1);
num = (num.length() == 1)? "0" + num : num;
QString rwaveName = "RWAVE" + num;
RWAVEindex[_i] = MemRdWt.OpenWave(rwaveName.toStdString().c_str());
if(RWAVEindex[_i] < 0)
return 0;
}
#pragma endregion
int itable1=MemRdWt.OpenOG_RESULT("미쒜醴좆");//댔역미쒜깊목삿혤깊목index篤네
MemRdWt.SetTableRecordCount(itable1,0); //헙워覩唐돨깊목鑒앴
int itable2=MemRdWt.OpenOG_RESULT("룐몰팀송");
MemRdWt.SetTableRecordCount(itable2,0);
int fiii=0;
int FLE=(HD.EndDep-HD.Stdep)/HD.Rlev+300;
float *FSPR=new float[FLE];
float *FGPR=new float[FLE];
float *FDEP=new float[FLE];
/*float **FSLG = new float*[72];
for (int _ii = 0; _ii < 72; _ii++)
FSLG[_ii] = new float[FLE];*/
/*int **ADDR=new int*[72];
for(int mm=0;mm<72;mm++)
ADDR[mm]=new int[FLE];*/
DepthProgress mmProgress;
mmProgress.CreatProgress(HD.Stdep, HD.EndDep, "넋埼뇹잿櫓...");
//---------------------------------<2D>똑琦뻔--------------------------------------------
while(HD.Dep <= HD.EndDep)
{
//첼늴떼路릿뗍혤꽝鑒,壇뚤뜩뙈꽝鑒왠齡
GetPosValue(CTH,CON,1,1);
GetPosValue(CT,CON,2,1);
GetPosValue(IT,CON,3,1);
GetPosValue(MT,CON,4,1);
GetPosValue(STEV,CON,5,1);
GetPosValue(ZM1,CON,6,1);
GetPosValue(LSM,CON,7,1);
GetPosValue(BW,CON,8,1);
GetPosValue(CON1,CON,9,1);
GetPosValue(CON2,CON,10,1);
GetPosValue(CON3,CON,11,1);
GetPosValue(RWD,CON,12,1);
GetPosValue(RWL,CON,13,1);
GetPosValue(FPS,CON,14,1);
GetPosValue(FPE,CON,15,1);
GetPosValue(RM1,CON,16,1);
GetPosValue(RM2,CON,17,1);
GetPosValue(RL,CON,18,1);
GetPosValue(S1,CON,19,1);
GetPosValue(S2,CON,20,1);
GetPosValue(S3,CON,21,1);
GetPosValue(L1,CON,22,1);
GetPosValue(L2,CON,23,1);
GetPosValue(L3,CON,24,1);
GetPosValue(G1,CON,25,1);
GetPosValue(CCMX,CON,26,1);
GetPosValue(CCMN,CON,27,1);
GetPosValue(NSR,CON,28,1);
GetPosValue(FSR,CON,29,1);
GetPosValue(RSR,CON,30,1);
GetPosValue(CID,CON,31,1);
GetPosValue(CD,CON,32,1);
IT=IT/25.4;
QString _proOut = "";
if(CTH < 5 || CTH > 15)
_proOut += "꽝鑒敬밗비똑CTH낚썹5~15mm\n";
if(CT != 1 && CT != 2)
_proOut += "꽝鑒彊콧잚謹CT낚썹1-됴쵱똑彊콧2-끽방彊콧)\n";
if(IT*25.4 < 100 || IT*25.4 > 200)
_proOut += "꽝鑒敬밗넹당IT낚썹100~200mm\n";
if(MT != 1 && MT != 2)
_proOut += "꽝鑒콧쉬잚謹MT낚썹1-彊샘2-答샘)\n";
if(STEV < 4000 || STEV > 7000)
_proOut += "꽝鑒敬밗<EFBFBD>醵STEV낚썹4000~7000m/s\n";
if(ZM1 < 0.5 || ZM1 > 10)
_proOut += "꽝鑒콧쉬羸예ZM1낚썹0.5~10MRayls\n";
if(LSM != 1 && LSM != 2)
_proOut += "꽝鑒틱뺄朞嶝LSM낚썹1-틱뺄2-꼇틱뺄)\n";
if(RWD <= 0)
_proOut += "꽝鑒묾驪꺼역눗儺珂RWD낚썹댕黨0┢s\n";
if(RWL <= 0)
_proOut += "꽝鑒묾驪꺼儺珂눗낀RWL낚썹댕黨0┢s\n";
if(FPS <= 0)
_proOut += "꽝鑒읊캠꺼璣룟폅迦듐FPS낚썹댕黨0\n";
if(FPE <= 0)
_proOut += "꽝鑒읊캠꺼璣룟老岺듐FPE낚썹댕黨0\n";
if(FPS >= FPE)
_proOut += "꽝鑒읊캠꺼璣룟폅迦듐FPS/읊캠꺼璣룟老岺듐FPE밑溝댄轎FPS < FPE\n";
if(RM1 <= 0)
_proOut += "꽝鑒묾驪꺼틉堵품눗RM1낚썹댕黨0kHz\n";
if(RM2 <= 0)
_proOut += "꽝鑒묾驪꺼틉堵빈눗RM2낚썹댕黨0kHz\n";
if(RM1 >= RM2)
_proOut += "꽝鑒묾驪꺼틉堵품눗RM1/묾驪꺼틉堵빈눗RM2밑溝댄轎RM1 < RM2\n";
if(RL <= 0)
_proOut += "꽝鑒묾驪꺼珂堵눗낀RL낚썹댕黨0┢s\n";
if(S1 <= 0 || S1 >= 100)
_proOut += "꽝鑒미宮輕념뀌쌔岺令S1낚썹0~100%\n";
if(S2 <= 0 || S2 >= 100)
_proOut += "꽝鑒미宮輕념櫓쌔岺令S2낚썹0~100%\n";
if(S3 <= 0 || S3 >= 100)
_proOut += "꽝鑒미宮輕념봤쌔岺令S3낚썹0~100%\n";
if(S1 >= S2 || S1 >= S3 || S2 >= S3)
_proOut += "꽝鑒미宮輕념S1/S2/S3밑溝댄轎S1 < S2 < S3\n";
if(L1 <= 0 || L1 >= 100)
_proOut += "꽝鑒捻宮輕념봤쌔岺令S1낚썹0~100%\n";
if(L2 <= 0 || L2 >= 100)
_proOut += "꽝鑒捻宮輕념櫓쌔岺令S2낚썹0~100%\n";
if(L3 <= 0 || L2 >= 100)
_proOut += "꽝鑒捻宮輕념뀌쌔岺令S3낚썹0~100%\n";
if(L1 >= L2 || L1 >= L3 || L2 >= L3)
_proOut += "꽝鑒捻宮輕념L1/L2/L3밑溝댄轎L1 < L2 < L3\n";
if(G1 <= 0 || G1 >= 100)
_proOut += "꽝鑒폭宮輕념쌔岺令G1낚썹0~100%\n";
if(CCMX <= 0)
_proOut += "꽝鑒단꾼<EFBFBD>掘쌔岺令CCMX낚썹댕黨0m\n";
if(CCMN <= 0)
_proOut += "꽝鑒단꾼苟掘쌔岺令CCMN낚썹댕黨0m\n";
if(CCMN >= CCMX)
_proOut += "꽝鑒단꾼CCMN/CCMX밑溝댄轎CCMN < CCMX\n";
if(CID <= 0)
_proOut += "꽝鑒묾驪꺼老포꽝鑒CID낚썹댕黨0mm\n";
if(CD <= 0)
_proOut += "꽝鑒읊캠꺼老포꽝鑒CD낚썹댕黨0mm\n";
if(_proOut != ""){
_proOut += "綠界岺셕炬";
AfxMessageBox(_proOut);
#pragma region 왕쇌姦렴
for(int _ii = 0; _ii< 36; _ii++)
{
delete []N2D[_ii];
}delete []N2D;
for(int _ii = 0; _ii < 36; _ii++)
{
delete []F2D[_ii];
}delete []F2D;
for(int _ii = 0; _ii < 72; _ii++)
{
delete []R2D[_ii];
}delete []R2D;
for(int _ii = 0; _ii < 72; _ii++)
{
delete []RR2D[_ii];
}delete []RR2D;
//쐤
for(int _ii = 0; _ii < 36; _ii++)
{
delete []N_hx_abs[_ii];
}delete []N_hx_abs;
for(int _ii = 0; _ii < 36; _ii++)
{
delete []F_hx_abs[_ii];
}delete []F_hx_abs;
//묾驪
for (int _ii = 0; _ii < 36; _ii++)
{
delete[]R_hx_group[_ii];
}delete[]R_hx_group;
for(int _ii = 0; _ii < 72; _ii++)
{
delete []R_hx_abs[_ii];
}delete []R_hx_abs;
for(int _ii = 0; _ii < 72; _ii++)
{
delete []R_XX_abs[_ii];
}delete []R_XX_abs;
for (int _ii = 0; _ii < 36; _ii++)
{
delete[]F_lb[_ii];
}delete[]F_lb;
#pragma endregion
return 0;
}
//------------------------------------------1 삿혤鑒앴(轟矜錦맣)--------------------------------------------------
mmProgress.SetDepth(HD.Dep);
HD.Dep;
int a = 0;
float SPR[3]={1};
float CmQ[2]={0};
float FGN[36], NGN[36], RGN[72], FDL[36], NDL[36], RDL[72];
float F2D0[36][300], N2D0[36][300], R2D0[72][300];
float ATT[72],RATE[72],ATTC[72],ZCC[72],SLG[72],THC[72],AMP[72];
#pragma region 鑒앴삿혤
//GetINValue(FGN,1,36);
//GetINValue(NGN,3,36);
//GetINValue(RGN,5,72);
//GetINValue(FDL,2,36);
//GetINValue(NDL,4,36);
//GetINValue(RDL,6,72);
MemRdWt.ReadWaveToFloatBuf(FGN_index, HD.Dep, 1,FGN);
MemRdWt.ReadWaveToFloatBuf(NGN_index, HD.Dep, 1,NGN);
MemRdWt.ReadWaveToFloatBuf(RGN_index, HD.Dep, 1,RGN);
MemRdWt.ReadWaveToFloatBuf(FDL_index, HD.Dep, 1,FDL);
MemRdWt.ReadWaveToFloatBuf(NDL_index, HD.Dep, 1,NDL);
MemRdWt.ReadWaveToFloatBuf(RDL_index, HD.Dep, 1,RDL);
if(FGN[0] <= -9999 || NGN[0] <= -9999 || RGN[0] <= -9999 || FDL[0] <= -9999 || NDL[0] <= -9999 || RDL[0] <= -9999)
{
#pragma region 왕쇌姦렴
for(int _ii = 0; _ii< 36; _ii++)
{
delete []N2D[_ii];
}delete []N2D;
for(int _ii = 0; _ii < 36; _ii++)
{
delete []F2D[_ii];
}delete []F2D;
for(int _ii = 0; _ii < 72; _ii++)
{
delete []R2D[_ii];
}delete []R2D;
for(int _ii = 0; _ii < 72; _ii++)
{
delete []RR2D[_ii];
}delete []RR2D;
//쐤
for(int _ii = 0; _ii < 36; _ii++)
{
delete []N_hx_abs[_ii];
}delete []N_hx_abs;
for(int _ii = 0; _ii < 36; _ii++)
{
delete []F_hx_abs[_ii];
}delete []F_hx_abs;
//묾驪
for (int _ii = 0; _ii < 36; _ii++)
{
delete[]R_hx_group[_ii];
}delete[]R_hx_group;
for(int _ii = 0; _ii < 72; _ii++)
{
delete []R_hx_abs[_ii];
}delete []R_hx_abs;
for(int _ii = 0; _ii < 72; _ii++)
{
delete []R_XX_abs[_ii];
}delete []R_XX_abs;
for (int _ii = 0; _ii < 36; _ii++)
{
delete[]F_lb[_ii];
}delete[]F_lb;
#pragma endregion
AfxMessageBox("뎠품뇹잿쒜뙈鑒앴唐轎헝쇱꿴쒜뙈<EFBFBD><EFBFBD>零샀鑒앴\n綠界岺셕炬");
return 0;
}
for(int _i = 0; _i < 36; _i++)
{
MemRdWt.ReadWaveToFloatBuf(FWAVEindex[_i], HD.Dep, 1, F2D0[_i]);
MemRdWt.ReadWaveToFloatBuf(NWAVEindex[_i], HD.Dep, 1, N2D0[_i]);
}
for(int _i = 0; _i < 72; _i++)
{
MemRdWt.ReadWaveToFloatBuf(RWAVEindex[_i], HD.Dep, 1, R2D0[_i]);
}
#pragma endregion
//혼딜藤樓
for (int i = 0; i < 36; i++)
{
for (int j = 0; j < 300; j++)
{
F2D[i][j] = F2D0[i][j]/FGN[i];
N2D[i][j] = N2D0[i][j]/NGN[i];
}
}
float V=1500,RNS,RNE,D;
D=(IT*25.4/2-CTH-CID)*1e-3*2;
int rll=RL/RSR*1e3;
for (int i = 0; i < 72; i++)
{
for (int j = 0; j < 300; j++)
{
R2D[i][j] = R2D0[i][j]/RGN[i];
RNS=floor((D/V)/(RSR*0.000000001))-RDL[i]/(RSR);
RNE=RNS+rll;
}
}
//------------------------------------------3 뇹잿넋埼(렴頓炬넋埼돨뒈렘)--------------------------------------------------
//뇹잿법넋
float Att0all[36],Att0all1[36],Rateall[72],Thick[72],Att_c[72],Zc_end[72], Zm_end[72];
float Rf[72],N_hx_abs_max[36], F_hx_abs_max[36], R_hx_abs_max[72],R_hx_phah_min[72] ,S_welldata2D_max[72], S_welldata2D_min[72], N_maxindex[72], F_maxindex[72], S_maxindex[72], maxindex[72], minindex[72];
//陶꺼近돕珂셕炬
hilbert(F2D, F_hx_abs, 36);//陶품12몸
/*for (int i = 0; i < 36; i++)
{
for (int j = 0; j < NN; j++)
{
F_hx_abs[i][j] = F2D[i][j];
}
}*/
for (int i = 0; i < 36; i++)
{
maxindex[i]=1;
F_hx_abs_max[i] = F_hx_abs[i][0];
}
maxInArray_self(F_hx_abs, F_hx_abs_max, maxindex,1, NN, 36, 1);
int FPE1=FPE;
int FPS1=FPS;
float pf[36] = { 0 }, lf[36] = { 0 };
float **pksf = new float*[36];
for (int _ii = 0; _ii < 36; _ii++)
pksf[_ii] = new float[FPE1];
float **locsf = new float*[36];
for (int _ii = 0; _ii < 36; _ii++)
locsf[_ii] = new float[FPE1];
for (int i = 0; i<36; i++)
{
for (int m = 0; m < FPE1; m++)
{
pksf[i][m] = 0;
locsf[i][m] = 0;
}
}
findPeaks(F_hx_abs, pksf, locsf, FPS1, FPE1);
for (int k = 0; k<36; k++)
{
for (int m = 0; m<FPE1; m++)
{
if (pksf[k][m] != 0)
{
pf[k] = pksf[k][m];
lf[k] = locsf[k][m];
if (pksf[k][m]>F_hx_abs_max[k]/3)
break;
}
else if (pksf[k][m] == 0)
break;
}
}
float fcy[36] = { 0 }, fmy[36] = { 0 };
for (int k = 0; k<36; k++)
{
for (int m = 0; m<FPE1; m++)
{
if (pksf[k][m] != 0)
{
fmy[k] = pksf[k][m];
fcy[k] = locsf[k][m];
if (pksf[k][m]>F_hx_abs_max[k] * 0.4)
break;
}
else if (pksf[k][m] == 0)
break;
}
}
for (int _ii = 0; _ii < 36; _ii++)
{
delete[]pksf[_ii];
}delete[]pksf;
for (int _ii = 0; _ii < 36; _ii++)
{
delete[]locsf[_ii];
}delete[]locsf;
//敬밗앙櫓똑
float fbc = 15;
float fcc[36] = { 0 };
float ffm[36] = { 0 };
float F_lb_max[36] = { 0 };
float CEC[18] = { 0 };
for (int i = 0; i < 36; i++)
{
fcc[i] = fcy[i] + fbc;
for (int j = 0; j < NN; j++)
{
if (j<fcc[i])
F_lb[i][j] = 0;
else
F_lb[i][j] = F_hx_abs[i][j];
}
}
for (int i = 0; i < 36; i++)
{
ffm[i] = 1;
F_lb_max[i] = F_lb[i][0];
}
int CEN = 150;
maxInArray_self(F_lb, F_lb_max, ffm,1, NN, 36, 1);
float pce[36] = { 0 }, lce[36] = { 0 };
float **pkce = new float*[36];
for (int _ii = 0; _ii < 36; _ii++)
pkce[_ii] = new float[CEN];
float **loce = new float*[36];
for (int _ii = 0; _ii < 36; _ii++)
loce[_ii] = new float[CEN];
for (int i = 0; i<36; i++)
{
for (int m = 0; m < CEN; m++)
{
pkce[i][m] = 0;
loce[i][m] = 0;
}
}
findPeaks(F_lb, pkce, loce, 1, CEN);
for (int k = 0; k<36; k++)
{
for (int m = 0; m<CEN; m++)
{
if (pkce[k][m] != 0)
{
pce[k] = pkce[k][m];
lce[k] = loce[k][m];
if (pkce[k][m]>F_lb_max[k] * 0.8)
break;
}
else if (pkce[k][m] == 0)
break;
}
}
Ecc_co(lce, CEC, FDL, RSR,36);
CEM =CEC[0];
for (int i = 1; i < 18; i++)
{
if (CEC[i] > CEM)
{
CEM = CEC[i];
}
}
CEM= 100 - CEM;
for (int _ii = 0; _ii < 36; _ii++)
{
delete[]pkce[_ii];
}delete[]pkce;
for (int _ii = 0; _ii < 36; _ii++)
{
delete[]loce[_ii];
}delete[]loce;
//쐤꺼돕珂
hilbert(N2D,N_hx_abs,36);//쐤품512몸
/*for (int i = 0; i < 36; i++)
{
for (int j = 0; j < NN; j++)
{
N_hx_abs[i][j] = N2D[i][j];
}
}*/
for (int i = 0; i < 36; i++)
{
maxindex[i]=1;
N_hx_abs_max[i] = N_hx_abs[i][0];
}
maxInArray_self(N_hx_abs, N_hx_abs_max, maxindex,1, NN, 36, 1);
float pn[36] = { 0 }, ln[36] = { 0 };
float **pksn = new float*[36];
for (int _ii = 0; _ii < 36; _ii++)
pksn[_ii] = new float[FPE1];
float **locsn = new float*[36];
for (int _ii = 0; _ii < 36; _ii++)
locsn[_ii] = new float[FPE1];
for (int i = 0; i<36; i++)
{
for (int m = 0; m < FPE1; m++)
{
pksn[i][m] = 0;
locsn[i][m] = 0;
}
}
findPeaks(N_hx_abs, pksn, locsn, FPS1, FPE1);
for (int k = 0; k<36; k++)
{
for (int m = 0; m<FPS1; m++)
{
if (pksn[k][m] != 0)
{
pn[k] = pksn[k][m];
ln[k] = locsn[k][m];
if (pksn[k][m]>N_hx_abs_max[k]/3)
break;
}
else if (pksn[k][m] == 0)
break;
}
}
for (int _ii = 0; _ii < 36; _ii++)
{
delete[]pksn[_ii];
}delete[]pksn;
for (int _ii = 0; _ii < 36; _ii++)
{
delete[]locsn[_ii];
}delete[]locsn;
//鉀숑셕炬
for (int j = 0; j < 36; j++)
{
Att0all[j] = 20 / 0.1*log10(pn[j] / pf[j]);
if(Att0all[j]<0)
{Att0all[j]=(Att0all[j-1]+Att0all[j-2])/2;}
}
/*for (int j = 0; j < 36; j++)
{
Att0all[j] = 20 / 0.1*log10(N_hx_abs_max[j] / F_hx_abs_max[j]);
}*/
//敬밗비똑섟轎뀌셕炬
fft(R2D, RR2D,R_hx_group, R_XX_abs,72,RNS,RNE); //朞嶝셕炬꺼近뙈
/*for (int i = 0; i < 72; i++)
{
for (int j = 0; j < NN*2; j++)
{
R_XX_abs[i][j] = RR2D[i][j];
R_hx_group[i][j]=RR2D[i][j];
}
}*/
float ref = 0.5*STEV / CTH;//묾驪틉쪽
float RN1 = round((ref - RM1)*6/25);
float RN2 = round((ref + RM2)*6/25);
int RN11=RN1;
for (int i = 0; i < 72; i++)
{
minindex[i]=RN1;
R_hx_phah_min[i] = R_hx_group[i][RN11];
}
minInArray_self(R_hx_group, R_hx_phah_min, minindex, RN1,RN2, 72, 1);
THerr=0;
Thc_co(THCAV, Rf, THC, minindex, RSR, STEV, NN*2);
THerr=sqrt((THCAV[0]-CTH)*(THCAV[0]-CTH))/CTH*100;
float THLR;
THLR=sqrt(((THCAV[0]-CTH)/CTH)*((THCAV[0]-CTH)/CTH))*100;
float THCMN= THC[0];
for (int i = 1; i < 72; i++)
{
if (THC[i] <THCMN)
{
THCMN = THC[i];
}
}
float THCMX= THC[0];
for (int i = 1; i < 72; i++)
{
if (THC[i] >THCMX)
{
THCMX = THC[i];
}
}
THCSD=CTH;
//묾驪꺼槻쪽셕炬
hilbert2(RR2D,R_hx_abs,72);
/*for (int i = 0; i < 72; i++)
{
for (int j = 0; j < NN; j++)
{
R_hx_abs[i][j] = R2D[i][j];
}
}*/
for (int i = 0; i < 72; i++)
{
maxindex[i]=1;
R_hx_abs_max[i] = R_hx_abs[i][0];
}
maxInArray_self(R_hx_abs, R_hx_abs_max, maxindex,1, NN, 72, 1);
Rate_co(R_hx_abs, RATE, maxindex, R_hx_abs_max, RSR, RWD, RWL,NN);
float amp[72];
for (int i = 0; i < 72; i++)
{
maxindex[i]=1;
amp[i] = R_hx_abs[i][0];
}
maxInArray_self(R_hx_abs, amp, maxindex,50, NN, 72, 1);
float ampg[72];
for (int i = 1; i < 72; i++)
{
ampg[i]=amp[i]/RGN[i];
}
//老포앙櫓똑
float ECC[36];
Ecc_co(maxindex, ECC, RDL, RSR,72);
ECM= ECC[0];
for (int i = 1; i < 36; i++)
{
if (ECC[i] > ECM)
{
ECM = ECC[i];
}
}
//셕炬폭捻미榴檄
float BW1 = BW * 100;
float ZM2=1.5;
Zc_Zm_comb(Att0all, ATT, RATE, CON2, CON1, CTH, IT, CD, BW1, CT, LSM, CON3,Zc_end, Zm_end, ZM1, ZM2);
Att_c_find2(Att_c, ATT, CTH, Zm_end, CON1);
SLG_plate(SLG, Zc_end, Att_c, CTH, CT, gd_Zc, gd_Att, ld_Zc, ld_Att, sd_Zc, sd_Att, gu_Zc, gu_Att, lu_Zc, lu_Att, su_Zc, su_Att);
S_cal(SLG,SPR,CmQ,S1,S2,S3,L1,L2,L3,G1,CCMX,CCMN);
SPR_all=SPR[0];
LPR_all=SPR[1];
GPR_all=SPR[2];
/*for(int j=0;j<72;j++)
{
FSLG[j][fiii]=SLG[j];
}*/
FDEP[fiii]=HD.Dep;
FSPR[fiii]=SPR_all;
FGPR[fiii]=GPR_all;
fiii++;
//-------------------------------------------4 渴놔써벎(轟矜錦맣)-------------------------------------------------
//랗郭渴놔
if(ATT_index > 0) MemRdWt.WriteWave(ATT_index, HD.Dep, 1, &Att0all);//殮쌈셕炬돤돕
if(RATE_index > 0) MemRdWt.WriteWave(RATE_index, HD.Dep, 1, &RATE);
if(ATTC_index > 0) MemRdWt.WriteWave(ATTC_index, HD.Dep, 1, &Att_c);//敬빈鉀숑
if(ZCC_index > 0) MemRdWt.WriteWave(ZCC_index, HD.Dep, 1, &Zc_end);//敬빈羸예
if(SLG_index > 0) MemRdWt.WriteWave(SLG_index, HD.Dep, 1, &SLG);
if(THC_index > 0) MemRdWt.WriteWave(THC_index, HD.Dep, 1, &THC);
if(AMP_index > 0) MemRdWt.WriteWave(AMP_index, HD.Dep, 1, &amp);
//寧郭渴놔
if(THCAV_index > 0) MemRdWt.WriteCurve(THCAV_index,HD.Dep,1,&THCAV);
if(THerr_index > 0) MemRdWt.WriteCurve(THerr_index,HD.Dep,1,&THerr);
if(THCAV_index > 0) MemRdWt.WriteCurve(THCAV_index,HD.Dep,1,&THCAV);
if(THCMN_index > 0) MemRdWt.WriteCurve(THCMN_index,HD.Dep,1,&THCMN);
if(THCMX_index > 0) MemRdWt.WriteCurve(THCMX_index,HD.Dep,1,&THCMX);
if(THLR_index > 0) MemRdWt.WriteCurve(THLR_index,HD.Dep,1,&THLR);
if(CEM_index > 0) MemRdWt.WriteCurve(CEM_index,HD.Dep,1,&CEM);
if(ECM_index > 0) MemRdWt.WriteCurve(ECM_index,HD.Dep,1,&ECM);
if(THCSD_index > 0) MemRdWt.WriteCurve(THCSD_index,HD.Dep,1,&THCSD);
if(SPR_all_index > 0) MemRdWt.WriteCurve(SPR_all_index,HD.Dep,1,&SPR_all);
if(LPR_all_index > 0) MemRdWt.WriteCurve(LPR_all_index,HD.Dep,1,&LPR_all);
if(GPR_all_index > 0) MemRdWt.WriteCurve(GPR_all_index,HD.Dep,1,&GPR_all);
MemRdWt.In();
}
Fdpr *fdpr=new Fdpr[fiii];
for(int i=0;i<fiii;i++)
{
fdpr[i].fdep=FDEP[i];
fdpr[i].fgpr=FGPR[i];
fdpr[i].fspr=FSPR[i];
}
int dataSize =fiii;
const int maxSegments = fiii;
int segmentCount = 0;
Fdpr*** segments = new Fdpr**[maxSegments];
int* segmentLengths = new int[maxSegments](); // 첼뙈돨낀똑
float* segmentAverages = new float[maxSegments](); // 닸뇨첼뙈돨틱엇令
float* segmentGAverages = new float[maxSegments]();
// 놓迦뺏뒤寧뙈
segments[segmentCount] = new Fdpr*[dataSize];
segments[segmentCount][segmentLengths[segmentCount]++] = &fdpr[0];
// 뎠품뙈돨y令렀鍋
int currentRange = getRange(fdpr[0].fspr,S1,S2,S3);
// 롸뙈쭉서
for (int i = 1; i < dataSize; ++i) {
int newRange = getRange(fdpr[i].fspr,S1,S2,S3);
if (newRange != currentRange) {
// 셕炬뎠품뙈돨틱엇令
float sum = 0;
float sumg = 0;
for (int j = 0; j < segmentLengths[segmentCount]; ++j) {
sum += segments[segmentCount][j]->fspr;
sumg += segments[segmentCount][j]->fgpr;
}
segmentAverages[segmentCount] = sum / segmentLengths[segmentCount];
segmentGAverages[segmentCount] = sumg / segmentLengths[segmentCount];
// 供냥뎠품뙈,역迦劤뙈
segmentCount++;
segments[segmentCount] = new Fdpr*[dataSize];
currentRange = newRange;
}
segments[segmentCount][segmentLengths[segmentCount]++] = &fdpr[i];
}
// 셕炬離빈寧뙈돨틱엇令
float sum = 0;
float sumg = 0;
for (int j = 0; j < segmentLengths[segmentCount]; ++j) {
sum += segments[segmentCount][j]->fspr;
sumg += segments[segmentCount][j]->fgpr;
}
segmentAverages[segmentCount] = sum / segmentLengths[segmentCount];
segmentGAverages[segmentCount] = sumg / segmentLengths[segmentCount];
segmentCount++; // 茄셥돨뙈鑒
// 渴놔롸뙈써벎뵨틱엇令
/*FILE *tb1;
tb1=fopen("E:\\seg.txt","w");
for (int i = 0; i < segmentCount; i++)
{
fprintf(tb1,"%d\t",i+1);
fprintf(tb1,"%f\t",segmentAverages[i]);
fprintf(tb1,"%f\t",segments[i][0]->fdep);
fprintf(tb1,"%f\t",segments[i][segmentLengths[i]-1]->fdep);
fprintf(tb1,"\n");
}
fclose(tb1);*/
GUJING *CCNN1=new GUJING[segmentCount];
for (int i = 0; i < segmentCount; i++)
{
CCNN1[i].GNO=i+1;
CCNN1[i].GSDEP=segments[i][0]->fdep;
if(i+1==segmentCount)
CCNN1[i].GEDEP=segments[i][segmentLengths[i]-1]->fdep;
else
CCNN1[i].GEDEP=segments[i+1][0]->fdep;
CCNN1[i].GRESULT=Grs(segmentAverages[i],segmentGAverages[i],S1,S2,S3,L1,L2,L3,G1);
}
/*FILE *tb11;
tb11=fopen("E:\\CN1.txt","w");
for (int i = 0; i < segmentCount; i++)
{
fprintf(tb11,"%d\t",CCNN1[i].GNO);
fprintf(tb11,"%f\t",CCNN1[i].GSDEP);
fprintf(tb11,"%f\t",CCNN1[i].GEDEP);
fprintf(tb11,"%d\t",CCNN1[i].GRESULT);
fprintf(tb11,"\n");
}
fclose(tb11);*/
for (int i = 1; i < segmentCount-1; i++)
{
if(CCNN1[i].GEDEP-CCNN1[i].GSDEP<0.5&&CCNN1[i].GRESULT==1)
{
if(CCNN1[i-1].GRESULT==CCNN1[i+1].GRESULT)
CCNN1[i].GRESULT=CCNN1[i-1].GRESULT;
}
}
for (int i = 1; i < segmentCount-1; i++)
{
if(CCNN1[i].GEDEP-CCNN1[i].GSDEP<0.5)
{
if(CCNN1[i-1].GRESULT==CCNN1[i+1].GRESULT&&CCNN1[i-1].GRESULT==1)
CCNN1[i].GRESULT=1;
}
}
GUJING *CCNN2=new GUJING[segmentCount];
int CN2=1;
CCNN2[0]=CCNN1[0];
CCNN2[0].GNO=1;
for (int i = 0; i < segmentCount-1; i++)
{
if(CCNN1[i].GRESULT==CCNN1[i+1].GRESULT)
{
CCNN2[CN2-1].GEDEP=CCNN1[i+1].GEDEP;
}
else
{
CCNN2[CN2]=CCNN1[i+1];
CCNN2[CN2].GNO=CN2+1;
CN2++;
}
}
/*FILE *tb1;
tb1=fopen("E:\\CN2.txt","w");
for (int i = 0; i < CN2; i++)
{
fprintf(tb1,"%d\t",CCNN2[i].GNO);
fprintf(tb1,"%f\t",CCNN2[i].GSDEP);
fprintf(tb1,"%f\t",CCNN2[i].GEDEP);
fprintf(tb1,"%d\t",CCNN2[i].GRESULT);
fprintf(tb1,"\n");
}
fclose(tb1);*/
for (int i = 1; i < CN2-1; i++)
{
if(CCNN2[i].GEDEP-CCNN2[i].GSDEP<1&&CCNN2[i].GRESULT==1)
{
if(CCNN2[i-1].GRESULT==CCNN2[i+1].GRESULT)
CCNN2[i].GRESULT=CCNN2[i-1].GRESULT;
}
}
for (int i = 1; i < CN2-1; i++)
{
if(CCNN2[i].GEDEP-CCNN2[i].GSDEP<1)
{
if(CCNN2[i-1].GRESULT==CCNN2[i+1].GRESULT&&CCNN2[i-1].GRESULT==1)
CCNN2[i].GRESULT=1;
}
}
GUJING *CCNN3=new GUJING[CN2];
int CN3=1;
CCNN3[0]=CCNN2[0];
CCNN3[0].GNO=1;
for (int i = 0; i < CN2-1; i++)
{
if(CCNN2[i].GRESULT==CCNN2[i+1].GRESULT)
{
CCNN3[CN3-1].GEDEP=CCNN2[i+1].GEDEP;
}
else
{
CCNN3[CN3]=CCNN2[i+1];
CCNN3[CN3].GNO=CN3+1;
CN3++;
}
}
//float *CSLG=new float[FLE];
for (int i = 0; i < CN3; i++)
{
float cspr=0;
float cgpr=0;
float cns=0;
for(int j = 0; j < FLE; j++)
{
if(FDEP[j]>=CCNN3[i].GSDEP&&FDEP[j]<=CCNN3[i].GEDEP)
{
cspr=cspr+FSPR[j];
cgpr=cgpr+FGPR[j];
cns++;
}
}
cspr=cspr/cns;
cgpr=cgpr/cns;
CCNN3[i].GRESULT=Grs(cspr,cgpr,S1,S2,S3,L1,L2,L3,G1);
}
for (int i = 1; i < CN3-1; i++)
{
if(CCNN3[i].GEDEP-CCNN3[i].GSDEP<1)
{
if(CCNN3[i-1].GRESULT==CCNN3[i+1].GRESULT)
CCNN3[i].GRESULT=CCNN3[i-1].GRESULT;
else if(CCNN3[i-1].GRESULT<CCNN3[i+1].GRESULT)
CCNN3[i].GRESULT=CCNN3[i-1].GRESULT;
else if(CCNN3[i-1].GRESULT>CCNN3[i+1].GRESULT)
CCNN3[i].GRESULT=CCNN3[i+1].GRESULT;
}
}
GUJING *CCNN4=new GUJING[CN3];
int CN4=1;
CCNN4[0]=CCNN3[0];
CCNN4[0].GNO=1;
for (int i = 0; i < CN3-1; i++)
{
if(CCNN3[i].GRESULT==CCNN3[i+1].GRESULT)
{
CCNN4[CN4-1].GEDEP=CCNN3[i+1].GEDEP;
}
else
{
CCNN4[CN4]=CCNN3[i+1];
CCNN4[CN4].GNO=CN4+1;
CN4++;
}
}
for (int i = 0; i < CN4; i++)
{
float cspr=0;
float cgpr=0;
float cns=0;
for(int j = 0; j < FLE; j++)
{
if(FDEP[j]>=CCNN4[i].GSDEP&&FDEP[j]<=CCNN4[i].GEDEP)
{
cspr=cspr+FSPR[j];
cgpr=cgpr+FGPR[j];
cns++;
}
}
cspr=cspr/cns;
cgpr=cgpr/cns;
CCNN4[i].GRESULT=Grs(cspr,cgpr,S1,S2,S3,L1,L2,L3,G1);
}
GUJING *CCNN5=new GUJING[CN4];
int CN5=1;
CCNN5[0]=CCNN4[0];
CCNN5[0].GNO=1;
for (int i = 0; i < CN4-1; i++)
{
if(CCNN4[i].GRESULT==CCNN4[i+1].GRESULT)
{
CCNN5[CN5-1].GEDEP=CCNN4[i+1].GEDEP;
}
else
{
CCNN5[CN5]=CCNN4[i+1];
CCNN5[CN5].GNO=CN5+1;
CN5++;
}
}
for (int i = 0; i < CN5; i++)
{
switch(CCNN5[i].GRESULT)
{
case 0:
CCNN5[i].GRESULT=7;
break;
case 1:
CCNN5[i].GRESULT=8;
break;
case 2:
CCNN5[i].GRESULT=9;
break;
case 3:
CCNN5[i].GRESULT=10;
break;
case 4:
CCNN5[i].GRESULT=6;
break;
case 5:
CCNN5[i].GRESULT=11;
break;
}
}
for (int i = 0; i < CN5; i++)
{
MemRdWt.WriteTable(itable1, i+1, &CCNN5[i]);
}
for (int i = 0; i < CN5; i++)
{
switch(CCNN5[i].GRESULT)
{
case 7:
CCNN5[i].GRESULT=12;
break;
case 8:
CCNN5[i].GRESULT=12;
break;
case 9:
CCNN5[i].GRESULT=13;
break;
case 10:
{
float cspr=0;
float cns=0;
for(int j = 0; j < FLE; j++)
{
if(FDEP[j]>=CCNN5[i].GSDEP&&FDEP[j]<=CCNN5[i].GEDEP)
{
cspr=cspr+FSPR[j];
cns++;
}
}
cspr=cspr/cns;
if(cspr>100-S2)
CCNN5[i].GRESULT=15;
else
CCNN5[i].GRESULT=14;
break;
}
case 6:
CCNN5[i].GRESULT=15;
break;
case 11:
CCNN5[i].GRESULT=15;
break;
}
}
GUJING *CCNN6=new GUJING[CN5];
int CN6=1;
CCNN6[0]=CCNN5[0];
CCNN6[0].GNO=1;
for (int i = 0; i < CN5-1; i++)
{
if(CCNN5[i].GRESULT==CCNN5[i+1].GRESULT)
{
CCNN6[CN6-1].GEDEP=CCNN5[i+1].GEDEP;
}
else
{
CCNN6[CN6]=CCNN5[i+1];
CCNN6[CN6].GNO=CN6+1;
CN6++;
}
}
for (int i = 0; i < CN6; i++)
{
MemRdWt.WriteTable(itable2, i+1, &CCNN6[i]);
}
// 姦렴땡檄롸토돨코닸
delete[] CCNN1;
delete[] CCNN2;
delete[] CCNN3;
delete[] CCNN4;
delete[] CCNN5;
delete[] CCNN6;
delete[] fdpr;
for (int i = 0; i < segmentCount; ++i) {
delete[] segments[i]; // 姦렴첼몸뙈돨땡檄鑒莉
}
delete[] segments; // 姦렴닸뇨뙈寧濾鑒莉
delete[] segmentLengths; // 姦렴뙈낀똑鑒莉
delete[] segmentAverages; // 姦렴틱엇令鑒莉
delete[] segmentGAverages;
delete[] FDEP;
delete[] FSPR;
delete[] FGPR;
#pragma region 왕쇌姦렴
for(int _ii = 0; _ii< 36; _ii++)
{
delete []N2D[_ii];
}delete []N2D;
for(int _ii = 0; _ii < 36; _ii++)
{
delete []F2D[_ii];
}delete []F2D;
for(int _ii = 0; _ii < 72; _ii++)
{
delete []R2D[_ii];
}delete []R2D;
for(int _ii = 0; _ii < 72; _ii++)
{
delete []RR2D[_ii];
}delete []RR2D;
//쐤
for(int _ii = 0; _ii < 36; _ii++)
{
delete []N_hx_abs[_ii];
}delete []N_hx_abs;
for(int _ii = 0; _ii < 36; _ii++)
{
delete []F_hx_abs[_ii];
}delete []F_hx_abs;
//묾驪
for (int _ii = 0; _ii < 36; _ii++)
{
delete[]R_hx_group[_ii];
}delete[]R_hx_group;
for(int _ii = 0; _ii < 72; _ii++)
{
delete []R_hx_abs[_ii];
}delete []R_hx_abs;
for(int _ii = 0; _ii < 72; _ii++)
{
delete []R_XX_abs[_ii];
}delete []R_XX_abs;
for (int _ii = 0; _ii < 36; _ii++)
{
delete[]F_lb[_ii];
}delete[]F_lb;
#pragma endregion
/*N2D = nullptr;
F2D = nullptr;
R2D = nullptr;
RR2D = nullptr;
N_hx_abs = nullptr;
F_hx_abs = nullptr;
R_hx_group = nullptr;
R_hx_abs = nullptr;
R_XX_abs = nullptr;
F_lb = nullptr; */
cout << "The run time is: " << (float)clock() / CLOCKS_PER_SEC << "s" << endl;
return 1;
}