Changeset 39316 for branches/eam_branches/ipp-20151113/Ohana
- Timestamp:
- Jan 14, 2016, 11:33:56 AM (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/eam_branches/ipp-20151113/Ohana/src/gcompare/src/gc_compare.c
r30983 r39316 2 2 # define D_NMATCH 500; 3 3 4 double gcdist (double r1, double d1, double r2, double d2) { 4 typedef struct { 5 double sn_r; 6 double cs_r; 7 double sn_d; 8 double cs_d; 9 } gc_data_type; 10 11 gc_data_type *gcdist_init (data_type data) { 12 13 gc_data_type *gcdata; 14 ALLOCATE (gcdata, gc_data_type, data.Nvalues); 15 16 int i; 17 for (i = 0; i < data.Nvalues; i++) { 18 gcdata[i].sn_r = sin(RAD_DEG*data.values[i].X); 19 gcdata[i].cs_r = cos(RAD_DEG*data.values[i].X); 20 gcdata[i].sn_d = sin(RAD_DEG*data.values[i].Y); 21 gcdata[i].cs_d = cos(RAD_DEG*data.values[i].Y); 22 } 23 return gcdata; 24 } 25 26 double gcdist_new (gc_data_type v1, gc_data_type v2) { 27 28 double t1 = SQ(v2.cs_d*(v2.sn_r*v1.cs_r - v1.sn_r*v2.cs_r)); 29 30 double t2 = v1.cs_d*v2.sn_d; 31 32 double cs_dr = (v1.cs_r*v2.cs_r + v1.sn_r*v2.sn_r); // cos(r2 - r1) 33 double t3 = v1.sn_d*v2.cs_d * cs_dr; 34 35 double t4 = SQ(t2 - t3); 36 37 double y = sqrt(t1 + t4); 38 39 double x = v1.sn_d * v2.sn_d + v1.cs_d * v2.cs_d * cs_dr; 40 41 /* 42 fprintf (stderr, "t1: %f\n", t1); 43 fprintf (stderr, "t2: %f\n", t2); 44 fprintf (stderr, "t3: %f\n", t3); 45 fprintf (stderr, "t4: %f\n", t4); 46 fprintf (stderr, "cs: %f\n", cs_dr); 47 48 fprintf (stderr, "x: %f\n", x); 49 fprintf (stderr, "y: %f\n", y); 50 */ 51 52 return(DEG_RAD*atan2(y,x)); 53 } 54 55 double gcdist_old (double r1, double d1, double r2, double d2) { 5 56 double num,den; 6 57 r1 *= M_PI / 180; … … 9 60 d2 *= M_PI / 180; 10 61 11 num = sqrt(pow((cos(d2) * sin(r2 - r1)),2) + 62 # if (0) 63 double t1 = pow((cos(d2) * sin(r2 - r1)),2); 64 65 double t2 = cos(d1) * sin(d2); 66 67 double cs_dr = cos(r2 - r1); 68 double t3 = sin(d1) * cos(d2) * cs_dr; 69 70 double t4 = pow((t2 - t3), 2); 71 72 double y = sqrt(t1 + t4); 73 # endif 74 75 num = sqrt(pow((cos(d2) * sin(r2 - r1)),2) + 12 76 pow((cos(d1) * sin(d2) - 13 77 sin(d1) * cos(d2) * cos(r2 - r1)),2)); 14 78 den = (sin(d1) * sin(d2) + cos(d1) * cos(d2) * cos(r2 - r1)); 79 80 # if (0) 81 fprintf (stderr, "t1: %f\n", t1); 82 fprintf (stderr, "t2: %f\n", t2); 83 fprintf (stderr, "t3: %f\n", t3); 84 fprintf (stderr, "t4: %f\n", t4); 85 fprintf (stderr, "cs: %f\n", cs_dr); 86 87 fprintf (stderr, "y: %f\n", y); 88 89 fprintf (stderr, "%f %f\n", num, den); 90 # endif 91 15 92 return(atan2(num,den) * (180 / M_PI)); 16 93 } 17 18 94 19 95 match_type *gc_compare (data_type data1, data_type data2, int *Nmatches, double radius, double DX, double DY, double noauto) { … … 28 104 ALLOCATE (match, match_type, NMATCH); 29 105 106 gc_data_type *gcdata1 = gcdist_init (data1); 107 gc_data_type *gcdata2 = gcdist_init (data2); 108 30 109 for (i = 0; i < data1.Nvalues ;i++) { 31 110 if (!(i % 100)) … … 33 112 34 113 for (j = 0; j < data2.Nvalues ; j++) { 35 dR = gcdist(data1.values[i].X,data1.values[i].Y, 36 data2.values[j].X,data2.values[j].Y); 114 115 if (1) { 116 dR = gcdist_new(gcdata1[i], gcdata2[j]); 117 } else { 118 dR = gcdist_old(data1.values[i].X, data1.values[i].Y, data2.values[j].X, data2.values[j].Y); 119 } 120 121 /* 122 double dR1 = gcdist_new(gcdata1[i], gcdata2[j]); 123 double dR2 = gcdist_old(data1.values[i].X, data1.values[i].Y, data2.values[j].X, data2.values[j].Y); 124 fprintf (stderr, "%f %f\n", dR1, dR2); 125 dR = dR1; 126 */ 127 37 128 /* fprintf(stderr,"%g %g %g %g => %g\n", */ 38 129 /* data1.values[i].X,data1.values[i].Y,data2.values[j].X,data2.values[j].Y, */
Note:
See TracChangeset
for help on using the changeset viewer.
