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