Hier werden die Unterschiede zwischen zwei Versionen gezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
ws1920:arbeitstermin_08 [2020/02/09 20:34] Zetraeder |
ws1920:arbeitstermin_08 [2020/04/02 15:36] (aktuell) Zetraeder [Achter Arbeitstermin] |
||
---|---|---|---|
Zeile 4: | Zeile 4: | ||
**30.01.2020** | **30.01.2020** | ||
- | [[ws1920:update_01|<<]] | [[ws1920:scutoids|Home]] | [[ws1920:update_02|>>]] | + | [[ws1920:update_01|<<]] | [[ws1920:scutoids|Home]] | [[ws1920:cd_08|Code]] | [[ws1920:update_02|>>]] |
- | Code-Schnipsel Blender 3D. | + | Heute haben wir versucht, grundlegende Strukturen in Blender zu implementieren. Hierfür haben wir uns mit der Erstellung von Meshes durch Python in Blender informiert und eine Methode generateObj geschrieben, mit der wir Objekte einfach erstellen können, ohne uns jedes Mal mit den spezifischen Blender Python Befehlen herumschlagen zu müssen. |
- | <code python> | + | Die Parameter machen hierbei eine reibungslose Benutzung möglich: |
+ | *name - Namen des Objektes | ||
+ | *verts - die Punkte, die das Objekt beschreiben (in Blender werden diese vertices genannt) | ||
+ | *faces - eine Liste von verschiedenen Punktmengen, die die Flächen des Objektes beschreiben | ||
+ | *loc - die Position des Objektes als xyz - Koordinate | ||
- | import bpy | + | {{ :ws1920:blender_first_try.jpg?144|}} |
- | from random import * | + | |
- | from math import * | + | |
- | + | Außerdem haben wir einen ersten Versuch getätigt, eine Delaunay-Tetraedisierung zu generieren. Dies klappt insofern, dass es von außen recht überzeugend aussieht. Leider klassifiziert das Programm noch nicht, sondern zeichnet lediglich alle Möglichkeiten der Bildung von Tetraeder aus der gegebenen Punktmenge.\\ (Klicke das Bild für die Originalgröße an) | |
- | + | ||
- | class Sphere: | + | |
- | def __init__(self, pos, radius): | + | |
- | self.pos = pos | + | |
- | self.radius = radius | + | |
- | + | ||
- | def punktInKugel(self, p): | + | |
- | if (abstandPunkte(self.pos,p) < self.radius): print(">> Punkt in Kugel") | + | |
- | else: print(">> Punkt außerhalb Kugel") | + | |
- | + | ||
- | def abstandPunkte(p1,p2): | + | |
- | a = sqrt(((p1[0]-p2[0])**2) + ((p1[1]-p2[1])**2) + ((p1[2]-p2[2])**2)) | + | |
- | return a | + | |
- | + | ||
- | def genPunkt(pos): | + | |
- | verts = [(0.1,0.1,0.1),(-0.1,0.1,0.1),(-0.1,-0.1,0.1),(0.1,-0.1,0.1) | + | |
- | ,(0.1,0.1,-0.1),(-0.1,0.1,-0.1),(-0.1,-0.1,-0.1),(0.1,-0.1,-0.1)] | + | |
- | faces = [(0,1,2,3),(4,5,6,7),(0,1,4,5),(1,2,4,5),(2,3,6,7),(3,0,7,4)] | + | |
- | generateObj("Punkt",verts,faces,pos) | + | |
- | + | ||
- | def generateObj(name,verts,faces,loc): | + | |
- | mymesh = bpy.data.meshes.new(name) | + | |
- | myobject = bpy.data.objects.new(name,mymesh) | + | |
- | + | ||
- | myobject.location = loc #(0,0,0) #bpy.context.scene.cursor.location | + | |
- | bpy.context.collection.objects.link(myobject) | + | |
- | + | ||
- | mymesh.from_pydata(verts,[],faces) | + | |
- | mymesh.update(calc_edges=True) | + | |
- | + | ||
- | + | ||
- | + | ||
- | #v = [(-10,0,0),(10,10,0),(10,-10,0),(0,0,10)] | + | |
- | + | ||
- | #f = [(0,1,2),(1,2,3),(2,3,0),(3,0,1)] | + | |
- | + | ||
- | #generateObj("tetraeder", v, f) | + | |
- | + | ||
- | + | ||
- | # Variablen | + | |
- | anzahlKerne = 10 # anzahl der Kerne, die generiert werden sollen | + | |
- | ker = [] # Liste mit zufälligen Kernen drin | + | |
- | + | ||
- | + | ||
- | + | ||
- | # Setup Kerne | + | |
- | for i in range(0, anzahlKerne): | + | |
- | x = randint(0,10); | + | |
- | y = randint(0,10); | + | |
- | z = randint(0,10); | + | |
- | + | ||
- | ker.append((x,y,z)) | + | |
- | + | ||
- | print(ker) | + | |
- | for i in ker: | + | |
- | genPunkt(i) | + | |
- | + | ||
- | # Überprüfung, ob Kerne auf einem Kreis -> dann diese Tetraeder bauen | + | |
- | for i in range(0, len(ker)): | + | |
- | for j in range(i+1, len(ker)): | + | |
- | for k in range(j+1, len(ker)): | + | |
- | for l in range(k+1, len(ker)): | + | |
- | + | ||
- | verts = (ker[i], ker[j], ker[k], ker[l]) | + | |
- | faces = [(0,1,2),(1,2,3),(2,3,0),(3,0,1)] | + | |
- | + | ||
- | generateObj("Tetraeder", verts, faces, (0,0,0)) | + | |
- | + | ||
- | </code> | + | |
---- | ---- | ||