""" 3 Layer Attraktor (c) Juergen Meier (www.3d-meier.de) 25.12.2021 """ import c4d import math def CreateSplineObject(): # Variablen und Konstanten Name = "3 Layer Attractor" a1 = -4.1 # Konstante 3 Layer Attraktor a2 = 1.2 # Konstante 3 Layer Attraktor a3 = 13.45 # Konstante 3 Layer Attraktor c1 = 2.76 # Konstante 3 Layer Attraktor c2 = 0.6 # Konstante 3 Layer Attraktor c3 = 13.13 # Konstante 3 Layer Attraktor d = 1.8 # Konstante 3 Layer Attraktor Abstand = 0.05 # Mindestabstand zwischen 2 Punkten x0 = 1.0 # Startwerte y0 = 1.0 # Startwerte z0 = 1.0 # Startwerte Delta = 0.001 # Delta Wert fuer die Berechnung N = 235000 # Anzahl Punkte N0 =50000 # Anzahl Punke am Anfang verwerfen FaktorX = 250 # Skalierungsfaktor x FaktorY = 300 # Skalierungsfaktor y FaktorZ = 150 # Skalierungsfaktor z x = x0 # Startwerte zuweisen y = y0 # Startwerte zuweisen z = z0 # Startwerte zuweisen obj = c4d.BaseObject(c4d.Ospline) # Splineobjekt erzeugen obj.ResizeObject(N) # Groesse des Spline festlegen obj[c4d.SPLINEOBJECT_CLOSED] = False #obj[c4d.SPLINEOBJECT_TYPE] = c4d.SPLINETYPE_LINEAR obj[c4d.SPLINEOBJECT_TYPE] = c4d.SPLINETYPE_BSPLINE #obj[c4d.SPLINEOBJECT_TYPE] = c4d.SPLINETYPE_BEZIER obj.SetName(Name) xa=x0 ya=y0 za=z0 zz = 0 for i in range(0,N): b=((d*a2*a2*c3*c3)/(32*a3*a3*c2*c2))*math.sqrt((-a3*c2)/(a1*c1)) c=((a2*a2*c3*c3)/(4*a3*c2) - (a3*c1 + a1*c2)*b/d)/a2 dx=a1*x - a2*y + a3*z dy=-d*x*z + b dz=c1*x*y + c2*y*z + c3*z + c x=x + Delta * dx y=y + Delta * dy z=z + Delta * dz PP=math.sqrt((x-xa)*(x-xa)+(y-ya)*(y-ya)+(z-za)*(z-za)) if (i > N0): if (PP > Abstand): obj.SetPoint(zz, c4d.Vector(x*FaktorX, y*FaktorY, z*FaktorZ)) zz = zz + 1 xa=x ya=y za=z obj.ResizeObject(zz) obj.Message(c4d.MSG_UPDATE) return obj def main(): slinobj = CreateSplineObject() doc.InsertObject(slinobj, None, None, True) c4d.EventAdd() if __name__=='__main__': main()