#!/usr/bin/env python
# -*- coding: utf8 -*-
'''
Copyright (C) 2010 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))
# dawes criterion
r0 = pi
scalex = scipy.special.jn_zeros(1, 2)[-1] + scipy.special.jn_zeros(1, 1) / 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_dawes_sqrt.png', 'PNG')