11/*
22Name: geofindkey2p.c
33Version: 2.0
4- Date: 2020-09-09
4+ Date: 2020-09-10
55Author: zvezdochiot (https://github.com/zvezdochiot)
66*
77build:
@@ -38,7 +38,7 @@ output file report.dat:
38384 -252.0700 2881.9000 65.4100 81962.0500 50016.3400 215.4200 1 +0.0093 -0.0127 -0.0075
3939
4040diff:
41- 0.0158 0.0092 0.0117
41+ 0.0168 0.0096 0.0123
4242*
4343*/
4444
@@ -98,16 +98,15 @@ void geofindkey2pusage()
9898 fprintf (stderr , " 8 -252.0700 2881.9000 65.4100 81962.0593 50016.3273 215.4125\n" );
9999 fprintf (stderr , " \n" );
100100 fprintf (stderr , " diff:" );
101- fprintf (stderr , " 0.0158 0.0092 0.0117 " );
101+ fprintf (stderr , " 0.0168 0.0096 0.0123 " );
102102}
103103
104104int main (int argc , char * argv [])
105105{
106106 char buf [1024 ], name [32 ], format3 [128 ], format7 [128 ], format11 [128 ];
107107 double x [3 ] = {0 }, y [3 ] = {0 }, z [3 ] = {0 }, wgt , n ;
108- double xc [4 ] = {0 }, yc [4 ] = {0 };
109- double dx [3 ] = {0 }, dy [3 ] = {0 };
110- double dz0 , dz1 , dz2 , dz0s , dz1s , dz2s ;
108+ double xc [4 ] = {0 }, yc [3 ] = {0 };
109+ double dx [3 ] = {0 }, dy [3 ] = {0 }, dzs [3 ] = {0 };
111110 double a [3 ][3 ], scale , rotation ;
112111 double tx , ty , tx2 , ty2 ;
113112 double s [15 ] = {0 };
@@ -173,18 +172,23 @@ int main(int argc, char *argv[])
173172 s [6 ] += wgt ;
174173 n ++ ;
175174 s [7 ] += (x [0 ] * x [0 ] + x [1 ] * x [1 ]) * wgt ;
176- s [8 ] += (y [0 ] * y [0 ] + y [1 ] * y [1 ]) * wgt ;
177175 }
178176 }
179- if (n > 0 )
177+ if (n > 0.0 )
180178 {
181179 s [7 ] -= (s [0 ] * s [0 ] + s [1 ] * s [1 ] )/ n ;
182- s [8 ] -= (s [3 ] * s [3 ] + s [4 ] * s [4 ]) / n ;
183- s [7 ] += s [8 ];
184- s [7 ] = sqrt (s [7 ]);
180+ s [7 ] *= 2.0 ;
181+ s [7 ] /= n ;
182+ if (s [7 ] > 0.0 )
183+ {
184+ s [7 ] = sqrt (s [7 ]);
185+ } else {
186+ s [7 ] = 1.0 ;
187+ }
188+ } else {
189+ s [7 ] = 1.0 ;
185190 }
186191 xc [3 ] = s [7 ];
187- yc [3 ] = s [7 ];
188192 rewind (fp0 );
189193
190194 /* найти центр масс */
@@ -290,9 +294,6 @@ int main(int argc, char *argv[])
290294 fprintf (fp1 , "\n" );
291295
292296 /* вывести данные вместе с невязками */
293- dz0s = 0 ;
294- dz1s = 0 ;
295- dz2s = 0 ;
296297 fprintf (fp1 , "var:\n" );
297298 for (i = 0 ; i < 15 ; i ++ ) {s [i ] = 0. ;}
298299 while (fgets (buf , 1024 , fp0 ) != NULL )
@@ -311,11 +312,9 @@ int main(int argc, char *argv[])
311312 for (i = 0 ; i < 3 ; i ++ )
312313 {
313314 dy [i ] = z [i ] - y [i ];
315+ dzs [i ] += (dy [i ] * dy [i ]);
314316 }
315317 fprintf (fp1 , format11 , name , x [0 ], x [1 ], x [2 ], y [0 ], y [1 ], y [2 ], wgt , dy [0 ], dy [1 ], dy [2 ]);
316- dz0s += (dy [0 ] * dy [0 ]);
317- dz1s += (dy [1 ] * dy [1 ]);
318- dz2s += (dy [2 ] * dy [2 ]);
319318 } else {
320319 for (i = 0 ; i < 3 ; i ++ )
321320 {
@@ -329,12 +328,17 @@ int main(int argc, char *argv[])
329328 }
330329 }
331330 }
332- dz0s = sqrt (2 * dz0s / n );
333- dz1s = sqrt (2 * dz1s / n );
334- dz2s = sqrt (2 * dz2s / n );
331+ if (n > 0.0 )
332+ {
333+ for (i = 0 ; i < 3 ; i ++ )
334+ {
335+ dzs [i ] *= 2.0 ;
336+ dzs [i ] += sqrt (dzs [i ] / n );;
337+ }
338+ }
335339 fprintf (fp1 , "\n" );
336340 fprintf (fp1 , "diff:\n" );
337- fprintf (fp1 , format3 , dz0s , dz1s , dz2s );
341+ fprintf (fp1 , format3 , dzs [ 0 ], dzs [ 1 ], dzs [ 2 ] );
338342 fclose (fp1 );
339343 }
340344 fclose (fp0 );
0 commit comments