⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dist_ellipse.pro

📁 basic median filter simulation
💻 PRO
字号:
pro dist_ellipse,im,n,xc,yc,ratio,pos_ang, DOUBLE = double;+; NAME:;       DIST_ELLIPSE; PURPOSE:;       Create a mask array useful for elliptical aperture photemetry; EXPLANATION:;       Form an array in which the value of each element is equal to the;       semi-major axis of the ellipse of specified center, axial ratio, and ;       position  angle, which passes through that element.  Useful for ;       elliptical aperture photometry.;; CALLING SEQUENCE:;       DIST_ELLIPSE, IM, N, XC, YC, RATIO, POS_ANG, /DOUBLE;; INPUTS:;       N = either  a scalar specifying the size of the N x N square output;               array, or a 2 element vector specifying the size of the;               M x N rectangular output array.;       XC,YC - Scalars giving the position of the ellipse center.   This does;               not necessarily have to be within the image;       RATIO - Scalar giving the ratio of the major to minor axis.   This ;               should be greater than 1 for postion angle to have its ;               standard meaning.;; OPTIONAL INPUTS:;       POS_ANG - Position angle of the major axis, measured counter-clockwise;               from the Y axis.  For an image in standard orientation ;               (North up, East left) this is the astronomical position angle.;; OPTIONAL INPUT KEYWORD:;       /DOUBLE - If this keyword is set and nonzero, the output array will;               be of type DOUBLE rather than floating point.;; OUTPUT:;       IM - REAL*4 elliptical mask array, of size M x N.  THe value of each ;               pixel is equal to the semi-major axis of the ellipse of center;                XC,YC, axial ratio RATIO, and position angle POS_ANG, which ;               passes through the pixel.;; EXAMPLE:;       Total the flux in a elliptical aperture with a major axis of 3', an;       axial ratio of 2.3, and a position angle of 25 degrees centered on ;       a specified RA and DEC.   The image array, IM is 200 x 200, and has ;       an associated FITS header H.;;       ADXY, H, ra, dec, x, y       ;Get X and Y corresponding to RA and Dec;       GETROT, H, rot, cdelt        ;CDELT gives plate scale degrees/pixel;       cdelt = abs( cdelt)*3600.    ;CDELT now in arc seconds/pixel;       DIST_ELLIPSE, ell, 200, x, y, 2.3, 25  ;Create a elliptical image mask;       ell = ell*cdelt(0)           ;Distances now given in arcseconds;       good = where( ell lt 180 )   ;Within 3 arc minutes;       print,total( im(good) )      ;Total pixel values within 3';; RESTRICTIONS:;       The speed of DIST_ELLIPSE decreases and the the demands on virtual;       increase as the square of the output dimensions.   Users should;       dimension the output array as small as possible, and re-use the;       array rather than re-calling DIST_ELLIPSE;; REVISION HISTORY:;       Written    W. Landsman             April, 1991;       Somewhat faster algorithm          August, 1992;       Allow rectangular output array     June, 1994;       Converted to IDL V5.0   W. Landsman   September 1997;       Added /DOUBLE keyword   W. Landsman   July 2000;- On_error,2                             ;Return to caller if N_params() LT 6 then begin    print,'Syntax - DIST_ELLIPSE, im, n, xc, yc, ratio, pos_ang, /DOUBLE'    print,'   im - output elliptical mask image array'    print,'   n -  size of output image mask, scalar or 2 element vector'    print,'   xc,yc - coordinates of ellipse center, scalars'    print,'   ratio - ratio of major to minor axis of ellipse, scalar'    print,'   pos_ang - position angle, counterclockwise from up'    return endif                                          ;Check some parameters if N_elements(ratio) NE 1 then message, $     'ERROR - Axial ratio (fifth parameter) must be a scalar value' if N_elements(pos_ang) NE 1 then message, $     'ERROR - Position angle (sixth parameter) must be a scalar value' ang = pos_ang /!RADEG                      ;Convert to radians cosang = cos(ang) sinang = sin(ang) if N_elements(N) EQ 2 then begin        nx = n[0]        ny = n[1]  endif else if N_elements(N) EQ 1 then begin        ny = n        nx = n                    ;Make a row endif else message, $        'ERROR - Output size parameter N must contain 1 or 2 elements'         if keyword_set(double) then begin    x = dindgen(nx) - xc    y = dindgen(ny) - yc    im = dblarr(nx, ny, /NOZERO) endif else begin    x = findgen( nx ) - xc    y = findgen( ny ) - yc    im = fltarr( nx, ny, /NOZERO ) endelse                         ;Rotate pixels to match ellipse orientation xcosang = x*cosang xsinang = x*sinang for i = 0,ny-1 do begin   xtemp =  xcosang + y[i]*sinang   ytemp = -xsinang + y[i]*cosang   im[0,i] = sqrt( (xtemp*ratio)^2 + ytemp^2 ) endfor return end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -