📄 likelihood_power2.c
字号:
rpath1[2 + id] = Phiti[2];
rpath1[3 + id] = i;
rpath1[4 + id] = 1.0;
}
if(nr > 1)
{
for(j = 0 ; j < nplanes ; j++)
{
if (j != i)
{
fct_calimage(TX_i , planes , j , TX_j);
rflagj = fct_calrpt(TX_j, RX, planes , j , Phitj);
if (rflagj == true)
{
rflagij = fct_calrpt(TX_i, Phitj, planes , i , Phitij);
if(rflagij == true)
{
jd = npath2*10;
npath2++;
rpath2 = (double *)mxRealloc((double *)rpath2 , (jd + 10)*sizeof(double));
rpath2[0 + jd] = Phitij[0];
rpath2[1 + jd] = Phitij[1];
rpath2[2 + jd] = Phitij[2];
rpath2[3 + jd] = i;
rpath2[4 + jd] = 1.0;
rpath2[5 + jd] = Phitj[0];
rpath2[6 + jd] = Phitj[1];
rpath2[7 + jd] = Phitj[2];
rpath2[8 + jd] = j;
rpath2[9 + jd] = 1.0;
}
}
if(nr > 2)
{
for (k = 0 ; k < nplanes ; k++)
{
if(k != j)
{
fct_calimage(TX_j , planes , k , TX_k);
rflagk = fct_calrpt(TX_k, RX, planes , k , Phitk);
if(rflagk == true)
{
rflagjk = fct_calrpt(TX_j, Phitk, planes , j , Phitjk);
if(rflagjk == true)
{
rflagijk = fct_calrpt(TX_i, Phitjk, planes , i , Phitijk);
if(rflagijk == true)
{
kd = npath3*15;
npath3++;
rpath3 = (double *)mxRealloc((double *)rpath3 , (kd + 15)*sizeof(double));
rpath3[0 + kd] = Phitijk[0];
rpath3[1 + kd] = Phitijk[1];
rpath3[2 + kd] = Phitijk[2];
rpath3[3 + kd] = i;
rpath3[4 + kd] = 1.0;
rpath3[5 + kd] = Phitjk[0];
rpath3[6 + kd] = Phitjk[1];
rpath3[7 + kd] = Phitjk[2];
rpath3[8 + kd] = j;
rpath3[9 + kd] = 1.0;
rpath3[10 + kd] = Phitk[0];
rpath3[11 + kd] = Phitk[1];
rpath3[12 + kd] = Phitk[2];
rpath3[13 + kd] = k;
rpath3[14 + kd] = 1.0;
}
}
}
}
}
}
}
}
}
}
}
npath = npath1 + npath2 + npath3 + 1;
distance = mxMalloc(npath*sizeof(double));
lossfac = mxMalloc(npath*sizeof(double));
// Direct path (0 reflexion)
Thits0 = fct_caltpts(TX, RX , planes , nplanes , material , &tflag0 , Phit_nt);
nb_pts = (2+tflag0);
path0 = mxMalloc(nb_pts*5*sizeof(double));
path0[0] = TX[0];
path0[1] = TX[1];
path0[2] = TX[2];
path0[3] = 0.0;
path0[4] = 0.0;
indice = (tflag0 + 1)*5;
for(i = 5 ; i < indice; i++)
{
path0[i] = Thits0[i - 5];
}
path0[0 + indice] = RX[0];
path0[1 + indice] = RX[1];
path0[2 + indice] = RX[2];
path0[3 + indice] = 0.0;
path0[4 + indice] = 0.0;
compute_distloss(path0 , nb_pts , planes , material , fc , flp_scale , currentpath , distance , lossfac);
if(Thits0 !=NULL)
{
free(Thits0);
Thits0=NULL;
}
if(path0 !=NULL)
{
mxFree(path0);
path0=NULL;
}
// Path with 1 reflexion
for (i = 0 ; i < npath1 ; i++)
{
currentpath++;
id = i*5;
Phiti[0] = rpath1[0 + id];
Phiti[1] = rpath1[1 + id];
Phiti[2] = rpath1[2 + id];
Thits11 = fct_caltpts(TX, Phiti, planes , nplanes , material , &tflag11 , Phit_nt);
Thits12 = fct_caltpts(Phiti, RX, planes , nplanes , material , &tflag12 , Phit_nt);
nb_pts = (tflag11+tflag12+3);
path1 = mxMalloc(nb_pts*5*sizeof(double));
path1[0] = TX[0];
path1[1] = TX[1];
path1[2] = TX[2];
path1[3] = 0.0;
path1[4] = 0.0;
indice = (tflag11+1)*5;
for(j = 5 ; j < indice ; j++)
{
path1[j] = Thits11[j - 5];
}
path1[0 + indice] = Phiti[0];
path1[1 + indice] = Phiti[1];
path1[2 + indice] = Phiti[2];
path1[3 + indice] = rpath1[3 + id];
path1[4 + indice] = rpath1[4 + id];
ind = (tflag11+2)*5;
indice = (tflag11+tflag12+2)*5;
for(j = ind ; j < indice ; j++)
{
path1[j] = Thits12[j - ind];
}
path1[0 + indice] = RX[0];
path1[1 + indice] = RX[1];
path1[2 + indice] = RX[2];
path1[3 + indice] = 0.0;
path1[4 + indice] = 0.0;
compute_distloss(path1 , nb_pts , planes , material , fc , flp_scale , currentpath , distance , lossfac);
if(Thits11 !=NULL)
{
free(Thits11);
Thits11 = NULL;
}
if(Thits12 !=NULL)
{
free(Thits12);
Thits12 = NULL;
}
if(path1 !=NULL)
{
mxFree(path1);
path1 = NULL;
}
}
// Path with 2 reflexion
for (i = 0 ; i < npath2 ; i++)
{
currentpath++;
id = i*10;
Phitij[0] = rpath2[0 + id];
Phitij[1] = rpath2[1 + id];
Phitij[2] = rpath2[2 + id];
Phitj[0] = rpath2[5 + id];
Phitj[1] = rpath2[6 + id];
Phitj[2] = rpath2[7 + id];
Thits21 = fct_caltpts(TX, Phitij, planes , nplanes , material , &tflag21 , Phit_nt);
Thits22 = fct_caltpts(Phitij, Phitj, planes , nplanes , material , &tflag22 , Phit_nt);
Thits23 = fct_caltpts(Phitj, RX, planes , nplanes , material , &tflag23 , Phit_nt);
nb_pts = (tflag21+tflag22+tflag23+4);
path2 = mxMalloc(nb_pts*5*sizeof(double));
path2[0] = TX[0];
path2[1] = TX[1];
path2[2] = TX[2];
path2[3] = 0.0;
path2[4] = 0.0;
indice = (tflag21+1)*5;
for(j = 5 ; j < indice ; j++)
{
path2[j] = Thits21[j - 5];
}
path2[0 + indice] = Phitij[0];
path2[1 + indice] = Phitij[1];
path2[2 + indice] = Phitij[2];
path2[3 + indice] = rpath2[3 + id];
path2[4 + indice] = rpath2[4 + id];
ind = (tflag21+2)*5;
indice = (tflag21+tflag22 + 2)*5;
for(j = ind ; j < indice ; j++)
{
path2[j] = Thits22[j - ind];
}
path2[0 + indice] = Phitj[0];
path2[1 + indice] = Phitj[1];
path2[2 + indice] = Phitj[2];
path2[3 + indice] = rpath2[8 + id];
path2[4 + indice] = rpath2[9 + id];
ind = (tflag21+tflag22+3)*5;
indice = (tflag21+tflag22+tflag23+3)*5;
for(j = ind ; j < indice ; j++)
{
path2[j] = Thits23[j - ind];
}
path2[0 + indice] = RX[0];
path2[1 + indice] = RX[1];
path2[2 + indice] = RX[2];
path2[3 + indice] = 0.0;
path2[4 + indice] = 0.0;
compute_distloss(path2 , nb_pts , planes , material , fc , flp_scale , currentpath , distance , lossfac);
if(Thits21 !=NULL)
{
free(Thits21);
Thits21 = NULL;
}
if(Thits22 !=NULL)
{
free(Thits22);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -