1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
# Copyright(c) 1986 Association of Universities for Research in Astronomy Inc.
include "../mwcs.h"
# MW_C2TRAN -- Optimized 2D coordinate transformation.
procedure mw_c2tranr (a_ct, x1,y1, x2,y2)
pointer a_ct #I pointer to CTRAN descriptor
real x1,y1 #I coordinates in input system
real x2,y2 #O coordinates in output system
pointer ct, ltm, ltv
real p1[2], p2[2]
begin
# Get real or double version of descriptor.
ct = CT_R(a_ct)
ltm = CT_LTM(ct)
ltv = CT_LTV(ct)
if (CT_TYPE(ct) == LNR) {
# Simple linear, nonrotated transformation.
x2 = Memr[ltm ] * x1 + Memr[ltv ]
y2 = Memr[ltm+3] * y1 + Memr[ltv+1]
} else if (CT_TYPE(ct) == LRO) {
# Linear, rotated transformation.
p1[1] = x1; p1[2] = y1
x2 = Memr[ltm ] * p1[1] + Memr[ltm+1] * p1[2] + Memr[ltv ]
y2 = Memr[ltm+2] * p1[1] + Memr[ltm+3] * p1[2] + Memr[ltv+1]
} else {
# General case involving one or more functional terms.
p1[1] = x1; p1[2] = y1
call mw_ctranr (a_ct, p1, p2, 2)
x2 = p2[1]; y2 = p2[2]
}
end
|