""" Kachelung 61 31.10.2016 """ 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 Abstand_x = 2*(riv + ria) Abstand_y = (riv + ria)* math.sqrt(3.0) Versatz_x = riv + ria 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 = [] 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 61") 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) # Dreiecke 3 ****************************************************************************** def CreateSplineObjectD3(): 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) 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, h) # Dreieck drehen und verschieben for i in range(0,3*N): Dreieck3[i] = Drehung(Dreieck3[i], -15) + complex(r/math.sqrt(2.0), 0) # Dreieck duplizieren und spiegeln for i in range(0,3*N): z = complex(Dreieck3[i].real, -Dreieck3[i].imag) Dreieck3.append(z) # Dreiecke verschieben for i in range(0,6*N): Dreieck3[i] = Dreieck3[i] + complex(riv + h + r/math.sqrt(2.0), 0) # Dreiecke drehen for i in range(0,6*N): Dreieck3[i] = Drehung(Dreieck3[i], -30) # Dreiecke duplizieren und spiegeln for i in range(0,6*N): z = complex(Dreieck3[i].real, -Dreieck3[i].imag) Dreieck3.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 = 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)*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 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)*2) 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(riv + h + r/math.sqrt(2.0), 0) # Viereck drehen for i in range(0,4*N): Viereck[i] = Drehung(Viereck[i], -30) # Viereck duplizieren und spiegeln for i in range(0,4*N): z = complex(Viereck[i].real, -Viereck[i].imag) Viereck.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*2): 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)*2) for i in range(0, (2*NS+1)*(2*NS+1)*2): 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)*6) 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 duplizieren und drehen for i in range(0,3*N*2): z = Drehung(Dreieck2[i], 60) Dreieck2.append(z) for i in range(0,3*N*2): z = Drehung(Dreieck2[i], -60) 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*6): 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)*6) for i in range(0, (2*NS+1)*(2*NS+1)*6): 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)*2) 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(r/math.sqrt(2.0) + c, 0) # Raute verschieben for i in range(0,4*N): Raute2[i] = Raute2[i] + complex(riv + h + r/math.sqrt(2.0), 0) # Raute drehen for i in range(0,4*N): Raute2[i] = Drehung( Raute2[i], -30) # Raute duplizieren und spiegeln for i in range(0,4*N): 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*2): 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)*2) for i in range(0, (2*NS+1)*(2*NS+1)*2): 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)*3) 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 duplizieren und drehen for i in range(0,8*N): z = Drehung(Achteck[i], 60.0) Achteck.append(z) for i in range(0,8*N): z = Drehung(Achteck[i], -60.0) 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*3): 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)*3) for i in range(0, (2*NS+1)*(2*NS+1)*3): 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)*12) 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], -360/24.0) Raute1.append(z) # Rauten duplizieren und drehen for k in range(1,6): for i in range(0,4*N*2): z = Drehung( Raute1[i], -60*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*12): 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)*12) for i in range(0, (2*NS+1)*(2*NS+1)*12): 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)*18) 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) # Dreiecke duplizieren und drehen for k in range(1,6): for i in range(0,3*N*3): z = Drehung(Dreieck1[i], -60*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*18): 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)*18) for i in range(0, (2*NS+1)*(2*NS+1)*18): 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() 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(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()