From b8a6cf4e6ea77243dedcb51038eb9302bf433e3e Mon Sep 17 00:00:00 2001 From: KenanZhu111 <3471685733@qq.com> Date: Mon, 23 Sep 2024 09:59:40 +0800 Subject: [PATCH] modified the crash --- blh2enu.h | 15 +++++++-------- cal_mod.h | 53 ++++++++++++++++++++++++----------------------------- deg2dms.h | 17 ++++++++--------- main.exe | Bin 103430 -> 103075 bytes rahcal.h | 21 ++++++++++----------- xyz2blh.h | 11 +++++------ 6 files changed, 54 insertions(+), 63 deletions(-) diff --git a/blh2enu.h b/blh2enu.h index 51fb08f..5690b96 100644 --- a/blh2enu.h +++ b/blh2enu.h @@ -9,7 +9,7 @@ typedef struct double E; double N; double U; -}blh2enu, *pblh2enu; +}blh2enu; /* -------------------------------------------------------------------------- */ /// @brief 将大地高坐标转换为站心坐标 @@ -21,18 +21,17 @@ typedef struct /// @param deltaz 卫星到站心的z坐标差值 /// @return 返回自定义结构体类型包含E, N, U成员 /* -------------------------------------------------------------------------- */ -pblh2enu BLH2ENU(pblh2enu blh2enu, - double stationB, double stationL, - double deltax, double deltay, double deltaz) +blh2enu BLH2ENU(blh2enu blh2enu, + double stationB, double stationL, + double deltax, double deltay, double deltaz) { double sinB = sin(stationB); double cosB = cos(stationB); double sinL = sin(stationL); double cosL = cos(stationL); - blh2enu = (pblh2enu)malloc(sizeof(pblh2enu)); - blh2enu->E = - sinL*(deltax) + cosL*(deltay); - blh2enu->N = -sinB*cosL*(deltax) - sinB*sinL*(deltay) + cosB*(deltaz); - blh2enu->U = cosB*cosL*(deltax) + cosB*sinL*(deltay) + sinB*(deltaz); + blh2enu.E = - sinL*(deltax) + cosL*(deltay); + blh2enu.N = -sinB*cosL*(deltax) - sinB*sinL*(deltay) + cosB*(deltaz); + blh2enu.U = cosB*cosL*(deltax) + cosB*sinL*(deltay) + sinB*(deltaz); return blh2enu; } diff --git a/cal_mod.h b/cal_mod.h index 3de02b1..61b8bc5 100644 --- a/cal_mod.h +++ b/cal_mod.h @@ -69,22 +69,17 @@ int sat_gps_pos_clac(FILE * result_file, int o_epochnum, int gps_satnum) { int progress = 0; int count = 0; - pxyz2blh tem1 = NULL; - pxyz2blh tem2 = NULL; - pblh2enu tem3 = NULL; - prahcal tem4 = NULL; - pdeg2dms temb = NULL; - pdeg2dms teml = NULL; + xyz2blh tem1 = {0}; + xyz2blh tem2 = {0}; + blh2enu tem3 = {0}; + rahcal tem4 = {0}; + deg2dms temb = {0}; + deg2dms teml = {0}; blh = (pblh)malloc(sizeof(pblh) * o_epochnum* 256); enu = (penu)malloc(sizeof(penu) * o_epochnum* 256); rah = (prah)malloc(sizeof(prah) * o_epochnum* 256); pos_t = (ppos_t)malloc(sizeof(ppos_t) * o_epochnum* 256); station = (pstation)malloc(sizeof(pstation) * o_epochnum* 256); - tem1 = (pxyz2blh)malloc(sizeof(pxyz2blh)* 512); - tem2 = (pxyz2blh)malloc(sizeof(pxyz2blh)* 512); - tem3 = (pblh2enu)malloc(sizeof(pblh2enu)* 512); - temb = (pdeg2dms)malloc(sizeof(pdeg2dms)* 512); - teml = (pdeg2dms)malloc(sizeof(pdeg2dms)* 512); for (int i = 0; i < o_epochnum; i++)//第i个历元 { result_file = fopen(".\\Pos_out\\LLA_result_for_read.txt", "a+"); @@ -123,14 +118,14 @@ int sat_gps_pos_clac(FILE * result_file, /* ----------------------------- 地固坐标系转经纬大地高坐标系 ----------------------------- */ tem1 = XYZ2BLH( tem1, pos_t[i].X[sPRN], pos_t[i].Y[sPRN], pos_t[i].Z[sPRN]); - blh->B = rad2deg(tem1->B); - blh->L = rad2deg(tem1->L); - blh->H = tem1->H; + blh->B = rad2deg(tem1.B); + blh->L = rad2deg(tem1.L); + blh->H = tem1.H; tem2 = XYZ2BLH( tem2, obs_h->apX, obs_h->apY, obs_h->apZ); - station->B = tem2->B; - station->L = tem2->L; - station->H = tem2->H; + station->B = tem2.B; + station->L = tem2.L; + station->H = tem2.H; /* -------------------------------------------------------------------------- */ /* ----------------------------- 经纬大地高坐标系转站心坐标系 ----------------------------- */ @@ -139,16 +134,16 @@ int sat_gps_pos_clac(FILE * result_file, double deltaz = pos_t[i].Z[sPRN] - obs_h->apZ; tem3 = BLH2ENU(tem3, station->B, station->L, deltax, deltay, deltaz); - enu->E = tem3->E; - enu->N = tem3->N; - enu->U = tem3->U; + enu->E = tem3.E; + enu->N = tem3.N; + enu->U = tem3.U; /* -------------------------------------------------------------------------- */ /* ---------------------------- 卫星方位角a,高度角h,向径r计算 --------------------------- */ tem4 = RAHCAL(tem4, enu->E, enu->N, enu->U); - rah->R = tem4->R; - rah->A = rad2deg(tem4->A); - rah->H = rad2deg(tem4->H); + rah->R = tem4.R; + rah->A = rad2deg(tem4.A); + rah->H = rad2deg(tem4.H); /* -------------------------------------------------------------------------- */ if (blh->H < 0 || nav_b[best_epoch].sHEA != 0) { @@ -157,14 +152,14 @@ int sat_gps_pos_clac(FILE * result_file, else { temb = DEG2DMS(temb, blh->B); - blh->B_d = temb->D; - blh->B_m = temb->M; - blh->B_s = temb->S; + blh->B_d = temb.D; + blh->B_m = temb.M; + blh->B_s = temb.S; teml = DEG2DMS(teml, blh->L); - blh->L_d = teml->D; - blh->L_m = teml->M; - blh->L_s = teml->S; + blh->L_d = teml.D; + blh->L_m = teml.M; + blh->L_s = teml.S; result_file = fopen(".\\Pos_out\\LLA_result_for_read.txt", "a+"); fprintf(result_file, "\nG%02d[sPRN] %4d° %02d′ %02d″ %4d° %02d′ %02d″ %15.05f",sPRN, blh->B_d, blh->B_m, blh->B_s, blh->L_d, blh->L_m, blh->L_s, blh->H); diff --git a/deg2dms.h b/deg2dms.h index 203ebb7..87a8f1c 100644 --- a/deg2dms.h +++ b/deg2dms.h @@ -9,7 +9,7 @@ typedef struct double D; double M; double S; -}deg2dms, *pdeg2dms; +}deg2dms; /* -------------------------------------------------------------------------- */ /// @brief 将十进制的度数转换为度分秒形式 @@ -17,16 +17,15 @@ typedef struct /// @param D 要转换度数 /// @return 返回自定义结构体包含度,分,秒成员 /* -------------------------------------------------------------------------- */ -pdeg2dms DEG2DMS(pdeg2dms deg2dms, - double D) +deg2dms DEG2DMS(deg2dms deg2dms, + double D) { - deg2dms = (pdeg2dms)malloc(sizeof(pdeg2dms)); int sig = D / fabs(D);//符号判断 - deg2dms->D = (int)(D);//转换为度分秒 - deg2dms->M = (int)((D - deg2dms->D) * 60);//分秒去除符号格式 - deg2dms->S = (int)(((D - deg2dms->D) * 60 - deg2dms->M) * 60); - deg2dms->M = deg2dms->M * sig; - deg2dms->S = deg2dms->S * sig; + deg2dms.D = (int)(D);//转换为度分秒 + deg2dms.M = (int)((D - deg2dms.D) * 60);//分秒去除符号格式 + deg2dms.S = (int)(((D - deg2dms.D) * 60 - deg2dms.M) * 60); + deg2dms.M = deg2dms.M * sig; + deg2dms.S = deg2dms.S * sig; return deg2dms; } diff --git a/main.exe b/main.exe index 0a5c0cd17c74c4bfb9aca792eaa9d060ebddbb86..47993076fd7c1e94d7f53f3d4408e456d28764a0 100644 GIT binary patch delta 32818 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 U_w&$Blk delta 32577 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 MpvPZoWpDWXA9?EN*8l(j diff --git a/rahcal.h b/rahcal.h index 7366ea0..806f8a3 100644 --- a/rahcal.h +++ b/rahcal.h @@ -11,7 +11,7 @@ typedef struct double R; double A; double H; -}rahcal, *prahcal; +}rahcal; /* -------------------------------------------------------------------------- */ /// @brief 计算站心坐标系下的卫星高度方位角 @@ -21,17 +21,16 @@ typedef struct /// @param U 站心坐标天 /// @return 返回自定义结构体变量包含R, A, H成员 /* -------------------------------------------------------------------------- */ -prahcal RAHCAL(prahcal rahcal, - double E, double N, double U) +rahcal RAHCAL(rahcal rahcal, + double E, double N, double U) { - rahcal = (prahcal)malloc(sizeof(prahcal)); - rahcal->H = atan2(U, sqrt(E * E + N * N)); - rahcal->A = atan2(E, U); - if (rahcal->A < 0) - rahcal->A += 2 * PI; - if (rahcal->A > 2 * PI) - rahcal->A -= 2 * PI; - rahcal->R = sqrt(E * E + N * N + U * U); + rahcal.H = atan2(U, sqrt(E * E + N * N)); + rahcal.A = atan2(E, U); + if (rahcal.A < 0) + rahcal.A += 2 * PI; + if (rahcal.A > 2 * PI) + rahcal.A -= 2 * PI; + rahcal.R = sqrt(E * E + N * N + U * U); return rahcal; } diff --git a/xyz2blh.h b/xyz2blh.h index ee8e281..924f471 100644 --- a/xyz2blh.h +++ b/xyz2blh.h @@ -11,7 +11,7 @@ typedef struct double B; double L; double H; -}xyz2blh, *pxyz2blh; +}xyz2blh; /* -------------------------------------------------------------------------- */ /// @brief 将ECEF地心地固坐标转换为经纬高坐标 @@ -23,16 +23,15 @@ typedef struct /// @param e2 椭球的第一偏心率平方 /// @return 返回自定义结构体类型包含B,L,H成员 /* -------------------------------------------------------------------------- */ -pxyz2blh XYZ2BLH(pxyz2blh xyz2blh, +xyz2blh XYZ2BLH(xyz2blh xyz2blh, double X, double Y, double Z) { - xyz2blh = (pxyz2blh)malloc(sizeof(pxyz2blh)); double B = 0.0, N = 0.0, H = 0.0, R0, R1, deltaH, deltaB; R0 = sqrt(pow(X, 2) + pow(Y, 2)); R1 = sqrt(pow(X, 2) + pow(Y, 2) + pow(Z, 2)); //经度直接求解 - xyz2blh->L = atan2(Y, X); + xyz2blh.L = atan2(Y, X); //迭代求大地维度和大地高 N = a; H = R1 - a; @@ -45,8 +44,8 @@ pxyz2blh XYZ2BLH(pxyz2blh xyz2blh, H = R0 / cos(B) - N; B = atan2(Z * (N + H), R0 * (N * (1 - e2) + H)); } while (fabs(deltaH - H) > 1.0e-3 && fabs(deltaB - B) > 1.0e-9); - xyz2blh->B = B; - xyz2blh->H = H; + xyz2blh.B = B; + xyz2blh.H = H; return xyz2blh; }