📄 zern_ipolar.pro
字号:
; $Id: zern_ipolar.pro,v 1.1.1.1 2002/03/12 11:53:46 riccardi Exp $
;
; A. Riccardi, Dipartimento di Astronomia di Firenze (Italy).
; e-mail address: riccardi@arcetri.astro.it
; Please, send me a message if you modify this code.
function calc_poly, x, coeff, max_deg
if (max_deg eq 0) then $
return, coeff(0)+0.*x $
else begin
result = coeff(0)
for i = 1,max_deg do result = result*x+coeff(i)
return, result
endelse
end
function zern_ipolar, info, r, theta
;+
; NAME:
; ZERN_IPOLAR
;
; PURPOSE:
; This function evaluates Zernike polynomial.
; (We use Noll formulation of Zernike polynomials)
;
; CATEGORY:
; Special polynomial
;
; CALLING SEQUENCE:
;
; Result = ZERN_IPOLAR(Info, R, Theta)
;
; INPUTS:
; Info: structure. Informations about a Zernike polynomial.
; See ZERN_INFOS function.
; R: radial coordinate.
; Theta: azimuthal coordinate. Same structure as R.
;
; OUTPUTS:
; ZERN_IPOLAR returns the Zernike polynomial, specified in
; the Info structure, evalueted in the point of polar
; coordinates R, Theta.
;
; EXAMPLE:
; Evaluate Zernike sagittal coma in Rho, Theta:
;
; Infos = ZERN_INFOS(2)
; Result = ZERN_IPOLAR(Infos(8-1), rho, theta)
;
; MODIFICATION HISTORY:
; Written by: A. Riccardi; March, 1995.
;-
result = sqrt(info.n+1.+r(0)*0.)*calc_poly(r*r, info.coeff, (info.n-info.m)/2)
if (info.m ne 0) then result = result*r^info.m
if (info.m eq 0) then $
return, result $
else $
if info.j_even then $
return, sqrt(r(0)*0.+2.)*result*cos(info.m*theta) $
else $
return, sqrt(r(0)*0.+2.)*result*sin(info.m*theta)
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -