""" Kachelung 16 10.09.2015 """ import c4d import math # Variablen und Konstanten N = 32 # Anzahl Punkte x r = 1.0 # Kantenlänge Achtseck und Quadrat ri = 0.5*r*(1 + math.sqrt(2.0)) # Inkreisradius Achteck a = r/2.0 NS = 5 # Anzahl Sechsecke von der Mitte in einer Richtung if NS%2 ==0: # nur ungerade NS zulassen NS = NS +1 h = 0.5*math.sqrt(3.0) *r h1 = 0.25*math.sqrt(3.0) *r h2 = 0.5*a b = 0.5*a*math.sqrt(3.0) Faktor = 1000 # Skalierungsfaktor Fuenfeck1 = [] Fuenfeck2 = [] Fuenfeck3 = [] Fuenfeck4 = [] Fuenfeck5 = [] Fuenfeck6 = [] Inversion = True #Inversion = False def Invers(z): if abs(z) == 0: z = complex(z.real, z.imag + 0.0001) return 1/z def CreateNullobjekt(): obj = c4d.BaseObject(c4d.Onull) # Nullobjekt erzeugen obj.SetName("Kachelung 16") 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) # Fünfecke 1 ************************************************************************** def CreateSplineObjectF1(): # Splineobjekte erzeugen obj = c4d.BaseObject(c4d.Ospline) obj.ResizeObject(N*5*(2*NS+1)*(2*NS+1)) dt = r/N # Unterteilung Kante dta = a/N zz = 0 # Zähler Punkte # Quadratdaten erzeugen for i in range(0,N): z = complex(i * dt, 0) z = Drehung(z, -120) Fuenfeck1.append(z) for i in range(0,N): z = complex(i * dta, 0) z = Drehung(z, -60) + complex(-0.5*r, h) Fuenfeck1.append(z) for i in range(0,N): z = complex(i * dta, 0) + complex(-0.5*a, h + 0.5*h) Fuenfeck1.append(z) for i in range(0,N): z = complex(i * dta, 0) z = Drehung(z, 60) + complex(0.5*a, h + 0.5*h) Fuenfeck1.append(z) for i in range(0,N): z = complex(i * dt, 0) z = Drehung(z, 120) + complex(0.5*r, h) Fuenfeck1.append(z) for k in range(0,2*NS+1): #for k in range(0,1): y0 = -(2*h+h1)*NS + k*(2*h+h1) for j in range(0,2*NS+1): #for j in range(0,1): x0 = -(2*r+h2)*NS + j*(2*r+h2) for i in range(0,5*N): z = Fuenfeck1[i] + complex(-(NS-k)*(0.5*r+0.5*a), -(NS-j)*b) + 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, 5*N, True) obj[c4d.SPLINEOBJECT_CLOSED] = True obj.SetName("Fünfeck 1") obj.Message(c4d.MSG_UPDATE) return obj # Fünfecke 2 ************************************************************** def CreateSplineObjectF2(): # Splineobjekte erzeugen obj = c4d.BaseObject(c4d.Ospline) obj.ResizeObject(N*5*(2*NS+1)*(2*NS+1)) dt = r/N # Unterteilung Kante dta = a/N zz = 0 # Zähler Punkte # Quadratdaten erzeugen for i in range(0,N): z = complex(i * dt, 0) z = Drehung(z, -120) Fuenfeck2.append(z) for i in range(0,N): z = complex(i * dta, 0) z = Drehung(z, -60) + complex(-0.5*r, h) Fuenfeck2.append(z) for i in range(0,N): z = complex(i * dta, 0) + complex(-0.5*a, h + 0.5*h) Fuenfeck2.append(z) for i in range(0,N): z = complex(i * dta, 0) z = Drehung(z, 60) + complex(0.5*a, h + 0.5*h) Fuenfeck2.append(z) for i in range(0,N): z = complex(i * dt, 0) z = Drehung(z, 120) + complex(0.5*r, h) Fuenfeck2.append(z) for i in range(0,5*N): Fuenfeck2[i] = Drehung(Fuenfeck2[i], 60) for k in range(0,2*NS+1): y0 = -(2*h+h1)*NS + k*(2*h+h1) for j in range(0,2*NS+1): x0 = -(2*r+h2)*NS + j*(2*r+h2) for i in range(0,5*N): z = Fuenfeck2[i] + complex(-(NS-k)*(0.5*r+0.5*a), -(NS-j)*b) + 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, 5*N, True) obj[c4d.SPLINEOBJECT_CLOSED] = True obj.SetName("Fünfeck 2") obj.Message(c4d.MSG_UPDATE) return obj # Fünfecke 3 ************************************************************** def CreateSplineObjectF3(): # Splineobjekte erzeugen obj = c4d.BaseObject(c4d.Ospline) obj.ResizeObject(N*5*(2*NS+1)*(2*NS+1)) dt = r/N # Unterteilung Kante dta = a/N zz = 0 # Zähler Punkte # Quadratdaten erzeugen for i in range(0,N): z = complex(i * dt, 0) z = Drehung(z, -120) Fuenfeck3.append(z) for i in range(0,N): z = complex(i * dta, 0) z = Drehung(z, -60) + complex(-0.5*r, h) Fuenfeck3.append(z) for i in range(0,N): z = complex(i * dta, 0) + complex(-0.5*a, h + 0.5*h) Fuenfeck3.append(z) for i in range(0,N): z = complex(i * dta, 0) z = Drehung(z, 60) + complex(0.5*a, h + 0.5*h) Fuenfeck3.append(z) for i in range(0,N): z = complex(i * dt, 0) z = Drehung(z, 120) + complex(0.5*r, h) Fuenfeck3.append(z) for i in range(0,5*N): Fuenfeck3[i] = Drehung(Fuenfeck3[i], 120) for k in range(0,2*NS+1): y0 = -(2*h+h1)*NS + k*(2*h+h1) for j in range(0,2*NS+1): x0 = -(2*r+h2)*NS + j*(2*r+h2) for i in range(0,5*N): z = Fuenfeck3[i] + complex(-(NS-k)*(0.5*r+0.5*a), -(NS-j)*b) + 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, 5*N, True) obj[c4d.SPLINEOBJECT_CLOSED] = True obj.SetName("Fünfeck 3") obj.Message(c4d.MSG_UPDATE) return obj # Fünfecke 4 ************************************************************** def CreateSplineObjectF4(): # Splineobjekte erzeugen obj = c4d.BaseObject(c4d.Ospline) obj.ResizeObject(N*5*(2*NS+1)*(2*NS+1)) dt = r/N # Unterteilung Kante dta = a/N zz = 0 # Zähler Punkte # Quadratdaten erzeugen for i in range(0,N): z = complex(i * dt, 0) z = Drehung(z, -120) Fuenfeck4.append(z) for i in range(0,N): z = complex(i * dta, 0) z = Drehung(z, -60) + complex(-0.5*r, h) Fuenfeck4.append(z) for i in range(0,N): z = complex(i * dta, 0) + complex(-0.5*a, h + 0.5*h) Fuenfeck4.append(z) for i in range(0,N): z = complex(i * dta, 0) z = Drehung(z, 60) + complex(0.5*a, h + 0.5*h) Fuenfeck4.append(z) for i in range(0,N): z = complex(i * dt, 0) z = Drehung(z, 120) + complex(0.5*r, h) Fuenfeck4.append(z) for i in range(0,5*N): Fuenfeck4[i] = Drehung(Fuenfeck4[i], 180) for k in range(0,2*NS+1): y0 = -(2*h+h1)*NS + k*(2*h+h1) for j in range(0,2*NS+1): x0 = -(2*r+h2)*NS + j*(2*r+h2) for i in range(0,5*N): z = Fuenfeck4[i] + complex(-(NS-k)*(0.5*r+0.5*a), -(NS-j)*b) + 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, 5*N, True) obj[c4d.SPLINEOBJECT_CLOSED] = True obj.SetName("Fünfeck 4") obj.Message(c4d.MSG_UPDATE) return obj # Fünfecke 5 ************************************************************** def CreateSplineObjectF5(): # Splineobjekte erzeugen obj = c4d.BaseObject(c4d.Ospline) obj.ResizeObject(N*5*(2*NS+1)*(2*NS+1)) dt = r/N # Unterteilung Kante dta = a/N zz = 0 # Zähler Punkte # Quadratdaten erzeugen for i in range(0,N): z = complex(i * dt, 0) z = Drehung(z, -120) Fuenfeck5.append(z) for i in range(0,N): z = complex(i * dta, 0) z = Drehung(z, -60) + complex(-0.5*r, h) Fuenfeck5.append(z) for i in range(0,N): z = complex(i * dta, 0) + complex(-0.5*a, h + 0.5*h) Fuenfeck5.append(z) for i in range(0,N): z = complex(i * dta, 0) z = Drehung(z, 60) + complex(0.5*a, h + 0.5*h) Fuenfeck5.append(z) for i in range(0,N): z = complex(i * dt, 0) z = Drehung(z, 120) + complex(0.5*r, h) Fuenfeck5.append(z) for i in range(0,5*N): Fuenfeck5[i] = Drehung(Fuenfeck5[i], 240) for k in range(0,2*NS+1): y0 = -(2*h+h1)*NS + k*(2*h+h1) for j in range(0,2*NS+1): x0 = -(2*r+h2)*NS + j*(2*r+h2) for i in range(0,5*N): z = Fuenfeck5[i] + complex(-(NS-k)*(0.5*r+0.5*a), -(NS-j)*b) + 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, 5*N, True) obj[c4d.SPLINEOBJECT_CLOSED] = True obj.SetName("Fünfeck 5") obj.Message(c4d.MSG_UPDATE) return obj # Fünfecke 6 ************************************************************** def CreateSplineObjectF6(): # Splineobjekte erzeugen obj = c4d.BaseObject(c4d.Ospline) obj.ResizeObject(N*5*(2*NS+1)*(2*NS+1)) dt = r/N # Unterteilung Kante dta = a/N zz = 0 # Zähler Punkte # Quadratdaten erzeugen for i in range(0,N): z = complex(i * dt, 0) z = Drehung(z, -120) Fuenfeck6.append(z) for i in range(0,N): z = complex(i * dta, 0) z = Drehung(z, -60) + complex(-0.5*r, h) Fuenfeck6.append(z) for i in range(0,N): z = complex(i * dta, 0) + complex(-0.5*a, h + 0.5*h) Fuenfeck6.append(z) for i in range(0,N): z = complex(i * dta, 0) z = Drehung(z, 60) + complex(0.5*a, h + 0.5*h) Fuenfeck6.append(z) for i in range(0,N): z = complex(i * dt, 0) z = Drehung(z, 120) + complex(0.5*r, h) Fuenfeck6.append(z) for i in range(0,5*N): Fuenfeck6[i] = Drehung(Fuenfeck6[i], 300) for k in range(0,2*NS+1): y0 = -(2*h+h1)*NS + k*(2*h+h1) for j in range(0,2*NS+1): x0 = -(2*r+h2)*NS + j*(2*r+h2) for i in range(0,5*N): z = Fuenfeck6[i] + complex(-(NS-k)*(0.5*r+0.5*a), -(NS-j)*b) + 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, 5*N, True) obj[c4d.SPLINEOBJECT_CLOSED] = True obj.SetName("Fünfeck 6") obj.Message(c4d.MSG_UPDATE) return obj def main(): nullobj = CreateNullobjekt() slinobj1 = CreateSplineObjectF6() slinobj2 = CreateSplineObjectF5() slinobj3 = CreateSplineObjectF4() slinobj4 = CreateSplineObjectF3() slinobj5 = CreateSplineObjectF2() slinobj6 = CreateSplineObjectF1() doc.InsertObject(nullobj, None, None, True) doc.InsertObject(slinobj1, nullobj, None, True) doc.InsertObject(slinobj2, nullobj, None, True) doc.InsertObject(slinobj3, nullobj, None, True) doc.InsertObject(slinobj4, nullobj, None, True) doc.InsertObject(slinobj5, nullobj, None, True) doc.InsertObject(slinobj6, nullobj, None, True) c4d.EventAdd() if __name__=='__main__': main()