46 int nr, ni, no, xi, yi, i, j;
47 double dx[5], dy[5], v, d;
51 printf(
"%s(img, %d, %d, %g, %g, %g, %g, %g, %g, %g, %d)\n",
52 __func__, fi, zi, cx, cy, r1, r2, vr, vi, vo, verbose);
53 if(r1>=r2 || r1<0.0) {
54 if(verbose>0) fprintf(stderr,
"Error: invalid radius.\n");
59 if(zi<0 || zi>=img->
dimz)
return(2);
60 if(img->
sizey<=0.0 || img->
sizex<=0.0)
return(3);
62 if(img->
dimt<1 || fi>=img->
dimt)
return(5);
63 if(r1<0.0 || r2<r1)
return(6);
67 for(yi=0; yi<img->
dimy; yi++) {
68 dy[0]=(0.1+(double)yi)*img->
sizey - cy;
69 for(j=1; j<5; j++) dy[j]=dy[j-1]+0.2*img->
sizey;
70 for(xi=0; xi<img->
dimx; xi++) {
71 dx[0]=(0.1+(double)xi)*img->
sizex - cx;
72 for(i=1; i<5; i++) dx[i]=dx[i-1]+0.2*img->
sizex;
74 for(i=0; i<5; i++)
for(j=0; j<5; j++) {
75 d=dx[i]*dx[i]+dy[j]*dy[j];
76 if(d<ri2) ni++;
else if(d<ro2) nr++;
else no++;
79 v+=(double)ni*vi/25.0;
80 v+=(double)no*vo/25.0;
81 img->
m[zi][yi][xi][fi]+=v;
112 double rfract[10]={1.0, 0.6, 0.25, 0.0, 0.1, 0.25, 0.6, 0.8, 0.9, 0.95};
115 if(dft==NULL)
return(1);
117 if(maxdiam<mindiam)
return(1);
123 if(hbr>0.0) hbr/=60.0;
else hbr=0.0;
126 if(hbr>0.0 && (t2-t1)>0.0) n=10.0*(t2-t1)/hbr;
else n=1;
129 ret=
dftSetmem(dft, n, 1);
if(ret!=0)
return(3);
134 dft->
x1[0]=t1;
if(hbr>0.0) s=0.1*hbr;
else s=t2-t1;
135 for(i=n=0; i<dft->
frameNr; i++) {
136 if(i>0) dft->
x1[i]=dft->
x2[i-1];
137 dft->
x2[i]=dft->
x1[i]+s; dft->
x[i]=0.5*(dft->
x1[i]+dft->
x2[i]);
138 dft->
voi[0].
y[i]=mindiam+rfract[n]*(maxdiam-mindiam); n++;
if(n==10) n=0;
183 int nr, ni, no, xi, yi, zi, i, j, k;
184 double dx[5], dy[5], dz[5], v, d;
188 printf(
"%s(img, %d, %g, %g, %g, %g, %g, %g, %g, %g, %d)\n",
189 __func__, fi, cx, cy, cz, r1, r2, vr, vi, vo, verbose);
190 if(r1>=r2 || r1<0.0) {
191 if(verbose>0) fprintf(stderr,
"Error: invalid radius.\n");
198 if(img->
dimt<1 || fi>=img->
dimt)
return(4);
199 if(r1<0.0 || r2<r1)
return(5);
202 ri2=r1*r1; ro2=r2*r2;
203 for(zi=0; zi<img->
dimz; zi++) {
204 dz[0]=(0.1+(double)zi)*img->
sizez - cz;
205 for(k=1; k<5; k++) dz[k]=dz[k-1]+0.2*img->
sizez;
206 for(yi=0; yi<img->
dimy; yi++) {
207 dy[0]=(0.1+(double)yi)*img->
sizey - cy;
208 for(j=1; j<5; j++) dy[j]=dy[j-1]+0.2*img->
sizey;
209 for(xi=0; xi<img->
dimx; xi++) {
210 dx[0]=(0.1+(double)xi)*img->
sizex - cx;
211 for(i=1; i<5; i++) dx[i]=dx[i-1]+0.2*img->
sizex;
213 for(i=0; i<5; i++)
for(j=0; j<5; j++)
for(k=0; k<5; k++) {
214 d=dx[i]*dx[i]+dy[j]*dy[j]+dz[k]*dz[k];
215 if(d<ri2) ni++;
else if(d<ro2) nr++;
else no++;
217 v=(double)nr*vr/125.0;
218 v+=(double)ni*vi/125.0;
219 v+=(double)no*vo/125.0;
220 img->
m[zi][yi][xi][fi]+=v;
int imgSimulateSphere(IMG *img, int fi, double cx, double cy, double cz, double r1, double r2, double vr, double vi, double vo, int verbose)
int imgSimulateRing(IMG *img, int fi, int zi, double cx, double cy, double r1, double r2, double vr, double vi, double vo, int verbose)
int simMyocDiameterCurve(DFT *dft, double t1, double t2, double hbr, double maxdiam, double mindiam)