""" Pickover Attraktor 21.12.2020 www.3d-meier.de """ import c4d import math # Variablen und Konstanten Titel = 'Pickover Attraktor' # Name a = -0.759494 # Konstante a b = 2.449367 # Konstante b c = 1.253165 # Konstante c d = 1.5 # Konstante d Nv = 100 # Anzahl Punkte verwerfen N = 500000 # Anzahl Punkte dx = 1.0 # Kantenlaenge Quadrat x0 = 0.1 # Startwert x y0 = 0.1 # Startwert y z0 = 0.1 # Startwert z Faktor = 1000 # Skalierungsfaktor def CreatePolygonObject(): obj = c4d.BaseObject(c4d.Opolygon) obj.ResizeObject(8*N, 6*N) obj.SetName(Titel) # Zaehler fuer Punkte setzten zz = 0 # Zaehler fuer Polygone setzten zzz = 0 # Startwerte uebergeben xa = x0 ya = y0 z = z0 # Punkte verwerfen for i in xrange(0,Nv): # Neuen Wert berechnen x=math.sin(a*ya)-z*math.cos(b*xa) y=z*math.sin(c*xa)-math.cos(d*ya) z=math.sin(xa) # x Werte aktualisieren xa=x ya=y # Punkte berechnen for i in xrange(0,N): # Neuen Wert berechnen x=math.sin(a*ya)-z*math.cos(b*xa) y=z*math.sin(c*xa)-math.cos(d*ya) z=math.sin(xa) # x und y Werte aktualisieren xa=x ya=y # Punktanfang (erster Punkt des Wuerfels) pa=zz # Punkte für Wuerfel erzeugen obj.SetPoint(zz, c4d.Vector((x*Faktor)-dx,(z*Faktor)-dx,(y*Faktor)-dx)) zz=zz+1 obj.SetPoint(zz, c4d.Vector((x*Faktor)+dx,(z*Faktor)-dx,(y*Faktor)-dx)) zz=zz+1 obj.SetPoint(zz, c4d.Vector((x*Faktor)+dx,(z*Faktor)-dx,(y*Faktor)+dx)) zz=zz+1 obj.SetPoint(zz, c4d.Vector((x*Faktor)-dx,(z*Faktor)-dx,(y*Faktor)+dx)) zz=zz+1 obj.SetPoint(zz, c4d.Vector((x*Faktor)-dx,(z*Faktor)+dx,(y*Faktor)-dx)) zz=zz+1 obj.SetPoint(zz, c4d.Vector((x*Faktor)+dx,(z*Faktor)+dx,(y*Faktor)-dx)) zz=zz+1 obj.SetPoint(zz, c4d.Vector((x*Faktor)+dx,(z*Faktor)+dx,(y*Faktor)+dx)) zz=zz+1 obj.SetPoint(zz, c4d.Vector((x*Faktor)-dx,(z*Faktor)+dx,(y*Faktor)+dx)) zz=zz+1 # Polygone des Wuerfels setzen obj.SetPolygon(zzz, c4d.CPolygon(pa,pa+1,pa+2,pa+3)) zzz=zzz+1 obj.SetPolygon(zzz, c4d.CPolygon(pa+4,pa+5,pa+6,pa+7)) zzz=zzz+1 obj.SetPolygon(zzz, c4d.CPolygon(pa,pa+1,pa+5,pa+4)) zzz=zzz+1 obj.SetPolygon(zzz, c4d.CPolygon(pa+1,pa+2,pa+6,pa+5)) zzz=zzz+1 obj.SetPolygon(zzz, c4d.CPolygon(pa+2,pa+3,pa+7,pa+6)) zzz=zzz+1 obj.SetPolygon(zzz, c4d.CPolygon(pa+3,pa,pa+4,pa+7)) 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()