|
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 |
