@@ -24,7 +24,7 @@ def circles(N=5, atlas=None, display='flat'):
2424 nlast = 2000 # 25 um for 5mm diameter
2525 n = int ((k + 1 ) * nlast / N )
2626 r = .4 * (k + 1 ) / N
27- theta = np .linspace (0 , 2 * np .pi , n ) - np .pi / 2
27+ theta = ( np .linspace (0 , 2 * np .pi , n ) + np .pi / 2 )
2828 sz = np .r_ [sz , r * np .exp (1j * theta )]
2929 level = np .r_ [level , theta * 0 + k ]
3030
@@ -36,20 +36,28 @@ def circles(N=5, atlas=None, display='flat'):
3636
3737 s = Bunch (
3838 x = np .real (sz ) * np .diff (xlim ) + centroid [1 ],
39- y = np .imag (sz ) * np .diff (ylim ) + centroid [0 ]
39+ y = np .imag (sz ) * np .diff (ylim ) + centroid [0 ],
40+ level = level ,
41+ distance = level * 0 ,
4042 )
41- s ['distance' ] = np .r_ [0 , np .cumsum (np .abs (np .diff (s ['x' ] + 1j * s ['y' ])))]
4243
43- fcn = interp1d (s ['distance' ], s ['x' ] + 1j * s ['y' ])
44+ # compute the overall linear distance for each circle
45+ d0 = 0
46+ for lev in np .unique (s ['level' ]):
47+ ind = s ['level' ] == lev
48+ diff = np .abs (np .diff (s ['x' ][ind ] + 1j * s ['y' ][ind ]))
49+ s ['distance' ][ind ] = np .cumsum (np .r_ [0 , diff ]) + d0
50+ d0 = s ['distance' ][ind ][- 1 ]
4451
52+ fcn = interp1d (s ['distance' ], s ['x' ] + 1j * s ['y' ], fill_value = 'extrap' )
4553 d = np .arange (0 , np .ceil (s ['distance' ][- 1 ]))
4654
4755 s_ = Bunch ({
4856 'x' : np .real (fcn (d )),
4957 'y' : np .imag (fcn (d )),
50- 'level' : interp1d (s ['distance' ], level , kind = 'nearest' )(d )
58+ 'level' : interp1d (s ['distance' ], level , kind = 'nearest' )(d ),
59+ 'distance' : d
5160 })
52- s_ ['distance' ] = np .r_ [0 , np .cumsum (np .abs (np .diff (s_ ['x' ] + 1j * s_ ['y' ])))]
5361
5462 if display == 'flat' :
5563 ih = np .arange (atlas .bc .nz )
0 commit comments