#!/usr/bin/env python # -*- coding: utf8 -*- ''' Copyright (C) 2008 Wikimedia Foundation This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ''' from math import * import scipy import scipy.special from PIL import Image w = 400 h = 400 image = scipy.zeros((h, w)) # rayleigh criterion r0 = scipy.special.jn_zeros(1, 1) scalex = scipy.special.jn_zeros(1, 2)[-1] + r0 / 2. scaley = h * scalex / w # make dark areas better visible color_func = sqrt for y in range(h): for x in range(w): xx = ((x + .5) / w - .5) * 2. * scalex yy = ((y + .5) / h - .5) * 2. * scaley r1 = hypot(xx + r0 / 2., yy) r2 = hypot(xx - r0 / 2., + yy) v1 = v2 = .5 if r1 != 0.: v1 = (scipy.special.j1(r1) / r1) ** 2 if r2 != 0.: v2 = (scipy.special.j1(r2) / r2) ** 2 image[y, x] = color_func(v1 + v2) max_val = image.max() # write image to file image_file = Image.new('L', (w, h)) for y in range(h): for x in range(w): c = int(2**8 * image[y, x] / max_val) image_file.putpixel((x, y), c) image_file.save('Airydisks_rayleigh_sqrt.png', 'PNG')