-
Notifications
You must be signed in to change notification settings - Fork 2
/
disk.py
74 lines (59 loc) · 1.95 KB
/
disk.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
import numpy as np
from .region import Region
from .gridcurves import GridCurves
class Disk(Region):
def __init__(self, circle, *args, **kwargs):
super(Disk, self).__init__(outer = circle, **kwargs)
self._gridType = 'polar'
self._numRadialLines = 20
self._numCircularLines = 5
self._numLevels = 5
@property
def gridType(self):
return self._gridType
@gridType.setter
def gridType(self, value):
assert(value in ['polar', 'carleson'])
self._gridType = value
@property
def numRadialLines(self):
return self._numRadialLines
@numRadialLines.setter
def numRadialLines(self, value):
assert(type(value) == int and value > 0)
self._numRadialLines = value
@property
def numCircularLines(self):
return self._numCircularLines
@numCircularLines.setter
def numCircularLines(self, value):
assert(type(value) == int and value > 0)
self._numCircularLines = value
@property
def numLevels(self):
return self._numLevels
@numLevels.setter
def numLevels(self, value):
assert(type(value) == int and value > 0)
self._numLevels = value
def grid(self, **kwargs):
if self.gridType == 'polar':
return self.polarGrid(**kwargs)
else:
raise NotImplementedError('Unknown grid type')
def polarGrid(self):
nrad = self.numRadialLines
ncirc = self.numCircularLines
npt = 200
c = self.outer.center
r = self.outer.radius
curves = []
zg = np.arange(1, npt+1) / float(npt+1)
for k in range(nrad):
crv = c + r * np.exp(2j * np.pi * k/float(nrad)) * zg
curves.append(crv)
zg = np.exp(2j * np.pi * np.arange(npt)/float(npt-1))
for k in range(1, ncirc+1):
crv = c + r*k/float(ncirc+1)*zg
curves.append(crv)
return GridCurves(curves)