MuPAD Education Group: Kostenlose Materialen für MuPAD Pro:
www.sciface.com/education, schule.mupad.de, studium.mupad.de, mupad.zum.de.

________________________________________________________________________________

 

Inhalt....: 3D-Polygone füllen: N-Eck, Tetraeder und Quader (Grafik)

Kategorie.: Grafik

Mathematik: Grafik

MuPAD.....: 3.1.1

Datum.....: 2005-07-04

Autoren...: Andreas Sorgatz <sorgatz@sciface.com>

Funktionen: plot, plot::SurfaceSet, MeshListType, TriangleFan, plot::Polygon3d

Funktionen: Closed, MeshVisible, PointsVisible

________________________________________________________________________________

 

3D-Polygone füllen: N-Eck, Tetraeder und Quader

 

Dieses Arbeitsblatt demonstriert den Einsatz von MuPAD Grafikfunktionen und Grafikoptionen

anhand eines Beispiels.

 

Nahezu beliebige 3D-Flächen können in MuPAD mittels der Funktion plot::SurfaceSet

unter Angabe von Gitterpunkten (Mesh) gezeichnet werden. Die Gitterpunkte müssen dabei die

Fläche entweder in Dreiecke (Triangle,TriangleFan,TriangleStrip) oder in

Vierecke (Quads,QuadStrip) zerlegen. plot::SurfaceSet bietet eine Low-Level

Schnittstelle zur 3D-Grafik und ist daher etwas "technisch".

 

3D-Polygone, die konvexe N-Ecke beschreiben, lassen sich sehr einfach und effizient über den

Netztyp Dreieckfächer (MeshListType=TriangleFan) realisieren. Wir definieren dafür

zunächst die Liste der Eckpunkte eines schräg im Raum stehenden Sechsecks:

 

Eckpunkte:= [

  [ 3, 0,  0],

  [ 2, 2,  2],

  [ 0, 3,  3],

  [-2, 2,  2],

  [-3, 0,  0],

  [-2,-2, -2],

  [ 0,-3, -3],

  [ 2,-2, -2]

]

math

Wir zeichnen das Seckseck zunächst als geschlossenes (Closed) 3D-Polygon:

 

plot(plot::Polygon3d(Eckpunkte,Closed)):

MuPAD graphics

Im folgenden zeichnen wir die Fläche des Sechsecks mittels plot::SurfaceSet. Vor der

Version MuPAD 3.4 akzeptiert diese Funktion leider nur eine flache Liste von Gitterkoordinaten,

so dass wir die Liste der Eckpunkte zuvor konvertieren müssen:

 

plot(plot::SurfaceSet(

     map(Eckpunkte, op),             // map für MuPAD <3.4

     MeshListType = TriangleFan

     )

):

MuPAD graphics

Um sichtbar nachzuvollziehen, wie die Fläche des Sechsecks intern als Dreieckfächer realisiert

wurde, schalten wir die Optionen MeshVisible und PointsVisible ein. Dabei werden

die Linien und Eckpunkte der Dreiecke mit eingezeichnet:

 

plot(plot::SurfaceSet(

     map(Eckpunkte, op),             // map für MuPAD <3.4

     MeshListType = TriangleFan,

     MeshVisible, PointsVisible

     )

):

MuPAD graphics

Soll das Seckseck einen sichtbaren Rand bekommen, so kombiniert man die beiden oben be-

nutzten Funktionen wie folgt:

 

plot(plot::SurfaceSet(

     map(Eckpunkte, op),             // map für MuPAD <3.4

     MeshListType = TriangleFan

     ),

     plot::Polygon3d(

     Eckpunkte,

     Closed,

     LineColor = RGB::Black

     )

):

MuPAD graphics

Ähnlich können wir auch 3D-Körper erstellen. Beispielsweise einen Platonischen Körper, das

Tetraeder, das aus Dreiecksflächen besteht. Wir definieren zunächst wieder die Gitterpunkte

in Form einer Liste Dreieckskoordinaten:

 

Dreiecke:= [

  [-1.5, -1.5, 1.4,  0.0,  1.7, 1.4, 1.5, -1.5,  1.4],

  [-1.5, -1.5, 1.4,  1.5, -1.5, 1.4, 0.0,  0.0, -1.4],

  [ 1.5, -1.5, 1.4,  0.0,  1.7, 1.4, 0.0,  0.0, -1.4],

  [ 0.0,  1.7, 1.4, -1.5, -1.5, 1.4, 0.0,  0.0, -1.4]

]

math

Da es sich diesmal nicht um eine Fächerstruktur, sondern einzelne Dreiecke handelt, wird als

Netztyp Triangles gewählt:

 

plot(plot::SurfaceSet(

     map(Dreiecke, op),              // map für MuPAD <3.4

     MeshListType = Triangles

     )

):

MuPAD graphics

Auch hier können wir die Netzlinien zuschalten, die in diesem Fall genau den Rand des Körpers

definieren:

 

plot(plot::SurfaceSet(

     map(Dreiecke, op),              // map für MuPAD <3.4

     MeshListType = Triangles,

     MeshVisible

     )

):

MuPAD graphics

Ein Quader wird entsprechend wie folgt realisiert:

 

Quader := [

[-1,-1,-1], [ 1,-1,-1], [ 1, 1,-1], [-1, 1,-1],

[-1,-1,-1], [-1,-1, 1], [-1, 1, 1], [-1, 1,-1],

[ 1,-1,-1], [ 1,-1, 1], [ 1, 1, 1], [ 1, 1,-1],

[-1,-1,-1], [-1,-1, 1], [ 1,-1, 1], [ 1,-1,-1],

[-1, 1,-1], [-1, 1, 1], [ 1, 1, 1], [ 1, 1,-1],

[-1,-1, 1], [ 1,-1, 1], [ 1, 1, 1], [-1, 1, 1]

]:

 

plot(plot::SurfaceSet(

     map(Quader, op),                // map für MuPAD <3.4

     MeshListType = Quads,

     MeshVisible

     )

):

MuPAD graphics

Anmerkungen zu plot::SurfaceSet:

 

- MuPAD arbeitet mit einem Beleuchtungsmodell, das auch Reflexe darstellt. Um Flächen und

  Körper sauber darzustellen, sollte immer spezifiziert werden wo "innen" und "aussen" einer

  Fläche ist. In der Regel gibt man die Koordinaten einer ebenen Teilfläche (Dreieck | Viereck)

  dazu gegen den Uhrzeigersinn, also mathematisch positiver Reihenfolge an. Alternativ können

  aber auch Normalenvektoren definiert werden, mehr dazu auf der Hilfeseite zu dieser Funktion.

 

- Ab Version MuPAD Pro 3.4 können die Koordinaten der Gitternetzwerke (MeshList) frei

  in bis zu zwei-stufigen Unterlisten gruppiert werden. Also beispielsweise jeder Punkt als eine

  Punktliste [x,y,z] und beliebige viele Punkte wieder in einer Elementliste, die dann in einer

  Gesamtliste zusammengefasst werden. Dies ist übersichtlicher und häufig auch bequemer.

 

- Die Funktion erlaubt auch animierte Gitternetzwerke (MeshList). Dazu wird ein Gitternetz

  definiert in dem ein Parameter 'a' auftritt, als Zusatzargument erhält die Funktion dann noch

  den Animationsbereich, beispielsweise a=0..PI. Als Beispiel ziehen wir an einer Ecke des

  Quaders:

 

Quader := [

-1,-1,-1,  1,-1,-1,  1, 1,-1, -1, 1,-1,

-1,-1,-1, -1,-1, a, -1, 1, 1, -1, 1,-1,

  1,-1,-1,  1,-1, 1,  1, 1, 1,  1, 1,-1,

-1,-1,-1, -1,-1, a,  1,-1, 1,  1,-1,-1,

-1, 1,-1, -1, 1, 1,  1, 1, 1,  1, 1,-1,

-1,-1, a,  1,-1, 1,  1, 1, 1, -1, 1, 1

]:

plot(plot::SurfaceSet(

     Quader, MeshListType = Quads,

     MeshVisible, PointsVisible,

     a=2..1,

     TimeRange = 0..1,

     AnimationStyle = BackAndForth

     )

):

MuPAD graphics

________________________________________________________________________________

 

Anmerkungen:

1.  Weitere Anregungen zum Einsatz von MuPAD in der Lehre finden Sie auf unserem WebPortal

     MuPAD in Schule und Studium unter: http://schule.mupad.de bzw. http://studium.mupad.de.

 

2. Unsere Material Sammlung enthält Arbeitsblätter zu den Archimedische Körper. Dort wird die

    Funktion plot::SurfaceSet ebenfalls eingesetzt.

________________________________________________________________________________

 

 

 

MuPAD Education Group: Kostenlose Materialen für MuPAD Pro:
www.sciface.com/education, schule.mupad.de, studium.mupad.de, mupad.zum.de.