_________________________________________________________________________________
Inhalt....: Abbildung regelmäßiger Figuren
Kategorie.: Arbeitsblatt
Mathematik: Geometrie R^2, Lineare Algebra
MuPAD.....: 3.1.0
Datum.....: 2005-01-22
Autoren...: Kai Gehrs <acrowley@mupad.de>
Funktionen: matrix, plot, plot::Point, plot::Pointlist, linalg::nrows
Funktionen: linalg::col
_________________________________________________________________________________
Abbildung regelmäßiger Figuren
In diesem Arbeitsblatt stellen wir eine Funktion matrix2polygon vor, mit deren Hilfe sich
über Matrizen definierte regelmäßige Figuren in MuPAD darstellen lassen.
In der ebenen Geometrie ist es oft hilfreich eine Funktion zur Hand zu haben,
mit deren Hilfe sich schnell über eine entsprechende Matrix regelmäßige
Figuren im Zweidimensionalen zeichnen lassen. Dreiecke z.B. lassen sich
leicht in Form einer Matrix "codieren": Ist z.B. ein Dreieck durch die Lage
der Eckpunkte A = (0|0), B = (3|4) und C = (2|1) im Koordinatensystem
gegeben, so würde man gerne auf schnellem und unkompliziertem Wege
eine Darstellung der Form

mit MuPAD erstellen. Ist das Dreieck erst über eine Matrix definiert, so
bietet sich der Vorteil, dass Abbildungen der Ebene wie Streckungen
und Drehungen einerseits auf algebraischer Ebene mit dem CAS durch
Matrixmulitiplikationen realsiert werden können, man aber andererseits
auch sofort die Visualisierung der Transformation, die man gerade
durchgeführt hat, darstellen lassen kann.
Im folgenden stellen wir die Prozedur matrix2polygon vor, mit deren
Hilfe sich leicht geometrische Objekte wie Dreiecke, Vierecke etc. und
auch ganz allgemeine Streckenkzüge ("Polygone") zeichnen lassen.
Die Prozedur matrix2polygon soll als Eingabe eine Matrix mit zwei
Zeilen und beliebig vielen Spalten der Form

erhalten. Jede Spalte der Matrix steht dabei für einen Punkt, dessen
x-Koordinate durch den entsprechenden Eintrag in der ersten Zeile
und dessen y-Koordinate durch den entsprechenden Eintrag in der
zweiten Zeile gegeben ist.
Hier also zunächst die Prozedur:
matrix2polygon:= (A) ->
if linalg::nrows(A) = 2 then
plot::Polygon2d(linalg::transpose(A),
PointsVisible, GridVisible,
Scaling = Constrained)
else
error("n x 2 matrix erwartet");
end_if:
Wir sehen im Programmcode bereits, dass sinnvolle plot-Optionen wie
GridVisible = Automatic und Scaling = Constrained (über das
Koordinatensystem werden Gitterlinien gelegt und die Skalierung der
Graphik bleibt "originalgetreu") fest eingebaut sind. Möchte man auf eine
dieser Optionen verzichten, so ist es ein Leichtes schlicht die entsprechende
Zeile im Programmcode der Prozedur matrix2polygon zu löschen.
Rückgabewert der Prozedur ist entweder ein grafisches Objekt, das
wir dann mit dem plot-Befehl von MuPAD zeichnen lassen können,
oder die Fehlermeldung "n x 2 matrix erwartet", wenn wir
eine Matrix von einem falschen Format eingegeben haben.
Nun testen wir die Prozedur an dem obigen Beispiel des Dreiecks
mit den Eckpunkten A = (0|0), B = (3|4) und C = (2|1). Die Spalten
der Matrix sollen die Eckpunkte des Dreiecks definieren:
Dreieck:= matrix([[0,3,2],
[0,4,1]])
![]()
plot(matrix2polygon(Dreieck)):

Offensichtlich ist dies nicht ganz das, was wir uns vorgestellt hatten.
Es genügt nicht, die Eckpunkte anzugeben, sondern wir müssen, wenn
wir eine geschlossene Figur zeichnen wollen, vom "letzten" Eckpunkt
nochmals zurück zum "Startpunkt" laufen. In unserem Fall bedeutet
dies einfach, dass wir den Eckpunkt A = (0|0) noch einmal als letzten
Punkt in die Matrix Dreieck hineinschreiben müssen:
Dreieck:= Dreieck . matrix([0,0])
![]()
plot(matrix2polygon(Dreieck)):

Dies ist genau die Zeichnung, die wir oben in der Einleitung schon als
Beispiel gesehen hatten.
Auch zufällige Figuren können wir leicht mit Hilfe der Prozedur
matrix2polygon darstellen: Z.B. können wir Zufallszahlen im
Bereich von 1 bis 6 erzeugen und so beliebige Streckenzüge
zeichnen:
zufallsEcken:= random(1..6):
n:= 5:
zufallsFigur:= matrix2polygon(
matrix([[zufallsEcken() $ i = 1..n],
[zufallsEcken() $ i = 1..n]])):
plot(zufallsFigur):

Auch mehrere verschiedene Figuren lassen sich leicht in ein
gemeinsames Koordinatensystem zeichnen, indem man z.B. die
Matrizen, die einzelne Figuren definieren, in einer Liste zusammen-
fasst und anschließend mit dem Sequenzoperator $ über die
Elemente der Liste iteriert:
MuPAD:= [
matrix([[0,0,1,2,2,1.5,1.5,1,0.5,0.5,0],
[0,3,2,3,0,0,2,1.5,2,0,0]]),
matrix([[2.5,2.5,3,3,4,4,4.5,4.5,2.5],
[0,1.5,1.5,0.5,0.5,1.5,1.5,0,0]]),
matrix([[5,5,6.5,6.5,5.5,5.5,6,6,5.5,5.5,5],
[0,3,3,1.5,1.5,2.5,2.5,2,2,0,0]]),
matrix([[7,8,9,10,9.5,8.75,8.25,8,9,8,7.95,9.05,7.95,7.5,7],
[0,3,3,0,0,2.5,2.5,1.75,1.75,1.75,1.5,1.5,1.5,0,0]]),
matrix([[10.5,10.5,11,12,12,11,11,11.5,11.5,11,11,10.5],
[0,3,3,2,1,0,2.5,2,1,0.5,0,0]])]:
plot(matrix2polygon(MuPAD[k]) $ k = 1..5, Height=40):

________________________________________________________________________________
Anmerkungen:
1. Weitere Anregungen finden Sie unter: http://schule.mupad.de bzw. http://studium.mupad.de
_______________________________________________________________________________