Initial snark14m import
[snark14.git] / src / snark / foru_intrpl.cpp
1 /*
2  ***********************************************************
3  $SNARK_Header: S N A R K  1 4 - A PICTURE RECONSTRUCTION PROGRAM $
4  $HeadURL: svn://dig.cs.gc.cuny.edu/snark/trunk/src/snark/foru_intrpl.cpp $
5  $LastChangedRevision: 85 $
6  $Date: 2014-07-02 16:07:08 -0400 (Wed, 02 Jul 2014) $
7  $Author: agulati $
8  ***********************************************************
9
10
11  INTRPL: INTERPOLATION
12  PURPOSE: GIVEN TWO TRANSFORMED PROJECTIONS IN ARRAY STARTING AT
13  NOLD AND NEW WITH ANGLES ANG1 AND ANG2(DANG1 AND DANG2
14  ARE ANGLES IN DEGREE ) FIND ALL POINTS THAT LIE BETWEEN
15  THE TWO RAYS AND PERFORM INTERPOLATIONS
16  */
17
18 /*      
19  DETERMINE THE CASE:
20  ICASE = 1 IF THE TWO ANGLES LIE BETWEEN -90 AND -45
21  2 IF THE TWO ANGLES STRADDLE THE -45 DEGREE LINE
22  3 IF THE TWO ANLES LIE BETWEEN -45 AND 45 LINES
23  4 IF THE TWO ANGLES STRADDLE THE 45 DEGREE LINE
24  5 IF THE TWO ANGLES LIE BETWEEN THE 45 AND 90 LINES
25  6 IF ANG1 IS IN 1ST QUADRANT AND ANG2 IN 4TH QUADRANT
26  */
27
28 #include <cstdio>
29
30 #include "blkdta.h"
31 #include "geom.h"
32 #include "uiod.h"
33
34 #include "foru.h"
35
36 void foru_class::intrpl(REAL ang1, REAL ang2, REAL dang1, REAL dang2, REAL* nold, REAL* new1)
37 {
38         INTEGER icase;
39
40         if (dang2 <= -45.)
41                 icase = 1;
42         if ((dang1 < -45.) && (dang2 > -45.))
43                 icase = 2;
44         if ((dang1 >= -45.) && (dang2 <= 45.))
45                 icase = 3;
46         if ((dang1 < 45.) && (dang2 > 45.))
47                 icase = 4;
48         if (dang1 >= 45.)
49                 icase = 5;
50         if (dang1 > dang2)
51                 icase = 6;
52
53         // IF UNI THEN CALL THE INTERPOLATION ROUTINE UNIF
54         // IF VRI THEN CALL THE ROUTINE VCASE1,...,OR VC56 DEPENDING ON ICASE
55         if (!GeoPar.vri)
56         {
57                 unif(icase, ang1, ang2, nold, new1);
58
59                 return;
60         }
61         else
62         {
63                 switch (icase)
64                 {
65
66                 case 1:
67                         vcase1(ang1, ang2, nold, new1);
68                         return;
69
70                 case 2:
71                         vcase2(ang1, ang2, nold, new1);
72                         return;
73
74                 case 3:
75                         vcase3(ang1, ang2, nold, new1);
76                         return;
77
78                 case 4:
79                         vcase4(ang1, ang2, nold, new1);
80                         return;
81
82                 case 5:
83                 case 6:
84                         vc56(icase, ang1, ang2, nold, new1);
85                         return;
86                 }
87         }
88 }