""" Pentadentrite 27.01.2022 (c) Jürgen Meier (www.3d-meier.de) """ import c4d import random import math # Variablen und Konstanten Titel = 'Pentadentrite' # Name N = 100000 # Anzahl Punkte Nv = 100 # Anzahl Punkte verwerfen dx = 0.250 # Breite Polygon dy = 0.250 # Hoehe Polygon Faktor = 1000 # Skalierungsfaktor r = math.sqrt((6 - math.sqrt(5))/31.0) # Konstante AA =math.asin(((math.sqrt(5)-1)/4.0)*math.sqrt((25 + math.sqrt(5))/62.0)) a = r*math.cos(AA) b = r*math.sin(AA) c = r*math.cos(AA + math.radians(72)) d = r*math.sin(AA + math.radians(72)) e = r*math.cos(AA - math.radians(144)) f = r*math.sin(AA - math.radians(144)) g = r*math.cos(AA - math.radians(72)) h = r*math.sin(AA - math.radians(72)) k = a + c l = b + d m = k + a n = l + b o = m - r*math.cos(AA + math.radians(36)) p = n - r*math.sin(AA + math.radians(36)) s = o + r*math.cos(math.radians(72) - AA) t = p - r*math.sin(math.radians(72) - AA) 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,5) if zufall == 0: x = a*xa - b*y y = b*xa + a*y if zufall == 1: x = c*xa - d*y + a y = d*xa + c*y + b if zufall == 2: x = a*xa - b*y + k y = b*xa + a*y + l if zufall == 3: x = e*xa - f*y + m y = f*xa + e*y + n if zufall == 4: x = g*xa - h*y + o y = h*xa + g*y + p if zufall == 5: x = a*xa - b*y + s y = b*xa + a*y + t xa = x for i in xrange(0,N): zufall = random.randint(0,5) if zufall == 0: x = a*xa - b*y y = b*xa + a*y if zufall == 1: x = c*xa - d*y + a y = d*xa + c*y + b if zufall == 2: x = a*xa - b*y + k y = b*xa + a*y + l if zufall == 3: x = e*xa - f*y + m y = f*xa + e*y + n if zufall == 4: x = g*xa - h*y + o y = h*xa + g*y + p if zufall == 5: x = a*xa - b*y + s y = b*xa + a*y + t 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()