1 /*
2 *+
3 *  Name:
4 *     palPcd
5 
6 *  Purpose:
7 *     Apply pincushion/barrel distortion to a tangent-plane [x,y]
8 
9 *  Language:
10 *     Starlink ANSI C
11 
12 *  Type of Module:
13 *     Library routine
14 
15 *  Invocation:
16 *     palPcd( double disco, double * x, double * y );
17 
18 *  Arguments:
19 *     disco = double (Given)
20 *        Pincushion/barrel distortion coefficient.
21 *     x = double * (Given & Returned)
22 *        On input the tangent-plane X coordinate, on output
23 *        the distorted X coordinate.
24 *     y = double * (Given & Returned)
25 *        On input the tangent-plane Y coordinate, on output
26 *        the distorted Y coordinate.
27 
28 *  Description:
29 *     Applies pincushion and barrel distortion to a tangent
30 *     plane coordinate.
31 
32 *  Authors:
33 *     PTW: Pat Wallace (RAL)
34 *     TIMJ: Tim Jenness
35 *     {enter_new_authors_here}
36 
37 *  Notes:
38 *     - The distortion is of the form RP = R*(1 + C*R**2), where R is
39 *       the radial distance from the tangent point, C is the DISCO
40 *       argument, and RP is the radial distance in the presence of
41 *       the distortion.
42 *
43 *     - For pincushion distortion, C is +ve;  for barrel distortion,
44 *       C is -ve.
45 *
46 *     - For X,Y in units of one projection radius (in the case of
47 *       a photographic plate, the focal length), the following
48 *       DISCO values apply:
49 *
50 *           Geometry          DISCO
51 *
52 *           astrograph         0.0
53 *           Schmidt           -0.3333
54 *           AAT PF doublet  +147.069
55 *           AAT PF triplet  +178.585
56 *           AAT f/8          +21.20
57 *           JKT f/8          +13.32
58 *
59 *  See Also:
60 *     - There is a companion routine, palUnpcd, which performs the
61 *       inverse operation.
62 
63 *  History:
64 *     2000-09-03 (PTW):
65 *        SLALIB implementation.
66 *     2015-01-01 (TIMJ):
67 *        Initial version. Ported from Fortran.
68 *     {enter_further_changes_here}
69 
70 *  Copyright:
71 *     Copyright (C) 2000 Rutherford Appleton Laboratory.
72 *     Copyright (C) 2015 Tim Jenness
73 *     All Rights Reserved.
74 
75 *  Licence:
76 *     This program is free software; you can redistribute it and/or modify
77 *     it under the terms of the GNU General Public License as published by
78 *     the Free Software Foundation; either version 3 of the License, or
79 *     (at your option) any later version.
80 *
81 *     This program is distributed in the hope that it will be useful,
82 *     but WITHOUT ANY WARRANTY; without even the implied warranty of
83 *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
84 *     GNU General Public License for more details.
85 *
86 *     You should have received a copy of the GNU General Public License
87 *     along with this program (see SLA_CONDITIONS); if not, write to the
88 *     Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
89 *     Boston, MA  02110-1301  USA
90 
91 *  Bugs:
92 *     {note_any_bugs_here}
93 *-
94 */
95 
96 #include "pal.h"
97 
palPcd(double disco,double * x,double * y)98 void palPcd( double disco, double *x, double *y ) {
99   double f;
100 
101   f = 1.0 + disco * ( (*x) * (*x) + (*y) * (*y) );
102   *x *= f;
103   *y *= f;
104 }
105 
106