swirlP
|
:: |
FloatE → TransformE |
swirlP r
|
= |
polarXf ( \ (ρ, θ) → (ρ, θ + ρ × 2π /r)) |
mit
|
||
polarXf
|
:: |
TransformE → TransformE |
polarXf xf
|
= |
fromPolar . xf . toPolar |
Ausschnitt |
||
cropRad
|
:: |
FloatE → FilterC |
cropRad r
|
= |
crop (uscale r udisk) |
Kreisgrenzen |
||
circleLimit
|
:: |
FloatE -> FilterC |
circleLimit radius im
|
= |
cropRad radius (im . polarXf xf) |
where xf (rho, theta)
|
= |
(radius * rho/(radius - rho), theta) |
Beispiel: Ein Schachfeld wird in einen
Kreis gezwängt |
||
circleSchach
|
:: |
ImageC |
circleSchach
|
= |
circleLimit 10 (bwIm schach) |
bwIm
|
:: |
Region -> ImageC |
bwIm r
|
= |
cond r blackI whiteI |