i

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.

Punkte spiegeln[1]

Zur Automatisierung einer Situation, in der jedes Element einer Liste mit derselben Funktion verarbeitet wird, nutzt man den map-Operator.

map-Operator verwenden[2]

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

Suche

v
110.2.10.1.1.1
inf-schule.de/fp_elm_alteversion/elm_programme/listenoperatoren/polygone/lernstrecke/map
inf-schule.de/110.2.10.1.1.1
inf-schule.de/@/page/3oVYtG7VgpTW5MXd

Rückmeldung geben