""" Pentagonhexakontaeder 1 16.01.2021 www.3d-meier.de http://dmccooey.com/polyhedra/RpentagonalHexecontahedron.html """ import c4d import math # Variablen und Konstanten Titel = 'Pentagonhexakontaeder 1' # Name NP = 92 # Anzahl Punkte N5 = 60 # Anzahl Fuenfecke Radius = 1 # Radius der Eckpunktkugeln phi = (1 + math.sqrt(5))/2.0 x = pow(((phi + math.sqrt(phi-5/27.0))/2.0),1/3.0) + pow(((phi - math.sqrt(phi-5/27.0))/2.0), 1/3.0) C0 = phi * math.sqrt(3 - (x**2)) / 2 C1 = phi * math.sqrt((x - 1 - (1/x)) * phi) / (2 * x) C2 = phi * math.sqrt((x - 1 - (1/x)) * phi) / 2 C3 = (x**2) * phi * math.sqrt(3 - (x**2)) / 2 C4 = phi * math.sqrt(1 - x + (1 + phi) / x) / 2 C5 = math.sqrt(x * (x + phi) + 1) / (2 * x) C6 = math.sqrt((x + 2) * phi + 2) / (2 * x) C7 = math.sqrt(-(x**2) * (2 + phi) + x * (1 + 3 * phi) + 4) / 2 C8 = (1 + phi) * math.sqrt(1 + (1/x)) / (2 * x) C9 = math.sqrt(2 + 3 * phi - 2 * x + (3/x)) / 2 C10 = math.sqrt((x**2)*(392 + 225*phi) + x*(249 + 670*phi) + (470 + 157*phi))/62 C11 = phi * math.sqrt(x * (x + phi) + 1) / (2 * x) C12 = phi * math.sqrt((x**2) + x + 1 + phi) / (2 * x) C13 = phi * math.sqrt((x**2) + 2 * x * phi + 2) / (2 * x) C14 = math.sqrt((x**2) * (1 + 2 * phi) - phi) / 2 C15 = phi * math.sqrt((x**2) + x) / 2 C16 = (phi**3) * math.sqrt(x * (x + phi) + 1) / (2 * (x**2)) C17 = math.sqrt((x**2)*(617 + 842*phi) + x*(919 + 1589*phi) + (627 + 784*phi))/62 C18 = (phi**2) * math.sqrt(x * (x + phi) + 1) / (2 * x) C19 = phi * math.sqrt(x * (x + phi) + 1) / 2 Punkte = [( C0, C1, C19), ( C0, -C1, -C19), ( -C0, -C1, C19), ( -C0, C1, -C19), ( C19, C0, C1), ( C19, -C0, -C1), (-C19, -C0, C1), (-C19, C0, -C1), ( C1, C19, C0), ( C1, -C19, -C0), ( -C1, -C19, C0), ( -C1, C19, -C0), ( 0.0, C5, C18), ( 0.0, C5, -C18), ( 0.0, -C5, C18), ( 0.0, -C5, -C18), ( C18, 0.0, C5), ( C18, 0.0, -C5), (-C18, 0.0, C5), (-C18, 0.0, -C5), ( C5, C18, 0.0), ( C5, -C18, 0.0), ( -C5, C18, 0.0), ( -C5, -C18, 0.0), ( C10, 0.0, C17), ( C10, 0.0, -C17), (-C10, 0.0, C17), (-C10, 0.0, -C17), ( C17, C10, 0.0), ( C17, -C10, 0.0), (-C17, C10, 0.0), (-C17, -C10, 0.0), ( 0.0, C17, C10), ( 0.0, C17, -C10), ( 0.0, -C17, C10), ( 0.0, -C17, -C10), ( C3, -C6, C16), ( C3, C6, -C16), ( -C3, C6, C16), ( -C3, -C6, -C16), ( C16, -C3, C6), ( C16, C3, -C6), (-C16, C3, C6), (-C16, -C3, -C6), ( C6, -C16, C3), ( C6, C16, -C3), ( -C6, C16, C3), ( -C6, -C16, -C3), ( C2, C9, C15), ( C2, -C9, -C15), ( -C2, -C9, C15), ( -C2, C9, -C15), ( C15, C2, C9), ( C15, -C2, -C9), (-C15, -C2, C9), (-C15, C2, -C9), ( C9, C15, C2), ( C9, -C15, -C2), ( -C9, -C15, C2), ( -C9, C15, -C2), ( C7, C8, C14), ( C7, -C8, -C14), ( -C7, -C8, C14), ( -C7, C8, -C14), ( C14, C7, C8), ( C14, -C7, -C8), (-C14, -C7, C8), (-C14, C7, -C8), ( C8, C14, C7), ( C8, -C14, -C7), ( -C8, -C14, C7), ( -C8, C14, -C7), ( C4, -C12, C13), ( C4, C12, -C13), ( -C4, C12, C13), ( -C4, -C12, -C13), ( C13, -C4, C12), ( C13, C4, -C12), (-C13, C4, C12), (-C13, -C4, -C12), ( C12, -C13, C4), ( C12, C13, -C4), (-C12, C13, C4), (-C12, -C13, -C4), ( C11, C11, C11), ( C11, C11, -C11), ( C11, -C11, C11), ( C11, -C11, -C11), (-C11, C11, C11), (-C11, C11, -C11), (-C11, -C11, C11), (-C11, -C11, -C11)] Fuenfecke = [( 24, 0, 2, 14, 36 ), ( 24, 36, 72, 86, 76 ), ( 24, 76, 40, 16, 52 ), ( 24, 52, 64, 84, 60 ), ( 24, 60, 48, 12, 0 ), ( 25, 1, 3, 13, 37 ), ( 25, 37, 73, 85, 77 ), ( 25, 77, 41, 17, 53 ), ( 25, 53, 65, 87, 61 ), ( 25, 61, 49, 15, 1 ), ( 26, 2, 0, 12, 38 ), ( 26, 38, 74, 88, 78 ), ( 26, 78, 42, 18, 54 ), ( 26, 54, 66, 90, 62 ), ( 26, 62, 50, 14, 2 ), ( 27, 3, 1, 15, 39 ), ( 27, 39, 75, 91, 79 ), ( 27, 79, 43, 19, 55 ), ( 27, 55, 67, 89, 63 ), ( 27, 63, 51, 13, 3 ), ( 28, 4, 5, 17, 41 ), ( 28, 41, 77, 85, 81 ), ( 28, 81, 45, 20, 56 ), ( 28, 56, 68, 84, 64 ), ( 28, 64, 52, 16, 4 ), ( 29, 5, 4, 16, 40 ), ( 29, 40, 76, 86, 80 ), ( 29, 80, 44, 21, 57 ), ( 29, 57, 69, 87, 65 ), ( 29, 65, 53, 17, 5 ), ( 30, 7, 6, 18, 42 ), ( 30, 42, 78, 88, 82 ), ( 30, 82, 46, 22, 59 ), ( 30, 59, 71, 89, 67 ), ( 30, 67, 55, 19, 7 ), ( 31, 6, 7, 19, 43 ), ( 31, 43, 79, 91, 83 ), ( 31, 83, 47, 23, 58 ), ( 31, 58, 70, 90, 66 ), ( 31, 66, 54, 18, 6 ), ( 32, 8, 11, 22, 46 ), ( 32, 46, 82, 88, 74 ), ( 32, 74, 38, 12, 48 ), ( 32, 48, 60, 84, 68 ), ( 32, 68, 56, 20, 8 ), ( 33, 11, 8, 20, 45 ), ( 33, 45, 81, 85, 73 ), ( 33, 73, 37, 13, 51 ), ( 33, 51, 63, 89, 71 ), ( 33, 71, 59, 22, 11 ), ( 34, 10, 9, 21, 44 ), ( 34, 44, 80, 86, 72 ), ( 34, 72, 36, 14, 50 ), ( 34, 50, 62, 90, 70 ), ( 34, 70, 58, 23, 10 ), ( 35, 9, 10, 23, 47 ), ( 35, 47, 83, 91, 75 ), ( 35, 75, 39, 15, 49 ), ( 35, 49, 61, 87, 69 ), ( 35, 69, 57, 21, 9 )] Faktor = 100 # Skalierungsfaktor k = 1 # Korrekturfaktor #************************************************************************ 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 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 # Zaehler fuer Polygone zuruecksetzen 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 CreateSplineFuenfecke(): obj = c4d.BaseObject(c4d.Ospline) obj.SetName("Spline-Fuenfecke") 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 = CreateFuenfecke() splobj1 = 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(splobj1, nullobj3, 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()