type
Image
|
= |
PointE |
→ |
Colour |
wobei
|
||||
type
PointE
|
= |
(FloatE,FloatE) |
||
oder allgemein mit beliebigem
Pixeltyp
|
||||
type
Image a
|
= |
PointE | → |
a |
type
Region
|
= |
Image BoolE | ||||
Beispiel
für ein Schachfeld: |
||||||
schach
|
:: |
Region | ||||
schach (x,y)
|
= | evenE ( floorE(x) + floorE(y) ) | ||||
floorE
|
:: |
DoubleE |
→ | IntE | ||
floorE
|
= | f2i x (1) |
||||
(1) f2i wandelt einen Float-Wert in einen Int-Wert um. |
Grafische Darstellung des
Beispiels
|
Polare Koordinaten
Häufig ist es sinnvoll polare Koordinaten p = (ρ, θ)
anstatt von rechteckigen Koordinaten p = (x, y) zu verwenden. Hier bei
gibt ρ den Abstand zu Mittelpumkt und θ den Winkel zwischen der
positiven Abszisse und eine imaginären Linie vom Mittelpunkt zu p
an.
type
PolarPoint = (FloatE,FloatE)
Mit den folgenden Funktionen lassen sich rechteckige Koordinatenin
polare Koordinaten umrechnen, und umgekehrt:
fromPolar
|
= |
PolarPointE |
→ |
PointE |
|
fromPolar (ρ, θ)
|
:: |
( ρ * cos θ, ρ *
sin th ) |
|||
toPolar
|
= |
PointE |
→ |
PolarPointE |
|
toPolar (x, y)
|
:: |
( distO (x, y),
atan2 y x ) |
|||
distO
|
= |
PointE |
→ |
PointE |
|
distO (x,y)
|
:: |
sqrt ( x^2 * y^2) | |||
Beispiel:
polares Schachfeld |
|||||
polarSchach
|
:: |
IntE | → |
Region | |
polarSchach
|
= | schach |
. sc . |
toPolar | |
where | |||||
sc (ρ, θ) | = |
( ρ, θ * fromInt
n / π )(1)(2) |
|||
(1) fromInt wandelt
einen Integer in einen anderen Typ, hier: Float |
|||||
(2) n entspricht
hier der Anzahl der Alternationen pro Kreis. |
Grafische
Darstellung des
Beispiels (n = 7) |
type
FractionE
|
= |
FloatE |
||
Beispiel: Alternierende Ringe mit weichem
Übergang zwischen schwarz (1) und weiss (0) |
||||
wavDist
|
:: |
Image FractonE |
||
wavDist
|
= |
( 1 + cos ( π *
distO p) ) / 2 |
||
Grafische
Darstellung des Beispiels |