# Zeichnen eines Wuerfels mit
einem einbeschriebenen Oktaeder

Friedrich Hattendorf, Bergstadt-Gymnasium Luedenscheid

 ***************************************************************************************
 Zuerst definieren wir die Abbildungsmatrix.
Bei einer 3D->2D Abbildung hat sie drei Zeilen und zwei Spalten.
Wir definieren mehrere Matrizen. Die nicht benoetigten kommentieren wir aus.
In der letzten Zeile weisen wir die ausgewaehlte Matrix der Matrix m zu. Diese wird
im folgenden mehrfach benoetigt; es ist aber dadurch nicht notwendig, sie an 
jeder Stelle zu nennen. 

m_kav:matrix([-1/2,-1/4],[1,0],[0,1]);
/* m_xxx:matrix([,],[,],[,]); */
/* m_grund:matrix([1,0],[0,1],[0,0]); */
m:m_kav;

 ***************************************************************************************
 Als erstes Objekt definieren wir danach die Achsen. Der Parameter lang_e gibt an, wie 
lang die einzelnen - von Ursprung ausgehenden Achsen-Stahlen gezeichnet werden.

lang_e:8;
pEN:[0,0,0]; pEXm:[-lang_e,0,0]; pEYm:[0,-lang_e,0];pEZm:[0,0,-lang_e];pEXp:[lang_e,0,0];pEYp:[0,lang_e,0];pEZp:[0,0,lang_e];

 Die so festgelegten Punkte werden zu einer Matrix zusammengefasst.
Diese Matrix wird mit der Abbildungsmatrix multipliziert.
Hinweis: das Multiplikationszeichen fuer Matrizen in maxima ist der 
Satzpunkt (.) , nicht das Sternchen (*)

k_achsen:matrix(pEN,pEXm,pEXp,pEYm,pEYp,pEZm,pEZp);
bild_mat:k_achsen.m;

Die berechnete Bild-Matrix muss mit dem part-Befehl wieder in 
Punkte (jetzt zweidimensional) zerlegt werden

pen:part(bild_mat,1);pxem:part(bild_mat,2);pxep:part(bild_mat,3);pyem:part(bild_mat,4);pyep:part(bild_mat,5);pzem:part(bild_mat,6);pzep:part(bild_mat,7);

Jetzt muss noch festgelegt werden, in welcher Reihenfolge die Punkte
nacheinander verbunden werdern sollen.
damit ist dann mit zlist_achsen das erste Zeichenobjekt fertig.

zlist_achsen:float([pxem,pxep,pen,pyem,pyep,pen,pzem,pzep]);

 ***************************************************************************************
Auf die gleiche Art wird jetzt der Wuerfel behandelt.

Ich definiere eine Konstante g. Wenn ich deren Wert aendere, aendert sich die Groesse des Wuerfels

g:4; 
pA:[0,0,0] ;pB:[0,g,0] ;pC:[-g,g,0] ;pD:[-g,0,0] ;
/* pE:[0,0,g] ;pF:[0,g,g] ;pG:[-g,0,g] ;pH:[-g,0,g] ; */
pE:[0,0,g] ;pF:[0,g,g] ;pG:[-g,g,g] ;pH:[-g,0,g] ;
k_wuerfel:matrix(pA,pB,pC,pD,pE,pF,pG,pH);
bild_mat:k_wuerfel.m;
pa:part(bild_mat,1);pb:part(bild_mat,2);pc:part(bild_mat,3);pd:part(bild_mat,4);
pe:part(bild_mat,5);pf:part(bild_mat,6);pg:part(bild_mat,7);ph:part(bild_mat,8);
zlist_wuerfel:float([pa,pb,pc,pd,pa,pe,pf,pb,pf,pg,pc,pg,ph,pd,ph,pe]);

 ***************************************************************************************
Nun zeichne ich den Oktaeder in den Wuerfel hinein.
Vorgehen wie beim Würfel
Zur Vereinfachung wird eine Konstante h:g/2 definiert. 

h:g/2;
pP:[-h,h,0];pU:[-h,h,g];
pQ:[0,h,h]; pR:[-h,g,h]; pS:[-g,h,h]; pT:[-h,0,h];
k_oktaeder:matrix(pP,pQ,pR,pS,pT,pU);
bild_mat:k_oktaeder.m;
pp:part(bild_mat,1);pq:part(bild_mat,2);pr:part(bild_mat,3);ps:part(bild_mat,4);
pt:part(bild_mat,5);pu:part(bild_mat,6);
/* PRU SRQ PTQ UTS P */
zlist_oktaeder:float([pp,pr,pu,ps,pr,pq,pp,pt,pq,pu,pt,ps,pp]);

 ***************************************************************************************
Nun wird gezeichnet

plot2d([[discrete,float(zlist_achsen)],[discrete,float(zlist_wuerfel)],[discrete,float(zlist_oktaeder)]],[legend, "","wuerfel","oktaeder"]);
/* plot2d([[discrete,float(zlist_achsen)]]); */