""" Kachelung 15 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/math.sqrt(2.0) NS = 7 # Anzahl Sechsecke von der Mitte in einer Richtung if NS%2 ==0: # nur ungerade NS zulassen NS = NS +1 Faktor = 1000 # Skalierungsfaktor Fuenfeck1 = [] Fuenfeck2 = [] Fuenfeck3 = [] Fuenfeck4 = [] Inversion = True #Inversion = False def Invers(z): #if abs(z) == 0: # z = complex(z.real, z.imag + 0.0001) z = complex(z.real + 0.01, z.imag + 0.01) return 1/z def CreateNullobjekt(): obj = c4d.BaseObject(c4d.Onull) # Nullobjekt erzeugen obj.SetName("Kachelung 15") 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 * dta, 0) z = Drehung(z, -45) Fuenfeck1.append(z) for i in range(0,N): z = complex(0.5 * r + i * dt, 0.5 * r) Fuenfeck1.append(z) for i in range(0,N): z = complex(0.5 * r + r, 0.5 * r - i * dt) Fuenfeck1.append(z) for i in range(0,N): z = complex(0.5 * r + r - i * dt, -0.5 * r) Fuenfeck1.append(z) for i in range(0,N): z = complex(i * dta, 0) z = Drehung(z, -135) + complex(0.5*r, -0.5*r) Fuenfeck1.append(z) for k in range(0,2*NS+1): y0 = -3*r*NS + k*3*r for j in range(0,2*NS+1): x0 = -2*r*NS + j*2*r for i in range(0,5*N): z = Fuenfeck1[i] + complex(NS-k, (NS-j)*r) + 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 * dta, 0) z = Drehung(z, -45) Fuenfeck2.append(z) for i in range(0,N): z = complex(0.5 * r + i * dt, 0.5 * r) Fuenfeck2.append(z) for i in range(0,N): z = complex(0.5 * r + r, 0.5 * r - i * dt) Fuenfeck2.append(z) for i in range(0,N): z = complex(0.5 * r + r - i * dt, -0.5 * r) Fuenfeck2.append(z) for i in range(0,N): z = complex(i * dta, 0) z = Drehung(z, -135) + complex(0.5*r, -0.5*r) Fuenfeck2.append(z) for i in range(0,5*N): Fuenfeck2[i] = Drehung(Fuenfeck2[i], -90) for k in range(0,2*NS+1): y0 = -3*r*NS + k*3*r for j in range(0,2*NS+1): x0 = -2*r*NS + j*2*r for i in range(0,5*N): z = Fuenfeck2[i] + complex(NS-k, (NS-j)*r) + 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 * dta, 0) z = Drehung(z, -45) Fuenfeck3.append(z) for i in range(0,N): z = complex(0.5 * r + i * dt, 0.5 * r) Fuenfeck3.append(z) for i in range(0,N): z = complex(0.5 * r + r, 0.5 * r - i * dt) Fuenfeck3.append(z) for i in range(0,N): z = complex(0.5 * r + r - i * dt, -0.5 * r) Fuenfeck3.append(z) for i in range(0,N): z = complex(i * dta, 0) z = Drehung(z, -135) + complex(0.5*r, -0.5*r) Fuenfeck3.append(z) for i in range(0,5*N): Fuenfeck3[i] = Drehung(Fuenfeck3[i], -180) for k in range(0,2*NS+1): y0 = -3*r*NS + k*3*r for j in range(0,2*NS+1): x0 = -2*r*NS + j*2*r for i in range(0,5*N): z = Fuenfeck3[i] + complex(NS-k, (NS-j)*r) + 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 * dta, 0) z = Drehung(z, -45) Fuenfeck4.append(z) for i in range(0,N): z = complex(0.5 * r + i * dt, 0.5 * r) Fuenfeck4.append(z) for i in range(0,N): z = complex(0.5 * r + r, 0.5 * r - i * dt) Fuenfeck4.append(z) for i in range(0,N): z = complex(0.5 * r + r - i * dt, -0.5 * r) Fuenfeck4.append(z) for i in range(0,N): z = complex(i * dta, 0) z = Drehung(z, -135) + complex(0.5*r, -0.5*r) Fuenfeck4.append(z) for i in range(0,5*N): Fuenfeck4[i] = Drehung(Fuenfeck4[i], -270) for k in range(0,2*NS+1): y0 = -3*r*NS + k*3*r for j in range(0,2*NS+1): x0 = -2*r*NS + j*2*r for i in range(0,5*N): z = Fuenfeck4[i] + complex(NS-k, (NS-j)*r) + 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 def main(): nullobj = CreateNullobjekt() slinobj1 = CreateSplineObjectF4() slinobj2 = CreateSplineObjectF3() slinobj3 = CreateSplineObjectF2() slinobj4 = 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) c4d.EventAdd() if __name__=='__main__': main()