| 1 | #include "slalib.h"
|
|---|
| 2 | #include "slamac.h"
|
|---|
| 3 | void slaUnpcd ( double disco, double *x, double *y )
|
|---|
| 4 | /*
|
|---|
| 5 | ** - - - - - - - - -
|
|---|
| 6 | ** s l a U n p c d
|
|---|
| 7 | ** - - - - - - - - -
|
|---|
| 8 | **
|
|---|
| 9 | ** Remove pincushion/barrel distortion from a distorted [x,y]
|
|---|
| 10 | ** to give tangent-plane [x,y].
|
|---|
| 11 | **
|
|---|
| 12 | ** Given:
|
|---|
| 13 | ** disco double pincushion/barrel distortion coefficient
|
|---|
| 14 | ** x,y double* distorted coordinates
|
|---|
| 15 | **
|
|---|
| 16 | ** Returned:
|
|---|
| 17 | ** x,y double* tangent-plane coordinates
|
|---|
| 18 | **
|
|---|
| 19 | ** Notes:
|
|---|
| 20 | **
|
|---|
| 21 | ** 1) The distortion is of the form rp = r*(1 + c*r**2), where r is
|
|---|
| 22 | ** the radial distance from the tangent point, c is the disco
|
|---|
| 23 | ** argument, and rp is the radial distance in the presence of
|
|---|
| 24 | ** the distortion.
|
|---|
| 25 | **
|
|---|
| 26 | ** 2) For pincushion distortion, c is +ve;
|
|---|
| 27 | ** For barrel distortion, c is -ve.
|
|---|
| 28 | **
|
|---|
| 29 | ** 3) For x,y in "radians" - units of one projection radius,
|
|---|
| 30 | ** which in the case of a photograph is the focal length of
|
|---|
| 31 | ** the camera - the following disco values apply:
|
|---|
| 32 | **
|
|---|
| 33 | ** geometry disco
|
|---|
| 34 | **
|
|---|
| 35 | ** astrograph 0.0
|
|---|
| 36 | ** schmidt -0.3333
|
|---|
| 37 | ** AAT PF doublet +147.069
|
|---|
| 38 | ** AAT PF triplet +178.585
|
|---|
| 39 | ** AAT f/8 +21.20
|
|---|
| 40 | ** JKT f/8 +13.32
|
|---|
| 41 | **
|
|---|
| 42 | ** 4) The present routine is an approximate inverse to the
|
|---|
| 43 | ** companion routine slaPcd, obtained from two iterations
|
|---|
| 44 | ** of Newton's method. The mismatch between the slaPcd and
|
|---|
| 45 | ** slaUnpcd routines is negligible for astrometric applications;
|
|---|
| 46 | ** To reach 1 milliarcsec at the edge of the AAT triplet or
|
|---|
| 47 | ** Schmidt field would require field diameters of 2.4 degrees
|
|---|
| 48 | ** and 42 degrees respectively.
|
|---|
| 49 | **
|
|---|
| 50 | ** Last revision: 11 June 1997
|
|---|
| 51 | **
|
|---|
| 52 | ** Copyright P.T.Wallace. All rights reserved.
|
|---|
| 53 | */
|
|---|
| 54 | {
|
|---|
| 55 | double cr2, a, cr2a2, f;
|
|---|
| 56 |
|
|---|
| 57 | cr2 = disco * ( *x * *x + *y * *y );
|
|---|
| 58 | a = ( 2.0 * cr2 + 1.0 ) / ( 3.0 * cr2 + 1.0 );
|
|---|
| 59 | cr2a2 = cr2 * a * a;
|
|---|
| 60 | f = ( 2.0 * cr2a2 * a + 1.0 ) / ( 3.0 * cr2a2 + 1.0 );
|
|---|
| 61 | *x *= f;
|
|---|
| 62 | *y *= f;
|
|---|
| 63 | }
|
|---|