aboutsummaryrefslogtreecommitdiff
path: root/sys/mwcs/gen/mwc2tranr.x
blob: ef5b5ef7f0767a9d0b2bf0a968259600182df019 (plain) (blame)
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