Skip to content

Commit 05fcd9d

Browse files
committed
2.0: geofindkey2p: fix 'scale'
1 parent fd31da6 commit 05fcd9d

File tree

2 files changed

+27
-23
lines changed

2 files changed

+27
-23
lines changed

man/man1/geofindkey2p.1

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ report-file
5555
8 -252.0700 2881.9000 65.4100 81962.0593 50016.3273 215.4125
5656

5757
diff:
58-
0.0158 0.0092 0.0117
58+
0.0168 0.0096 0.0123
5959

6060
.SH EXAMPLE
6161
geofindkey2p doc/data.dat report.dat

src/geofindkey2p.c

Lines changed: 26 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/*
22
Name: geofindkey2p.c
33
Version: 2.0
4-
Date: 2020-09-09
4+
Date: 2020-09-10
55
Author: zvezdochiot (https://github.com/zvezdochiot)
66
*
77
build:
@@ -38,7 +38,7 @@ output file report.dat:
3838
4 -252.0700 2881.9000 65.4100 81962.0500 50016.3400 215.4200 1 +0.0093 -0.0127 -0.0075
3939
4040
diff:
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

104104
int 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

Comments
 (0)