""" 6 5-Eck Antiprismen Ring 28.04.2021 www.3d-meier.de """ import c4d import math # Variablen und Konstanten Titel = '6 5-Eck Antiprismen Ring' # Name NP = 60 # Anzahl Punkte N3 = 48 # Anzahl Dreiecke Fuenfeck Antiprismen N3a =36 # Anzahl Dreiecke Dreieck Antipriamen N5 = 12 # Anzahl Fuenfecke Radius = 4 # Radius der Eckpunktkugeln Faktor = 100 # Skalierungsfaktor k = 1 # Korrekturfaktor fuer Kantenlaenge 1 a = 1 N = 5 # Fuenfeck sec = 1/math.cos(math.pi/(2*N)) h = math.sqrt(1-(sec**2)/4) # Hoehe Antiprisma w = math.pi/5 ww = math.pi/2 Punkte = [] hD = math.sqrt(3)/2 # Hoehe Dreieck Ru = math.sqrt(50 + 10*math.sqrt(5))/10 # Umkreisradius Fuenfeck Ri = math.sqrt(25 + 10*math.sqrt(5))/10 # Inkreisradius Fuenfeck beta = math.acos(-1/3.0) gamma = math.asin((Ru - Ri)/hD) #print(gamma) delta = math.pi - beta - gamma #print(delta) d = hD*math.cos(delta) e = hD*math.sin(delta) f = Ru + e + Ri print(f) cos18 = math.sqrt(10 + 2*math.sqrt(5))/4 sin18 = (math.sqrt(5) - 1)/4 g = f * cos18 m = f * sin18 print(g) print(m) # Antiprisma 1 dx = 0 dy = 0 dz = m + f/2 for i in xrange(N): Punkte.append(c4d.Vector(dx+Ru*math.cos(ww+2*math.pi*i/N), dy-h/2, dz+Ru*math.sin(ww+2*math.pi*i/N))) for i in xrange(N): Punkte.append(c4d.Vector(dx+Ru*math.cos(ww+w+2*math.pi*i/N), dy+h/2, dz+Ru*math.sin(ww+w+2*math.pi*i/N))) # Antiprisma 2 dx = g dy = -d dz = f/2 for i in xrange(N): Punkte.append(c4d.Vector(dx+Ru*math.cos(ww+2*math.pi*i/N), dy-h/2, dz+Ru*math.sin(ww+2*math.pi*i/N))) for i in xrange(N): Punkte.append(c4d.Vector(dx+Ru*math.cos(ww+w+2*math.pi*i/N), dy+h/2, dz+Ru*math.sin(ww+w+2*math.pi*i/N))) # Antiprisma 3 dx = g dy = -2*d dz = -f/2 for i in xrange(N): Punkte.append(c4d.Vector(dx+Ru*math.cos(ww+2*math.pi*i/N), dy-h/2, dz+Ru*math.sin(ww+2*math.pi*i/N))) for i in xrange(N): Punkte.append(c4d.Vector(dx+Ru*math.cos(ww+w+2*math.pi*i/N), dy+h/2, dz+Ru*math.sin(ww+w+2*math.pi*i/N))) # Antiprisma 4 dx = 0 dy = -3*d dz = -m - f/2 for i in xrange(N): Punkte.append(c4d.Vector(dx+Ru*math.cos(ww+2*math.pi*i/N), dy-h/2, dz+Ru*math.sin(ww+2*math.pi*i/N))) for i in xrange(N): Punkte.append(c4d.Vector(dx+Ru*math.cos(ww+w+2*math.pi*i/N), dy+h/2, dz+Ru*math.sin(ww+w+2*math.pi*i/N))) # Antiprisma 5 dx = -g dy = -2*d dz = -f/2 for i in xrange(N): Punkte.append(c4d.Vector(dx+Ru*math.cos(ww+2*math.pi*i/N), dy-h/2, dz+Ru*math.sin(ww+2*math.pi*i/N))) for i in xrange(N): Punkte.append(c4d.Vector(dx+Ru*math.cos(ww+w+2*math.pi*i/N), dy+h/2, dz+Ru*math.sin(ww+w+2*math.pi*i/N))) # Antiprisma 6 dx = -g dy = -d dz = f/2 for i in xrange(N): Punkte.append(c4d.Vector(dx+Ru*math.cos(ww+2*math.pi*i/N), dy-h/2, dz+Ru*math.sin(ww+2*math.pi*i/N))) for i in xrange(N): Punkte.append(c4d.Vector(dx+Ru*math.cos(ww+w+2*math.pi*i/N), dy+h/2, dz+Ru*math.sin(ww+w+2*math.pi*i/N))) Dreiecke = [( 2, 6, 7, 7), # Antiprisma 1 ( 2, 7, 3, 3), # Antiprisma 1 ( 3, 7, 8, 8), # Antiprisma 1 ( 4, 8, 9, 9), # Antiprisma 1 ( 4, 9, 0, 0), # Antiprisma 1 ( 0, 9, 5, 5), # Antiprisma 1 ( 0, 5, 1, 1), # Antiprisma 1 ( 1, 5, 6, 6), # Antiprisma 1 (10+2, 10+6, 10+7, 10+7), # Antiprisma 2 (10+3, 10+7, 10+8, 10+8), # Antiprisma 2 (10+3, 10+8, 10+4, 10+4), # Antiprisma 2 (10+4, 10+8, 10+9, 10+9), # Antiprisma 2 (10+4, 10+9, 10+0, 10+0), # Antiprisma 2 (10+0, 10+9, 10+5, 10+5), # Antiprisma 2 (10+0, 10+5, 10+1, 10+1), # Antiprisma 2 (10+1, 10+6, 10+2, 10+2), # Antiprisma 2 (20+2, 20+6, 20+7, 20+7), # Antiprisma 3 (20+2, 20+7, 20+3, 20+3), # Antiprisma 3 (20+3, 20+7, 20+8, 20+8), # Antiprisma 3 (20+3, 20+8, 20+4, 20+4), # Antiprisma 3 (20+4, 20+8, 20+9, 20+9), # Antiprisma 3 (20+4, 20+9, 20+0, 20+0), # Antiprisma 3 (20+0, 20+5, 20+1, 20+1), # Antiprisma 3 (20+1, 20+5, 20+6, 20+6), # Antiprisma 3 (30+2, 30+6, 30+7, 30+7), # Antiprisma 4 (30+2, 30+7, 30+3, 30+3), # Antiprisma 4 (30+3, 30+7, 30+8, 30+8), # Antiprisma 4 (30+3, 30+8, 30+4, 30+4), # Antiprisma 4 (30+4, 30+9, 30+0, 30+0), # Antiprisma 4 (30+0, 30+9, 30+5, 30+5), # Antiprisma 4 (30+0, 30+5, 30+1, 30+1), # Antiprisma 4 (30+1, 30+6, 30+2, 30+2), # Antiprisma 4 (40+2, 40+6, 40+7, 40+7), # Antiprisma 5 (40+2, 40+7, 40+3, 40+3), # Antiprisma 5 (40+3, 40+7, 40+8, 40+8), # Antiprisma 5 (40+4, 40+8, 40+9, 40+9), # Antiprisma 5 (40+4, 40+9, 40+0, 40+0), # Antiprisma 5 (40+0, 40+5, 40+1, 40+1), # Antiprisma 5 (40+1, 40+5, 40+6, 40+6), # Antiprisma 5 (40+1, 40+6, 40+2, 40+2), # Antiprisma 5 (50+2, 50+6, 50+7, 50+7), # Antiprisma 6 (50+3, 50+7, 50+8, 50+8), # Antiprisma 6 (50+3, 50+8, 50+4, 50+4), # Antiprisma 6 (50+4, 50+9, 50+0, 50+0), # Antiprisma 6 (50+0, 50+9, 50+5, 50+5), # Antiprisma 6 (50+0, 50+5, 50+1, 50+1), # Antiprisma 6 (50+1, 50+5, 50+6, 50+6), # Antiprisma 6 (50+1, 50+6, 50+2, 50+2)] # Antiprisma 6 Dreiecke1 = [(16, 8, 15, 15), # Antiprisma 1 (11, 4, 3, 3), # Antiprisma 1 (15, 8, 4, 4), # Antiprisma 1 (15, 4, 11, 11), # Antiprisma 1 (16, 11, 3, 3), # Antiprisma 1 ( 8, 16, 3, 3), # Antiprisma 1 (25, 17, 29, 29), # Antipriama 2 (20, 13, 12, 12), # Antipriama 2 (29, 17, 13, 13), # Antipriama 2 (29, 13, 20, 20), # Antipriama 2 (25, 20, 12, 12), # Antipriama 2 (17, 25, 12, 12), # Antipriama 2 (38, 39, 26, 26), # Antipriama 3 (22, 38, 26, 26), # Antipriama 3 (38, 22, 34, 34), # Antipriama 3 (21, 34, 22, 22), # Antipriama 3 (34, 21, 39, 39), # Antipriama 3 (26, 39, 21, 21), # Antipriama 3 (44, 43, 31, 31), # Antipriama 4 (35, 44, 31, 31), # Antipriama 4 (44, 35, 48, 48), # Antipriama 4 (36, 48, 35, 35), # Antipriama 4 (48, 36, 43, 43), # Antipriama 4 (31, 43, 36, 36), # Antipriama 4 (57, 49, 45, 45), # Antipriama 5 (57, 45, 52, 52), # Antipriama 5 (40, 52, 45, 45), # Antipriama 5 (52, 40, 53, 53), # Antipriama 5 (49, 53, 40, 40), # Antipriama 5 (53, 49, 57, 57), # Antipriama 5 (54, 2, 1, 1), # Antipriama 6 (54, 1, 59, 59), # Antipriama 6 ( 6, 59, 1, 1), # Antipriama 6 (59, 6, 58, 58), # Antipriama 6 ( 2, 58, 6, 6), # Antipriama 6 (58, 2, 54, 54)] # Antipriama 6 Fuenfecke = [( 0, 1, 2, 3, 4), # Antiprisma 1 ( 9, 8, 7, 6, 5), # Antiprisma 1 (10+0, 10+1, 10+2, 10+3, 10+4), # Antiprisma 2 (10+9, 10+8, 10+7, 10+6, 10+5), # Antiprisma 2 (20+0, 20+1, 20+2, 20+3, 20+4), # Antiprisma 3 (20+9, 20+8, 20+7, 20+6, 20+5), # Antiprisma 3 (30+0, 30+1, 30+2, 30+3, 30+4), # Antiprisma 4 (30+9, 30+8, 30+7, 30+6, 30+5), # Antiprisma 4 (40+0, 40+1, 40+2, 40+3, 40+4), # Antiprisma 5 (40+9, 40+8, 40+7, 40+6, 40+5), # Antiprisma 5 (50+0, 50+1, 50+2, 50+3, 50+4), # Antiprisma 6 (50+9, 50+8, 50+7, 50+6, 50+5)] # Antiprisma 6 #************************************************************************ def CreateNullobjekt1(): obj = c4d.BaseObject(c4d.Onull) obj.SetName(Titel) obj.Message(c4d.MSG_UPDATE) return obj #************************************************************************ def CreateNullobjekt2(): obj = c4d.BaseObject(c4d.Onull) obj.SetName('Ecken') obj.Message(c4d.MSG_UPDATE) return obj #************************************************************************ def CreateNullobjekt3(): obj = c4d.BaseObject(c4d.Onull) obj.SetName('Kanten') obj.Message(c4d.MSG_UPDATE) return obj #************************************************************************ def CreateNullobjekt4(): obj = c4d.BaseObject(c4d.Onull) obj.SetName('Polygone') obj.Message(c4d.MSG_UPDATE) return obj #************************************************************************ def CreateDreiecke(): obj = c4d.BaseObject(c4d.Opolygon) obj.ResizeObject(NP,N3) obj.SetName('Dreiecke') # Punkte uebergeben for i in xrange(NP): obj.SetPoint(i, c4d.Vector(Punkte[i][0]*Faktor*k, Punkte[i][1]*Faktor*k, Punkte[i][2]*Faktor*k)) # Dreiecke setzen for i in xrange(N3): obj.SetPolygon( i, c4d.CPolygon(Dreiecke[i][0], Dreiecke[i][1], Dreiecke[i][2], Dreiecke[i][3])) obj.Message(c4d.MSG_UPDATE) return obj #************************************************************************ def CreateDreiecke1(): obj = c4d.BaseObject(c4d.Opolygon) obj.ResizeObject(NP,N3a) obj.SetName('Dreiecke 1') # Punkte uebergeben for i in xrange(NP): obj.SetPoint(i, c4d.Vector(Punkte[i][0]*Faktor*k, Punkte[i][1]*Faktor*k, Punkte[i][2]*Faktor*k)) # Dreiecke setzen for i in xrange(N3a): obj.SetPolygon( i, c4d.CPolygon(Dreiecke1[i][0], Dreiecke1[i][1], Dreiecke1[i][2], Dreiecke1[i][3])) obj.Message(c4d.MSG_UPDATE) return obj #************************************************************************ def CreateFuenfecke(): obj = c4d.BaseObject(c4d.Opolygon) obj.ResizeObject(NP, N5*2) obj.SetName('Fünfecke') # Punkte uebergeben for i in xrange(NP): obj.SetPoint(i, c4d.Vector(Punkte[i][0]*Faktor*k, Punkte[i][1]*Faktor*k, Punkte[i][2]*Faktor*k)) zz = 0 # Zähler für Polygone zurücksetzen for i in xrange(N5): obj.SetPolygon(zz, c4d.CPolygon(Fuenfecke[i][0], Fuenfecke[i][1], Fuenfecke[i][2], Fuenfecke[i][4])) zz = zz + 1 obj.SetPolygon(zz, c4d.CPolygon(Fuenfecke[i][2], Fuenfecke[i][3], Fuenfecke[i][4], Fuenfecke[i][4])) zz = zz + 1 obj.Message(c4d.MSG_UPDATE) return obj #************************************************************************ def CreateSplineDreiecke(): obj = c4d.BaseObject(c4d.Ospline) obj.SetName("Spline-Dreiecke") obj.ResizeObject(N3*3) zz = 0 for i in xrange(N3): for j in xrange(3): x = Punkte[Dreiecke[i][j]][0] y = Punkte[Dreiecke[i][j]][1] z = Punkte[Dreiecke[i][j]][2] obj.SetPoint(zz, c4d.Vector(x*Faktor*k, y*Faktor*k, z*Faktor*k)) zz = zz + 1 # Segmente erzeugen obj.MakeVariableTag(c4d.Tsegment, N3) for i in range(0, N3): obj.SetSegment(i, 3, True) # Spline schliessen obj[c4d.SPLINEOBJECT_CLOSED] = True obj.Message(c4d.MSG_UPDATE) return obj #************************************************************************ def CreateSplineDreiecke1(): obj = c4d.BaseObject(c4d.Ospline) obj.SetName("Spline-Dreiecke 1") obj.ResizeObject(N3a*3) zz = 0 for i in xrange(N3a): for j in xrange(3): x = Punkte[Dreiecke1[i][j]][0] y = Punkte[Dreiecke1[i][j]][1] z = Punkte[Dreiecke1[i][j]][2] obj.SetPoint(zz, c4d.Vector(x*Faktor*k, y*Faktor*k, z*Faktor*k)) zz = zz + 1 # Segmente erzeugen obj.MakeVariableTag(c4d.Tsegment, N3a) for i in range(0, N3a): obj.SetSegment(i, 3, True) # Spline schliessen obj[c4d.SPLINEOBJECT_CLOSED] = True obj.Message(c4d.MSG_UPDATE) return obj #************************************************************************ def CreateSplineFuenfecke(): obj = c4d.BaseObject(c4d.Ospline) obj.SetName("Spline-Fünfecke") obj.ResizeObject(N5*5) zz = 0 for i in xrange(N5): for j in xrange(5): x = Punkte[Fuenfecke[i][j]][0] y = Punkte[Fuenfecke[i][j]][1] z = Punkte[Fuenfecke[i][j]][2] obj.SetPoint(zz, c4d.Vector(x*Faktor*k, y*Faktor*k, z*Faktor*k)) zz = zz + 1 # Segmente erzeugen obj.MakeVariableTag(c4d.Tsegment, N5) for i in range(0, N5): obj.SetSegment(i, 5, True) # Spline schliessen obj[c4d.SPLINEOBJECT_CLOSED] = True obj.Message(c4d.MSG_UPDATE) return obj #************************************************************************ def main(): nullobj1 = CreateNullobjekt1() nullobj2 = CreateNullobjekt2() # Ecken nullobj3 = CreateNullobjekt3() # Kanten nullobj4 = CreateNullobjekt4() # Polygone plyobj1 = CreateDreiecke() plyobj2 = CreateDreiecke1() plyobj3 = CreateFuenfecke() splobj1 = CreateSplineDreiecke() splobj2 = CreateSplineDreiecke1() splobj3 = CreateSplineFuenfecke() doc.InsertObject(nullobj1, None, None, True) doc.InsertObject(nullobj4, nullobj1, None, True) doc.InsertObject(nullobj3, nullobj1, None, True) doc.InsertObject(nullobj2, nullobj1, None, True) doc.InsertObject(splobj3, nullobj3, None, True) doc.InsertObject(splobj2, nullobj3, None, True) doc.InsertObject(splobj1, nullobj3, None, True) doc.InsertObject(plyobj3, nullobj4, None, True) doc.InsertObject(plyobj2, nullobj4, None, True) doc.InsertObject(plyobj1, nullobj4, None, True) # Kugeln auf Eckpunkte setzen for i in range(0, NP): obj = c4d.BaseObject(c4d.Osphere) obj[c4d.PRIM_SPHERE_RAD] = Radius obj.SetName(str(i)) x = Punkte[i][0] y = Punkte[i][1] z = Punkte[i][2] obj.SetAbsPos(c4d.Vector(x*Faktor*k, y*Faktor*k, z*Faktor*k)) doc.InsertObject(obj, nullobj2, None, True) c4d.EventAdd() if __name__=='__main__': main()