""" Kachelung 64 31.10.2015 """ import c4d import math # Variablen und Konstanten N = 5 # Anzahl Punkte pro Kante r = 1.0 # Kantenlaenge h = 0.5 * math.sqrt(3.0) * r # Hoehe Dreieck riv = r/(2.0*math.tan(math.pi/24.0)) # Inkreisradius 24-eck ruv = r/(2*math.sin(math.pi/24.0)) # Umkreisradius 24-eck ria = r/(2.0*math.tan(math.pi/8.0)) # Inkreisradius 8-eck rua = r/(2*math.sin(math.pi/8.0)) # Umkreisradius 8-eck a = r*math.cos(5*math.pi/24.0) # Daten Raute 1 b = r*math.sin(5*math.pi/24.0) # Daten Raute 1 c = r*math.cos(5*math.pi/12.0) # Daten Raute 2 d = r*math.sin(5*math.pi/12.0) # Daten Raute 2 w3 = 45 # kleiner Winkel der Raute 3 e = r*math.cos(w3*math.pi/360.0) # Daten Raute 3 f = r*math.sin(w3*math.pi/360.0) # Daten Raute 3 Abstand_x = math.sqrt(2.0)*(2*riv + 2*ria) Abstand_y = 0.5*Abstand_x Versatz_x = Abstand_y NS = 5 # Anzahl Wiederholungen in eine Rchtung if NS%2 ==0: # nur ungerade NS zulassen NS = NS +1 Faktor = 1000 # Skalierungsfaktor Vierundzwanzigeck = [] Achteck = [] Raute1 = [] Raute2 = [] Raute3 = [] Viereck = [] Dreieck1 = [] Dreieck2 = [] Dreieck3 = [] #Inversion = True Inversion = False def Invers(z): return 1/z def CreateNullobjekt(): obj = c4d.BaseObject(c4d.Onull) # Nullobjekt erzeugen obj.SetName("Kachelung 64") obj.Message(c4d.MSG_UPDATE) return obj def Drehung(z, Grad): Winkel = Grad * math.pi/180 x = z.real y = z.imag x1 = math.cos(Winkel) * x + math.sin(Winkel) * y y1 = -math.sin(Winkel) * x + math.cos(Winkel) * y return complex(x1, y1) # Rauten 3 *************************************************************************************** def CreateSplineObjectR3(): obj = c4d.BaseObject(c4d.Ospline) # Splineobjekt erzeugen obj.ResizeObject(N*4*(2*NS+1)*(2*NS+1)*8) dt= r/N zz = 0 # Zaehler Punkte # Rautendaten erzeugen for i in range(0,N): z = complex(i * dt, 0) z = Drehung(z, -w3/2.0) Raute3.append(z) for i in range(0,N): z = complex(i * dt, 0) z = Drehung(z, w3/2.0) + complex(e, f) Raute3.append(z) for i in range(0,N): z = complex(i * dt, 0) z = Drehung(z, 180 - w3/2.0) + complex(2*e, 0) Raute3.append(z) for i in range(0,N): z = complex(i * dt, 0) z = Drehung(z, -180 + w3/2.0) + complex(e, -f) Raute3.append(z) # Raute drehen for i in range(0,4*N): Raute3[i] = Drehung(Raute3[i], -w3/2.0) # Rauten duplizieren und drehen for k in range(1,8): for i in range(0,4*N): z = Drehung( Raute3[i], -45*k) Raute3.append(z) # Rauten verschieben for i in range(0,4*N*8): Raute3[i] = Raute3[i] + complex(Versatz_x, 0) for k in range(0,2*NS+1): y0 = -Abstand_y*NS + k*Abstand_y for j in range(0,2*NS+1): if k%2 == 0.0: x0 = -Abstand_x*NS + j*Abstand_x + Versatz_x else: x0 = -Abstand_x*NS + j*Abstand_x for i in range(0,4*N*8): z = Raute3[i] + complex(x0, y0) if Inversion: z = Invers(z) obj.SetPoint(zz, c4d.Vector(z.real*Faktor, z.imag*Faktor, 0.0)) zz = zz + 1 obj.MakeVariableTag(c4d.Tsegment, (2*NS+1)*(2*NS+1)*8) for i in range(0, (2*NS+1)*(2*NS+1)*8): obj.SetSegment(i, 4*N, True) obj[c4d.SPLINEOBJECT_CLOSED] = True obj.SetName("Rauten 3") obj.Message(c4d.MSG_UPDATE) return obj # Dreiecke 3 ****************************************************************************** def CreateSplineObjectD3(): obj = c4d.BaseObject(c4d.Ospline) # Splineobjekt erzeugen obj.ResizeObject(N*3*(2*NS+1)*(2*NS+1)*8) dt= r/N zz = 0 # Zaehler Punkte # Dreiecksdaten erzeugen for i in range(0,N): z = complex( -0.5 *r + i * dt, 0) Dreieck3.append(z) for i in range(0,N): z = complex(i * dt, 0) z = Drehung(z, 120) + complex(0.5*r, 0) Dreieck3.append(z) for i in range(0,N): z = complex(i * dt, 0) z = Drehung(z, -120) + complex(0, -h) Dreieck3.append(z) # Dreieck verschieben for i in range(0,3*N): Dreieck3[i] = Dreieck3[i] + complex(-0.5*r, 0) # Dreieck duplizieren, drehen und verschieben for i in range(0,3*N): z = Drehung(Dreieck3[i], -90) + complex(0, r) Dreieck3.append(z) # Dreiecke verschieben for i in range(0,6*N): Dreieck3[i] = Dreieck3[i] + complex(r + r/math.sqrt(2.0), -r - r/math.sqrt(2.0)) # Dreiecke duplizieren und drehen for k in range(1,4): for i in range(0,3*N*2): z = Drehung(Dreieck3[i], -90*k) Dreieck3.append(z) # Dreiecke verschieben for i in range(0,3*N*8): Dreieck3[i] = Dreieck3[i] + complex(Versatz_x, 0) for k in range(0,2*NS+1): y0 = -Abstand_y*NS + k*Abstand_y for j in range(0,2*NS+1): if k%2 == 0.0: x0 = -Abstand_x*NS + j*Abstand_x + Versatz_x else: x0 = -Abstand_x*NS + j*Abstand_x for i in range(0,3*N*8): z = Dreieck3[i] + complex(x0, y0) if Inversion: z = Invers(z) obj.SetPoint(zz, c4d.Vector(z.real*Faktor, z.imag*Faktor, 0.0)) zz = zz + 1 obj.MakeVariableTag(c4d.Tsegment, (2*NS+1)*(2*NS+1)*8) for i in range(0, (2*NS+1)*(2*NS+1)*8): obj.SetSegment(i, 3*N, True) obj[c4d.SPLINEOBJECT_CLOSED] = True obj.SetName("Dreiecke 3") obj.Message(c4d.MSG_UPDATE) return obj # Vierecke *************************************************************************************** def CreateSplineObjectQ(): obj = c4d.BaseObject(c4d.Ospline) # Splineobjekt erzeugen obj.ResizeObject(N*4*(2*NS+1)*(2*NS+1)*8) dt= r/N zz = 0 # Zaehler Punkte # Viereckdaten erzeugen for i in range(0,N): z = complex(i * dt, 0) z = Drehung(z, -45) + complex(-r/math.sqrt(2.0), 0) Viereck.append(z) for i in range(0,N): z = complex(i * dt, 0) z = Drehung(z, 45) + complex(0, r/math.sqrt(2.0)) Viereck.append(z) for i in range(0,N): z = complex(i * dt, 0) z = Drehung(z, 135) + complex(r/math.sqrt(2.0), 0) Viereck.append(z) for i in range(0,N): z = complex(i * dt, 0) z = Drehung(z, -135) + complex(0, -r/math.sqrt(2.0)) Viereck.append(z) # Viereck verschieben for i in range(0,4*N): Viereck[i] = Viereck[i] + complex(r + r/math.sqrt(2.0), 0) # Viereck duplizieren und drehen for k in range(1,8): for i in range(0,4*N): z = Drehung(Viereck[i], -45*k) Viereck.append(z) # Dreiecke verschieben for i in range(0,4*N*8): Viereck[i] = Viereck[i] + complex(Versatz_x, 0) for k in range(0,2*NS+1): y0 = -Abstand_y*NS + k*Abstand_y for j in range(0,2*NS+1): if k%2 == 0.0: x0 = -Abstand_x*NS + j*Abstand_x + Versatz_x else: x0 = -Abstand_x*NS + j*Abstand_x for i in range(0,4*N*8): z = Viereck[i] + complex(x0, y0) if Inversion: z = Invers(z) obj.SetPoint(zz, c4d.Vector(z.real*Faktor, z.imag*Faktor, 0.0)) zz = zz + 1 obj.MakeVariableTag(c4d.Tsegment, (2*NS+1)*(2*NS+1)*8) for i in range(0, (2*NS+1)*(2*NS+1)*8): obj.SetSegment(i, 4*N, True) obj[c4d.SPLINEOBJECT_CLOSED] = True obj.SetName("Vierecke") obj.Message(c4d.MSG_UPDATE) return obj # Dreiecke 2 ****************************************************************************** def CreateSplineObjectD2(): obj = c4d.BaseObject(c4d.Ospline) # Splineobjekt erzeugen obj.ResizeObject(N*3*(2*NS+1)*(2*NS+1)*4) dt= r/N zz = 0 # Zaehler Punkte # Dreiecksdaten erzeugen for i in range(0,N): z = complex(-0.5*r + i * dt, 0) Dreieck2.append(z) for i in range(0,N): z = complex(i * dt, 0) z = Drehung(z, -120) + complex(0.5*r, 0) Dreieck2.append(z) for i in range(0,N): z = complex(i * dt, 0) z = Drehung(z, 120) + complex(0, h) Dreieck2.append(z) # Dreieck verschieben for i in range(0,3*N): Dreieck2[i] = Dreieck2[i] + complex(riv + ria, ria) # Dreieck spiegeln for i in range(0,3*N): z = complex(Dreieck2[i].real, -Dreieck2[i].imag) Dreieck2.append(z) # Dreiecke drehen for i in range(0,3*N*2): Dreieck2[i] = Drehung(Dreieck2[i], 45) # Dreiecke spiegeln for i in range(0,3*N*2): z = complex(Dreieck2[i].real,-Dreieck2[i].imag) Dreieck2.append(z) for k in range(0,2*NS+1): y0 = -Abstand_y*NS + k*Abstand_y for j in range(0,2*NS+1): if k%2 == 0.0: x0 = -Abstand_x*NS + j*Abstand_x + Versatz_x else: x0 = -Abstand_x*NS + j*Abstand_x for i in range(0,3*N*4): z = Dreieck2[i] + complex(x0, y0) if Inversion: z = Invers(z) obj.SetPoint(zz, c4d.Vector(z.real*Faktor, z.imag*Faktor, 0.0)) zz = zz + 1 obj.MakeVariableTag(c4d.Tsegment, (2*NS+1)*(2*NS+1)*4) for i in range(0, (2*NS+1)*(2*NS+1)*4): obj.SetSegment(i, 3*N, True) obj[c4d.SPLINEOBJECT_CLOSED] = True obj.SetName("Dreiecke 2") obj.Message(c4d.MSG_UPDATE) return obj # Rauten 2 *************************************************************************************** def CreateSplineObjectR2(): obj = c4d.BaseObject(c4d.Ospline) # Splineobjekt erzeugen obj.ResizeObject(N*4*(2*NS+1)*(2*NS+1)*4) dt= r/N zz = 0 # Zaehler Punkte # Rautendaten erzeugen for i in range(0,N): z = complex(i * dt, 0) z = Drehung(z, -75) + complex(-c, 0) Raute2.append(z) for i in range(0,N): z = complex(i * dt, 0) z = Drehung(z, 75) + complex(0, d) Raute2.append(z) for i in range(0,N): z = complex(i * dt, 0) z = Drehung(z, 105) + complex(c, 0) Raute2.append(z) for i in range(0,N): z = complex(i * dt, 0) z = Drehung(z, -105) + complex(0, -d) Raute2.append(z) # Raute verschieben for i in range(0,4*N): Raute2[i] = Raute2[i] + complex(ria + h + c, riv + ria) # Raute spiegeln for i in range(0,4*N): z = complex(-Raute2[i].real, Raute2[i].imag) Raute2.append(z) # Raute drehen for i in range(0,4*N*2): Raute2[i] = Drehung( Raute2[i], 45) # Raute duplizieren und spiegeln for i in range(0,4*N*2): z = complex(Raute2[i].real, - Raute2[i].imag) Raute2.append(z) for k in range(0,2*NS+1): y0 = -Abstand_y*NS + k*Abstand_y for j in range(0,2*NS+1): if k%2 == 0.0: x0 = -Abstand_x*NS + j*Abstand_x + Versatz_x else: x0 = -Abstand_x*NS + j*Abstand_x for i in range(0,4*N*4): z = Raute2[i] + complex(x0, y0) if Inversion: z = Invers(z) obj.SetPoint(zz, c4d.Vector(z.real*Faktor, z.imag*Faktor, 0.0)) zz = zz + 1 obj.MakeVariableTag(c4d.Tsegment, (2*NS+1)*(2*NS+1)*4) for i in range(0, (2*NS+1)*(2*NS+1)*4): obj.SetSegment(i, 4*N, True) obj[c4d.SPLINEOBJECT_CLOSED] = True obj.SetName("Rauten 2") obj.Message(c4d.MSG_UPDATE) return obj # Achtecke **************************************************************************** def CreateSplineObjectA(): # Splineobjekte erzeugen obj = c4d.BaseObject(c4d.Ospline) obj.ResizeObject(N*8*(2*NS+1)*(2*NS+1)*2) dt= r/N # Unterteilung Kante zz = 0 # Zaehler Punkte # Siebeneckdaten erzeugen for i in range(0,N): z = complex(ria, -0.5 * r + i * dt) Achteck.append(z) for k in range(1,8): for j in range(0,N): z = Drehung(Achteck[j], -360*k/8.0) Achteck.append(z) # Achteck verschieben for i in range(0,8*N): Achteck[i] = Achteck[i] + complex(riv + ria, 0) # Achteck drehen for i in range(0,8*N): Achteck[i] = Drehung(Achteck[i], 45.0) # Achteck spiegeln for i in range(0,8*N): z = complex(Achteck[i].real, -Achteck[i].imag) Achteck.append(z) for k in range(0,2*NS+1): y0 = -Abstand_y*NS + k*Abstand_y for j in range(0,2*NS+1): if k%2 == 0.0: x0 = -Abstand_x*NS + j*Abstand_x + Versatz_x else: x0 = -Abstand_x*NS + j*Abstand_x for i in range(0,8*N*2): z = Achteck[i] + complex(x0, y0) if Inversion: z = Invers(z) obj.SetPoint(zz, c4d.Vector(z.real*Faktor, z.imag*Faktor, 0.0)) zz = zz + 1 obj.MakeVariableTag(c4d.Tsegment, (2*NS+1)*(2*NS+1)*2) for i in range(0, (2*NS+1)*(2*NS+1)*2): obj.SetSegment(i, 8*N, True) obj[c4d.SPLINEOBJECT_CLOSED] = True obj.SetName("Achtecke") obj.Message(c4d.MSG_UPDATE) return obj # Rauten 1 *************************************************************************************** def CreateSplineObjectR1(): obj = c4d.BaseObject(c4d.Ospline) # Splineobjekt erzeugen obj.ResizeObject(N*4*(2*NS+1)*(2*NS+1)*16) dt= r/N zz = 0 # Zaehler Punkte # Rautendaten erzeugen for i in range(0,N): z = complex(i * dt, 0) z = Drehung(z, 37.5) Raute1.append(z) for i in range(0,N): z = complex(i * dt, 0) z = Drehung(z, -37.5) + complex(a, -b) Raute1.append(z) for i in range(0,N): z = complex(i * dt, 0) z = Drehung(z, -142.5) + complex(2*a, 0) Raute1.append(z) for i in range(0,N): z = complex(i * dt, 0) z = Drehung(z, 142.5) + complex(a, b) Raute1.append(z) # Raute verschieben for i in range(0,4*N): Raute1[i] = Raute1[i] + complex(ruv, 0) # Raute drehen for i in range(0,4*N): Raute1[i] = Drehung(Raute1[i], -22.5) # Raute duplizieren und drehen for i in range(0,4*N): z = Drehung(Raute1[i], 15) Raute1.append(z) for i in range(0,4*N): z = Drehung(Raute1[i], 30) Raute1.append(z) for i in range(0,4*N): z = Drehung(Raute1[i], 45) Raute1.append(z) # Rauten duplizieren und drehen for k in range(1,4): for i in range(0,4*N*4): z = Drehung( Raute1[i], -90*k) Raute1.append(z) for k in range(0,2*NS+1): y0 = -Abstand_y*NS + k*Abstand_y for j in range(0,2*NS+1): if k%2 == 0.0: x0 = -Abstand_x*NS + j*Abstand_x + Versatz_x else: x0 = -Abstand_x*NS + j*Abstand_x for i in range(0,4*N*16): z = Raute1[i] + complex(x0, y0) if Inversion: z = Invers(z) obj.SetPoint(zz, c4d.Vector(z.real*Faktor, z.imag*Faktor, 0.0)) zz = zz + 1 obj.MakeVariableTag(c4d.Tsegment, (2*NS+1)*(2*NS+1)*16) for i in range(0, (2*NS+1)*(2*NS+1)*16): obj.SetSegment(i, 4*N, True) obj[c4d.SPLINEOBJECT_CLOSED] = True obj.SetName("Rauten 1") obj.Message(c4d.MSG_UPDATE) return obj # Dreiecke 1 ****************************************************************************** def CreateSplineObjectD1(): obj = c4d.BaseObject(c4d.Ospline) # Splineobjekt erzeugen obj.ResizeObject(N*3*(2*NS+1)*(2*NS+1)*20) dt= r/N zz = 0 # Zaehler Punkte # Dreiecksdaten erzeugen for i in range(0,N): z = complex( -0.5 *r + i * dt, riv) Dreieck1.append(z) for i in range(0,N): z = complex(i * dt, 0) z = Drehung(z, -120) + complex(0.5*r, riv) Dreieck1.append(z) for i in range(0,N): z = complex(i * dt, 0) z = Drehung(z, 120) + complex(0, riv + h) Dreieck1.append(z) # Dreieck duplizieren und drehen for i in range(0,3*N): z = Drehung(Dreieck1[i], 360/24.0) Dreieck1.append(z) for i in range(0,3*N): z = Drehung(Dreieck1[i], -360/24.0) Dreieck1.append(z) for i in range(0,3*N): z = Drehung(Dreieck1[i], 360/12.0) Dreieck1.append(z) for i in range(0,3*N): z = Drehung(Dreieck1[i], -360/12.0) Dreieck1.append(z) # Dreiecke duplizieren und drehen for k in range(1,4): for i in range(0,3*N*5): z = Drehung(Dreieck1[i], -90*k) Dreieck1.append(z) for k in range(0,2*NS+1): y0 = -Abstand_y*NS + k*Abstand_y for j in range(0,2*NS+1): if k%2 == 0.0: x0 = -Abstand_x*NS + j*Abstand_x + Versatz_x else: x0 = -Abstand_x*NS + j*Abstand_x for i in range(0,3*N*20): z = Dreieck1[i] + complex(x0, y0) if Inversion: z = Invers(z) obj.SetPoint(zz, c4d.Vector(z.real*Faktor, z.imag*Faktor, 0.0)) zz = zz + 1 obj.MakeVariableTag(c4d.Tsegment, (2*NS+1)*(2*NS+1)*20) for i in range(0, (2*NS+1)*(2*NS+1)*20): obj.SetSegment(i, 3*N, True) obj[c4d.SPLINEOBJECT_CLOSED] = True obj.SetName("Dreiecke 1") obj.Message(c4d.MSG_UPDATE) return obj # Vierundzwanzigecke **************************************************************************** def CreateSplineObjectV(): # Splineobjekte erzeugen obj = c4d.BaseObject(c4d.Ospline) obj.ResizeObject(N*24*(2*NS+1)*(2*NS+1)) dt= r/N # Unterteilung Kante zz = 0 # Zaehler Punkte # Vierundzwanzigeckdaten erzeugen for i in range(0,N): z = complex(-0.5 * r + i * dt, -riv ) Vierundzwanzigeck.append(z) for k in range(1,24): for j in range(0,N): z = Drehung(Vierundzwanzigeck[j], -360*k/24.0) Vierundzwanzigeck.append(z) for k in range(0,2*NS+1): y0 = -Abstand_y*NS + k*Abstand_y for j in range(0,2*NS+1): if k%2 == 0.0: x0 = -Abstand_x*NS + j*Abstand_x + Versatz_x else: x0 = -Abstand_x*NS + j*Abstand_x for i in range(0,24*N): z = Vierundzwanzigeck[i] + complex(x0, y0) if Inversion: z = Invers(z) obj.SetPoint(zz, c4d.Vector(z.real*Faktor, z.imag*Faktor, 0.0)) zz = zz + 1 obj.MakeVariableTag(c4d.Tsegment, (2*NS+1)*(2*NS+1)) for i in range(0, (2*NS+1)*(2*NS+1)): obj.SetSegment(i, 24*N, True) obj[c4d.SPLINEOBJECT_CLOSED] = True obj.SetName("Vierundzwanzigecke") obj.Message(c4d.MSG_UPDATE) return obj def main(): nullobj = CreateNullobjekt() slinobj1 = CreateSplineObjectV() slinobj2 = CreateSplineObjectA() slinobj3 = CreateSplineObjectQ() slinobj4 = CreateSplineObjectR1() slinobj5 = CreateSplineObjectR2() slinobj9 = CreateSplineObjectR3() slinobj6 = CreateSplineObjectD1() slinobj7 = CreateSplineObjectD2() slinobj8 = CreateSplineObjectD3() doc.InsertObject(nullobj, None, None, True) doc.InsertObject(slinobj8, nullobj, None, True) doc.InsertObject(slinobj7, nullobj, None, True) doc.InsertObject(slinobj6, nullobj, None, True) doc.InsertObject(slinobj9, nullobj, None, True) doc.InsertObject(slinobj5, nullobj, None, True) doc.InsertObject(slinobj4, nullobj, None, True) doc.InsertObject(slinobj3, nullobj, None, True) doc.InsertObject(slinobj2, nullobj, None, True) doc.InsertObject(slinobj1, nullobj, None, True) c4d.EventAdd() if __name__=='__main__': main()