""" Sierpinski Pentagon 27.01.2022 (c) Juergen Meier (www.3d-meier.de) """ import c4d import random import math # Variablen und Konstanten Titel = 'Sierpinski Pentagon' # Name N = 100000 # Anzahl Punkte Nv = 100 # Anzahl Punkte verwerfen dx = 1.50 # Breite Polygon dy = 1.50 # Hoehe Polygon Faktor = 1000 # Skalierungsfaktor r = (3 - math.sqrt(5.0))/2.0 # 0.38196601125 a = (math.sqrt(5) - 1)/2 # 0.61803398875 b = 0.5 + r*math.cos(math.radians(36)) # 0.809016994375 c = r*(math.sin(math.radians(72)) + math.sin(math.radians(36))) # 0.587785252292 d = r*math.cos(math.radians(36)) # 0.309016994375 e = 2*r*math.sin(math.radians(72)) + r*math.sin(math.radians(36)) # 0.951056516295 f = r*math.cos(math.radians(36)) - r*math.cos(math.radians(72)) - r # -0.190983005625 def CreatePolygonObject(): obj = c4d.BaseObject(c4d.Opolygon) obj.ResizeObject(4*N, N) obj.SetName(Titel) # Startwert der Berechnung x = 0.5 xa = x y = 0.5 # Zaehler fuer Punkte setzten zz = 0 # Zaehler fuer Polygone setzten zzz = 0 for i in xrange(0,Nv): zufall = random.randint(0,4) if zufall == 0: x = r*xa y = r*y if zufall == 1: x = r*xa + a y = r*y if zufall == 2: x = r*xa + b y = r*y + c if zufall == 3: x = r*xa + d y = r*y + e if zufall == 4: x = r*xa + f y = r*y + c xa = x for i in xrange(0,N): zufall = random.randint(0,5) if zufall == 0: x = r*xa y = r*y if zufall == 1: x = r*xa + a y = r*y if zufall == 2: x = r*xa + b y = r*y + c if zufall == 3: x = r*xa + d y = r*y + e if zufall == 4: x = r*xa + f y = r*y + c xa = x obj.SetPoint(zz, c4d.Vector((Faktor*x-dx/2.0),(Faktor*y+dy/2.0),0)) zz=zz+1 obj.SetPoint(zz, c4d.Vector((Faktor*x-dx/2.0),(Faktor*y-dy/2.0),0)) zz=zz+1 obj.SetPoint(zz, c4d.Vector((Faktor*x+dx/2.0),(Faktor*y+dy/2.0),0)) zz=zz+1 obj.SetPoint(zz, c4d.Vector((Faktor*x+dx/2.0),(Faktor*y-dy/2.0),0)) zz=zz+1 obj.SetPolygon(zzz, c4d.CPolygon(zz-1,zz-2,zz-4,zz-3)) zzz=zzz+1 # obj.Message(c4d.MSG_UPDATE) return obj def main(): plyobj = CreatePolygonObject() # doc.InsertObject(plyobj, None, None, True) c4d.EventAdd() if __name__=='__main__': main()