Benutzer-Werkzeuge

Webseiten-Werkzeuge


Seitenleiste

ws1617:dreieckologie_15.12.16

Gruppe: Dreieckologie

Wir haben versucht, eine Funktion zu schreiben, die eine ihr übergebene Box in das bereits erwähnte Dreiecksmodell übersetzt.

Im Folgenden erläutern wir unseren aktuellen Code.

Da die Position „pos“ den Mittelpunkt der Box beschreibt, wird hier jeder Eckpunkt vom Mittelpunkt aus berechnet:

    A = mybox.pos.x + 1/2 * mybox.size.x, mybox.pos.y + 1/2 * mybox.size.y, mybox.pos.z + 1/2 * mybox.size.z
    B = mybox.pos.x + 1/2 * mybox.size.x, mybox.pos.y - 1/2 * mybox.size.y, mybox.pos.z + 1/2 * mybox.size.z
    C = mybox.pos.x - 1/2 * mybox.size.x, mybox.pos.y + 1/2 * mybox.size.y, mybox.pos.z + 1/2 * mybox.size.z
    D = mybox.pos.x - 1/2 * mybox.size.x, mybox.pos.y - 1/2 * mybox.size.y, mybox.pos.z + 1/2 * mybox.size.z
    E = mybox.pos.x + 1/2 * mybox.size.x - mybox.size.z, mybox.pos.y + 1/2 * mybox.size.y, mybox.pos.z - 1/2 * mybox.size.z
    F = mybox.pos.x + 1/2 * mybox.size.x - mybox.size.z, mybox.pos.y - 1/2 * mybox.size.y, mybox.pos.z - 1/2 * mybox.size.z
    G = mybox.pos.x - 1/2 * mybox.size.x + mybox.size.z, mybox.pos.y + 1/2 * mybox.size.y, mybox.pos.z - 1/2 * mybox.size.z
    H = mybox.pos.x - 1/2 * mybox.size.x + mybox.size.z, mybox.pos.y - 1/2 * mybox.size.y, mybox.pos.z - 1/2 * mybox.size.z
    I = mybox.pos.x, mybox.pos.y - 1/2 * mybox.size.y, mybox.pos.z + 1/2 * mybox.size.z
    J = mybox.pos.x, mybox.pos.y + 1/2 * mybox.size.y, mybox.pos.z + 1/2 * mybox.size.z

Hier erstellen wir Listen, die je drei Punkte vereinigen, die später die Eckpunkte der Dreiecke bilden:

    punkte_draufsicht =[[F,B,I],[H,F,I],[D,H,I]]
    punkte_Rechtecke =[[A,B,D],[A,C,D]]
    punkte_Rechtecke_innen =[[E,F,G],[F,G,H]]
    punkte_Boden = [[A,E,J],[E,J,G],[J,G,C]]

Hier benutzen wir eine Funktion, die Dreiecke mit den ihr übergebenen Eckpunkten graphisch darstellt:

    def zeichne_Dreieck(x,y,z):
            tri = faces(pos = [x,y,z],color=color.red)
            tri.make_twosided()
            tri.make_normals()
 
 
    for Dreieck in punkte_draufsicht:
            zeichne_Dreieck(Dreieck[0],Dreieck[1],Dreieck[2])
    for Dreieck in punkte_Rechtecke:
            zeichne_Dreieck(Dreieck[0],Dreieck[1],Dreieck[2])
    for Dreieck in punkte_Rechtecke_innen:
            zeichne_Dreieck(Dreieck[0],Dreieck[1],Dreieck[2])
    for Dreieck in punkte_Boden:
            zeichne_Dreieck(Dreieck[0],Dreieck[1],Dreieck[2])
 
 

Hier ist das Ergebnis dieses Codes. Man sieht den hohlen Zwischenraum der beiden Flächen, die in zwei Seiten hin schräg abgeschnitten sind, um eine perfekte Kante der Wände zu ermöglichen.

Das Problem des Codes liegt darin, dass wir die Wanddicke als die Z-Koordinate der Box definieren. Eine um 90 Grad gedrehte Wand aber hätte ganz andere Koordinaten - die Wanddicke wäre plötzlich zum Beispiel so groß wie im ersten Beispiel die Länge der Wand. Dadurch entstehen merkwürdige geometrische Gebilde, die in keiner Weise einer realistischen Wand gleichen.

ws1617/dreieckologie_15.12.16.txt · Zuletzt geändert: 2016/12/15 17:52 von SoenkeRoos96