Der map-Operator
Eine Punktliste spiegeln
Die Animation zeigt zwei Polygone, die mit Hilfe von Punktlisten festgelegt sind.
Zum Herunterladen: spiegeln_xachse.ggb
Aufgabe 1
(a) Ändere die Koordinaten des blau dargestellten Polygons so ab, dass es durch eine Spiegelung an der x-Achse aus dem rot dargestellten Polygon entsteht.
(b) Beschreibe allgemein, wie man aus einem Punkt $P=(x,y)$ den an der x-Achse gespiegelten Punkt $P'=(...,...)$ erhält.
Die Spiegelung einer Punktliste automatisieren
Die Abbildung verdeutlicht die Situation bei der Spiegelung einer Punktliste an der x-Achse. Jeder Punkt der Punktliste wird mit derselben Funktion verarbeitet.
Zur Automatisierung einer Situation, in der jedes Element einer Liste mit derselben Funktion verarbeitet wird,
nutzt man den map
-Operator.
Der map
-Operator erhält als Übergaben zuerst die Verarbeitungsfunktion (hier die Funktion spiegelungPunktxAchse
)
und dann die zu verarbeitende Liste (hier eine Punktliste).
Hier eine erste Implementierung in Elm:
module Polygone exposing (..)
type alias Punkt = ( Float, Float )
type alias Punktliste = List Punkt
punktliste1: Punktliste
punktliste1 = [(100,50),(200,30),(130,200),(80,100)]
spiegelungPunktlistexAchse: Punktliste -> Punktliste
spiegelungPunktlistexAchse punktliste =
let
spiegelungPunktxAchse (x,y) = (x,-y)
in
List.map spiegelungPunktxAchse punktliste
> import Polygone exposing (..)
> spiegelungPunktlistexAchse punktliste1
[(100,-50),(200,-30),(130,-200),(80,-100)]
: Punktliste
Die Verarbeitungsfunktion kann man auch als Zuordnung darstellen, wenn man die Darstellung \ ... -> ...
verwendet.
spiegelungPunktlistexAchse: Punktliste -> Punktliste
spiegelungPunktlistexAchse punktliste =
let
spiegelungPunktxAchse = (\ (x,y) -> (x,-y) )
in
List.map spiegelungPunktxAchse punktliste
Die Zuordnung (\ (x,y) -> (x,-y) )
lässt sich dann auch direkt als anonyme Funktion (d.h. als Funktion ohne Funktionsname) als
Parameter des map
-Operators verwenden.
spiegelungPunktlistexAchse: Punktliste -> Punktliste
spiegelungPunktlistexAchse punktliste =
List.map (\ (x,y) -> (x,-y) ) punktliste
Aufgabe 2
Teste selbst alle hier vorgestellten Versionen.
Aufgabe 3
(a) Entwickle analog eine Funktion spiegelungPunktlisteyAchse
, die eine Punktliste an der y-Achse spiegelt.
(b) Entwickle analog eine Funktion spiegelungPunktlisteWinkelhalbierende
, die eine Punktliste an der 1. Winkelhalbierenden (das ist die Gerade mit $y = x$)
spiegelt.
(c) Entwickle eine Funktion verschiebungPunktliste
mit folgendem Verhalten:
Signatur:
verschiebungPunktliste: Float -> Float -> Punktliste -> Punktliste
Beispiele:
verschiebungPunktliste 10 -20 [(100,50),(200,30),(130,200),(80,100)] -> [(110,30),(210,0),(140,180),(90,80)]
Quellen
- [1]: Punkte spiegeln - Urheber: KB - Lizenz: inf-schule.de
- [2]: map-Operator verwenden - Urheber: KB - Lizenz: inf-schule.de