FUNCTION A_MATRIX, n, IMAGE=image ;=============================================================================== ; (c) 1990 - khd c/o FU BERLIN. A l l r i g h t s r e s e r v e d. || ; -- No part of this software package may be reproduced, transmitted, || ; 1991 transcribed, stored in a retrieval system, or translated into || ; any form by any means without the w r i t t e n permission of || ; Karl-Heinz Dittberner-FU BERLIN, Arnimallee 22, D-1000 Berlin 33 || ;=============================================================================== ; PRO:A_MATRIX.PRO K.-H. Dittberner - 11.NOV.1990 ; V 01.5 P 476/24 - 12.FEB.1991 ; ; IDL(V2.0)-Routine: Erzeugen der quadratischen n x n Winkel(Angle)-Matrix. ; ; In einer Angle-Matrix enthaelt jedes Element seinen ; Winkel in Radian, also arctan(y/x); z.Zt. beschraenkt ; auf gerade n. ; ; Quelle: Do-it-yourself! Merkposten: o Wert am Nullpunkt endg. Ok ? ; C90 237 o n ungerade behandeln. ; o ; Aufruf: result = A_MATRIX(n) o ; o ;=============================================================================== ; Aenderungen: [19/11/90-khd] => V 01.2: (Copy => DK + SEIDLER) ; - Erlaeuterungen zugefuegt. ; [20/11/90-khd] => V 01.3: ; - Algorithmus modifiziert wg. Ungenauigkeit. ; - Zunaechst auf gerade n beschraenkt! ; - ON_ERROR,2 aktiviert. ; - Nullpunktswert => 0. gesetzt; war bisher = Pi/2. ; [12/2/91-khd] => V 01.4: ; - Algorithmus fuer den 4. Quadranten (Bildbereichs- ; Darstellung) modifiziert. ;=============================================================================== ; 0. Prolog, Variablen und Konstanten: ;=============================================================================== ; ON_ERROR, 2 ; Return => Ruf. Programm. y = FINDGEN(1, (n/2)+1) ; Index-Spaltenvektor erzeugen. matrix = FLTARR(n,n) ; Leere Angle-Matrix erzeugen. temp = FLTARR(n/2, n/2) ; ;=============================================================================== ; 1. Behandlung der Keywords (Default-Werte): ;=============================================================================== ; ; ;=============================================================================== ; 2. Berechnung der Angle-Matrix (in Frequenzbereichs-Darstellung): ;=============================================================================== ; FOR x=1L, n/2 DO $ ; Fuer alle Spalten. BEGIN matrix(x,0) = ATAN(y,x) ENDFOR matrix(0,*) = !PI/2. ; Behandlung von x=0. temp = matrix(0:n/2, 1:n/2) + !PI/2. tamp = matrix(1:n/2, 0:n/2-1) + 3.*!PI/2. ; Ab V 01.4. matrix( n/2, 0) = ROTATE(temp, 1) ; + 90 Grad = + Pi/2. temp = temp(1:n/2, *) + !PI/2. matrix( n/2, n/2) = ROTATE(temp, 2) ; + 180 Grad = + Pi. ;;temp = temp + !PI/2. ; Stand bis V 01.3. matrix( 0, n/2) = ROTATE(tamp, 3) ; + 270 Grad = + 3*Pi/2. matrix(0,0) = 0. ; Nullpunkt => 0.; bisher Pi/2. ; ;=============================================================================== ; 3. Schluss: ;=============================================================================== ; Ende: IF KEYWORD_SET(image) $ THEN RETURN, SHIFT(matrix, n/2, n/2) $ ; In Bildbereichs-Darstellung. ELSE RETURN, matrix ; In Frequenzbereichs-Darstellung. END ;===============================================================================