Polare Transformationen


... [ Seminar "Einführung in Haskell" ] ... [ Inhaltsverzeichnis ] ... [ zurück ] ... [ weiter ] ...

Polare Transformationen


 

Swirl polar

Bei einigen Transformationen ist es sinnvoll, diese auf polaren Koordinaten arbeiten zu lassen, da die Berechnung und das Ergebnis dann inhaltlich logisch zusammen passen. Eine Funktion für die sich polare Koordinaten anbieten ist swirl:

swirlP
::
FloatE → TransformE
swirlP r
=
polarXf ( \ (ρ, θ) → (ρ, θ + ρ × 2π /r))
mit


polarXf
::
TransformE → TransformE
polarXf xf
=
fromPolar . xf . toPolar

Zu beachten ist, dass ρ hierbei unverändert bleibt.

 

Endliche Unendlichkeiten

Bis lang wurde ausschliesslich mit unendlichen Bildern gearbeitet. Um die Bilder nun endlich zu machen, werden sie ausschnittweise oder gesamt dargestellt.
Der Ausschnitt des Bild wird hierbei auf eine endliche Form gelegt, bzw. die Koordinaten des Bildes werden so umgerechnet, dass alle auf die endliche Form passen.

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

Bild circleLimit
Grafische Darstellung circleLimit

 

... [ Seminar "Einführung in Haskell" ] ... [ Inhaltsverzeichnis ] ... [ zurück ] ... [ weiter ] ... [ nach oben ] ...