Dies ist eine alte Version des Dokuments!
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.