00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
#include <stdio.h>
00037
#include <math.h>
00038
#include "idvol.h"
00039
#include "iderr.h"
00040
#include "idprint.h"
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082 #define CC(t1) maxi = (double) ((t1)vol)[0][0][X]; \
00083
for (i=0;i<Z;i++) for (j=0;j<Y;j++) \
00084
{ \
00085
if (((t1)vol)[i][j][X]>maxi) \
00086
maxi = (double) ((t1)vol)[i][j][X]; \
00087
}
00088
00089 double IdVolMaxPlanX(PPPVOLUME vol,
int X)
00090 {
00091
double maxi;
00092
int i, j, Y, Z;
00093
00094 Z =
IdVolDimZ(vol);
00095 Y =
IdVolDimY(vol);
00096
switch (
IdVolType(vol)) {
00097
case VOL_CHAR:
00098
CC(
PPPVOLUME_CHAR);
00099
break;
00100
case VOL_UCHAR:
00101
CC(
PPPVOLUME_UCHAR);
00102
break;
00103
case VOL_SHORT:
00104
CC(
PPPVOLUME_SHORT);
00105
break;
00106
case VOL_USHORT:
00107
CC(
PPPVOLUME_USHORT);
00108
break;
00109
case VOL_LONG:
00110
CC(
PPPVOLUME_LONG);
00111
break;
00112
case VOL_FLOAT:
00113
CC(
PPPVOLUME_FLOAT);
00114
break;
00115
case VOL_DOUBLE:
00116
CC(
PPPVOLUME_DOUBLE);
00117
break;
00118
default:
00119
IdErrPrintf
00120 (
"Type %d non traitable par la fonction IdVolMaxPlanX !\n",
00121
IdVolType(vol));
00122
00123
return (0);
00124 }
00125
00126
return (maxi);
00127 }
00128
00129
00130
00131
00132
00133
00134
00135
00136
00137
00138
00139
00140
00141
00142
00143
00144
00145
00146
00147
00148
00149
00150
00151
00152
00153
00154
00155
00156
00157
00158
00159
00160
00161
00162
00163 #define DD(t1) maxi = (double) ((t1)vol)[0][Y][0]; \
00164
for (i=0;i<Z;i++) for (k=0;k<X;k++) \
00165
{ \
00166
if (((t1)vol)[i][Y][k]>maxi) \
00167
maxi = (double) ((t1)vol)[i][Y][k]; \
00168
}
00169
00170 double IdVolMaxPlanY(PPPVOLUME vol,
int Y)
00171 {
00172
double maxi;
00173
int i, k, X, Z;
00174
00175 X =
IdVolDimX(vol);
00176 Z =
IdVolDimZ(vol);
00177
switch (
IdVolType(vol)) {
00178
case VOL_CHAR:
00179
DD(
PPPVOLUME_CHAR);
00180
break;
00181
case VOL_UCHAR:
00182
DD(
PPPVOLUME_UCHAR);
00183
break;
00184
case VOL_SHORT:
00185
DD(
PPPVOLUME_SHORT);
00186
break;
00187
case VOL_USHORT:
00188
DD(
PPPVOLUME_USHORT);
00189
break;
00190
case VOL_LONG:
00191
DD(
PPPVOLUME_LONG);
00192
break;
00193
case VOL_FLOAT:
00194
DD(
PPPVOLUME_FLOAT);
00195
break;
00196
case VOL_DOUBLE:
00197
DD(
PPPVOLUME_DOUBLE);
00198
break;
00199
default:
00200
IdErrPrintf
00201 (
"Type %d non traitable par la fonction IdVolMaxPlanY !\n",
00202
IdVolType(vol));
00203
IdErrno =
IDERR_WRONG_LIBTYPE;
00204
return (0);
00205 }
00206
00207
return (maxi);
00208 }
00209
00210
00211
00212
00213
00214
00215
00216
00217
00218
00219
00220
00221
00222
00223
00224
00225
00226
00227
00228
00229
00230
00231
00232
00233
00234
00235
00236
00237
00238
00239
00240
00241
00242
00243
00244 #define EE(t1) maxi = (double) ((t1)vol)[Z][0][0]; \
00245
for (j=0;j<Y;j++) for (k=0;k<X;k++) \
00246
{ \
00247
if (((t1)vol)[Z][j][k]>maxi) \
00248
maxi = (double) ((t1)vol)[Z][j][k]; \
00249
}
00250
00251 double IdVolMaxPlanZ(PPPVOLUME vol,
int Z)
00252 {
00253
double maxi;
00254
int j, k, X, Y;
00255
00256 X =
IdVolDimX(vol);
00257 Y =
IdVolDimY(vol);
00258
switch (
IdVolType(vol)) {
00259
case VOL_CHAR:
00260
EE(
PPPVOLUME_CHAR);
00261
break;
00262
case VOL_UCHAR:
00263
EE(
PPPVOLUME_UCHAR);
00264
break;
00265
case VOL_SHORT:
00266
EE(
PPPVOLUME_SHORT);
00267
break;
00268
case VOL_USHORT:
00269
EE(
PPPVOLUME_USHORT);
00270
break;
00271
case VOL_LONG:
00272
EE(
PPPVOLUME_LONG);
00273
break;
00274
case VOL_FLOAT:
00275
EE(
PPPVOLUME_FLOAT);
00276
break;
00277
case VOL_DOUBLE:
00278
EE(
PPPVOLUME_DOUBLE);
00279
break;
00280
default:
00281
IdErrPrintf
00282 (
"Type %d non traitable par la fonction IdVolMaxPlanZ !\n",
00283
IdVolType(vol));
00284
IdErrno =
IDERR_WRONG_LIBTYPE;
00285
return (0);
00286 }
00287
00288
00289
00290
return (maxi);
00291 }
00292
00293
00294
00295
00296
00297
00298
00299
00300
00301
00302
00303
00304
00305
00306
00307
00308
00309
00310
00311
00312
00313
00314
00315
00316
00317
00318
00319
00320
00321
00322
00323
00324 #define FF(t1) maxi = (double) ((t1)vol)[0][0][0]; \
00325
for (t=0;t<Z;t++) for (i=0;i<Y;i++) for (j=0;j<X;j++) \
00326
{ \
00327
if (((t1)vol)[t][i][j]>maxi) \
00328
maxi = (double) ((t1)vol)[t][i][j]; \
00329
}
00330
00331
00332 double IdVolMaxima(PPPVOLUME vol)
00333 {
00334
double maxi;
00335
int i, j, t, X, Y, Z;
00336
00337 X =
IdVolDimX(vol);
00338 Y =
IdVolDimY(vol);
00339 Z =
IdVolDimZ(vol);
00340
switch (
IdVolType(vol)) {
00341
case VOL_CHAR:
00342
FF(
PPPVOLUME_CHAR);
00343
break;
00344
case VOL_UCHAR:
00345
FF(
PPPVOLUME_UCHAR);
00346
break;
00347
case VOL_SHORT:
00348
FF(
PPPVOLUME_SHORT);
00349
break;
00350
case VOL_USHORT:
00351
FF(
PPPVOLUME_USHORT);
00352
break;
00353
case VOL_LONG:
00354
FF(
PPPVOLUME_LONG);
00355
break;
00356
case VOL_FLOAT:
00357
FF(
PPPVOLUME_FLOAT);
00358
break;
00359
case VOL_DOUBLE:
00360
FF(
PPPVOLUME_DOUBLE);
00361
break;
00362
default:
00363
IdErrPrintf
00364 (
"Type %d non traitable par la fonction IdVolMaxima !\n",
00365
IdVolType(vol));
00366
IdErrno =
IDERR_WRONG_LIBTYPE;
00367
return (0);
00368 }
00369
00370
return (maxi);
00371 }
00372
00373
00374
00375
00376
00377
00378
00379
00380
00381
00382
00383
00384
00385
00386
00387
00388
00389
00390
00391
00392
00393
00394
00395
00396
00397
00398
00399
00400
00401
00402 #define HH(t1) for (t=0;t<Z;t++) for (i=0;i<Y;i++) for (j=0;j<X;j++) \
00403
{ \
00404
moy += (double) ((t1)vol)[t][i][j]; \
00405
}
00406
00407
00408 double IdVolMoyenne(PPPVOLUME vol)
00409 {
00410
double moy;
00411
int i, j, t, X, Y, Z;
00412
00413 X =
IdVolDimX(vol);
00414 Y =
IdVolDimY(vol);
00415 Z =
IdVolDimZ(vol);
00416
00417 moy = 0.0;
00418
00419
switch (
IdVolType(vol)) {
00420
case VOL_CHAR:
00421
HH(
PPPVOLUME_CHAR);
00422
break;
00423
case VOL_UCHAR:
00424
HH(
PPPVOLUME_UCHAR);
00425
break;
00426
case VOL_SHORT:
00427
HH(
PPPVOLUME_SHORT);
00428
break;
00429
case VOL_USHORT:
00430
HH(
PPPVOLUME_USHORT);
00431
break;
00432
case VOL_LONG:
00433
HH(
PPPVOLUME_LONG);
00434
break;
00435
case VOL_FLOAT:
00436
HH(
PPPVOLUME_FLOAT);
00437
break;
00438
case VOL_DOUBLE:
00439
HH(
PPPVOLUME_DOUBLE);
00440
break;
00441
default:
00442
IdErrPrintf
00443 (
"Type %d non traitable par la fonction IdVolMoyenne !\n",
00444
IdVolType(vol));
00445
IdErrno =
IDERR_WRONG_LIBTYPE;
00446
return (0);
00447 }
00448
00449 moy = moy / ((
double) X * (
double) Y * (
double) Z);
00450
00451
return (moy);
00452 }
00453
00454
00455
00456
00457
00458
00459
00460
00461
00462
00463
00464
00465
00466
00467
00468
00469
00470
00471
00472
00473
00474
00475
00476
00477
00478
00479
00480
00481
00482
00483 #define II(t1) \
00484
for (t=0;t<Z;t++) for (i=0;i<Y;i++) for (j=0;j<X;j++) \
00485
var += pow((moy - ((t1)vol)[t][i][j]),2.0);
00486
00487
00488 double IdVolVariance(PPPVOLUME vol)
00489 {
00490
double moy, var;
00491
int i, j, t, X, Y, Z;
00492
00493 X =
IdVolDimX(vol);
00494 Y =
IdVolDimY(vol);
00495 Z =
IdVolDimZ(vol);
00496
00497 moy =
IdVolMoyenne(vol);
00498 var = 0.0;
00499
00500
switch (
IdVolType(vol)) {
00501
case VOL_CHAR:
00502
II(
PPPVOLUME_CHAR);
00503
break;
00504
case VOL_UCHAR:
00505
II(
PPPVOLUME_UCHAR);
00506
break;
00507
case VOL_SHORT:
00508
II(
PPPVOLUME_SHORT);
00509
break;
00510
case VOL_USHORT:
00511
II(
PPPVOLUME_USHORT);
00512
break;
00513
case VOL_LONG:
00514
II(
PPPVOLUME_LONG);
00515
break;
00516
case VOL_FLOAT:
00517
II(
PPPVOLUME_FLOAT);
00518
break;
00519
case VOL_DOUBLE:
00520
II(
PPPVOLUME_DOUBLE);
00521
break;
00522
default:
00523
IdErrPrintf
00524 (
"Type %d non traitable par la fonction IdVolVariance !\n",
00525
IdVolType(vol));
00526
IdErrno =
IDERR_WRONG_LIBTYPE;
00527
return (0);
00528 }
00529
00530 var = var / ((
double) X * (
double) Y * (
double) Z);
00531
00532
return (var);
00533 }
00534
00535
00536
00537
00538
00539
00540
00541
00542
00543
00544
00545
00546
00547
00548
00549
00550
00551
00552
00553
00554
00555
00556
00557
00558
00559
00560
00561
00562
00563
00564
00565
00566
00567
00568
00569
00570
00571
00572
00573
00574
00575 #define JJ(t1) for (t=0;t<Z;t++) for (i=0;i<Y;i++) for (j=0;j<X;j++) \
00576
*moy += (double) ((t1)vol)[t][i][j]; \
00577
*moy = *moy /((double)X*(double)Y*(double)Z); \
00578
for (t=0;t<Z;t++) for (i=0;i<Y;i++) for (j=0;j<X;j++) \
00579
*var += pow((*moy - ((t1)vol)[t][i][j]),2.0);
00580
00581
00582 int IdVolMoyVar(PPPVOLUME vol,
double *moy,
double *var)
00583 {
00584
int i, j, t, X, Y, Z;
00585
00586 X =
IdVolDimX(vol);
00587 Y =
IdVolDimY(vol);
00588 Z =
IdVolDimZ(vol);
00589
00590 *moy = 0.0;
00591 *var = 0.0;
00592
00593
switch (
IdVolType(vol)) {
00594
case VOL_CHAR:
00595
JJ(
PPPVOLUME_CHAR);
00596
break;
00597
case VOL_UCHAR:
00598
JJ(
PPPVOLUME_UCHAR);
00599
break;
00600
case VOL_SHORT:
00601
JJ(
PPPVOLUME_SHORT);
00602
break;
00603
case VOL_USHORT:
00604
JJ(
PPPVOLUME_USHORT);
00605
break;
00606
case VOL_LONG:
00607
JJ(
PPPVOLUME_LONG);
00608
break;
00609
case VOL_FLOAT:
00610
JJ(
PPPVOLUME_FLOAT);
00611
break;
00612
case VOL_DOUBLE:
00613
JJ(
PPPVOLUME_DOUBLE);
00614
break;
00615
default:
00616
IdErrPrintf
00617 (
"Type %d non traitable par la fonction IdVolMoyVar !\n",
00618
IdVolType(vol));
00619
IdErrno =
IDERR_WRONG_LIBTYPE;
00620
return (0);
00621 }
00622
00623 *var = *var / ((
double) X * (
double) Y * (
double) Z);
00624
00625
return (1);
00626 }
00627
00636 int IdVolMinMax(PPPVOLUME vol,
double *mini,
double *maxi)
00637 {
00638
#define GG(t1) *mini = *maxi = (double) ((t1)vol)[0][0][0]; \
00639
for (t=0;t<Z;t++) for (i=0;i<Y;i++) for (j=0;j<X;j++) \
00640
{ \
00641
if (((t1)vol)[t][i][j]>*maxi) \
00642
*maxi = (double) ((t1)vol)[t][i][j]; \
00643
if (((t1)vol)[t][i][j]<*mini) \
00644
*mini = (double) ((t1)vol)[t][i][j]; \
00645
}
00646
00647
int i, j, t, X, Y, Z;
00648
00649 X =
IdVolDimX(vol);
00650 Y =
IdVolDimY(vol);
00651 Z =
IdVolDimZ(vol);
00652
00653
switch (
IdVolType(vol)) {
00654
case VOL_CHAR:
00655
GG(
PPPVOLUME_CHAR);
00656
break;
00657
case VOL_UCHAR:
00658
GG(
PPPVOLUME_UCHAR);
00659
break;
00660
case VOL_SHORT:
00661
GG(
PPPVOLUME_SHORT);
00662
break;
00663
case VOL_USHORT:
00664
GG(
PPPVOLUME_USHORT);
00665
break;
00666
case VOL_LONG:
00667
GG(
PPPVOLUME_LONG);
00668
break;
00669
case VOL_FLOAT:
00670
GG(
PPPVOLUME_FLOAT);
00671
break;
00672
case VOL_DOUBLE:
00673
GG(
PPPVOLUME_DOUBLE);
00674
break;
00675
default:
00676
IdErrPrintf
00677 (
"Type %d non traitable par la fonction IdVolMinMax !\n",
00678
IdVolType(vol));
00679
IdErrno =
IDERR_WRONG_LIBTYPE;
00680
return (0);
00681 }
00682
00683
return (1);
00684 }