Advertisement
Nontraxx

Blender Attractor Code

Mar 23rd, 2017
130
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.96 KB | None | 0 0
  1. import bpy
  2. import bmesh
  3. from random import random,randint
  4. from bpy_extras import object_utils
  5. from math import cos,sin
  6.  
  7. def IkedaMap(x,y):
  8.     T=0.4-(6.0/(1.0+x**2.0+y**2.0))
  9.     u=0.90
  10.     ox=1.0+u*(x*cos(T)-y*sin(T))
  11.     oy=u*(x*sin(T)+y*cos(T))
  12.     return ox,oy
  13.  
  14. def AizawaAtt(x,y,z,dt):
  15.     a,b,c,d,e,f=0.25,0.95,0.6,3.5,0.7,0.1
  16.     dx=(z-e)*x-d*y
  17.     dy=d*x+(z-e)*y
  18.     dz=c+b*z-(z**3/3)-(x**2+y**2)*(1+a*z)+f*z*x**3
  19.     dx*=dt;dy*=dt;dz*=dt
  20.     x+=dx;y+=dy;z+=dz
  21.     return x,y,z
  22.  
  23. def ThomasAtt(x,y,z,dt):
  24.     b=0.208186
  25.     dx=sin(y)-b*x
  26.     dy=sin(z)-b*y
  27.     dz=sin(x)-b*z
  28.     dx*=dt;dy*=dt;dz*=dt
  29.     x+=dx;y+=dy;z+=dz
  30.     return x,y,z
  31.  
  32. def LorentzAtt(x,y,z,dt):
  33.     o,p,b=10.0,28.0,8.0/3.0
  34.     dx=o*(y-x)
  35.     dy=x*(p-z)-y
  36.     dz=x*y-b*z
  37.     dx*=dt;dy*=dt;dz*=dt
  38.     x+=dx;y+=dy;z+=dz
  39.     return x,y,z
  40.  
  41. def ChaoticFlow(x,y,z,dt):
  42.     dx=y
  43.     dy=-x+y*z
  44.     dz=1-y**2
  45.     dx*=dt;dy*=dt;dz*=dt
  46.     x+=dx;y+=dy;z+=dz
  47.     return x,y,z
  48.  
  49. def DiscreteSerie():
  50.     for pt in range(120):
  51.         verlist=[]  
  52.         x,y=float(randint(-500,500)),float(randint(-500,500))
  53.         verlist.append((x,y,0))
  54.         for stp in range(80):
  55.             x,y=IkedaMap(x,y)
  56.             verlist.append((x,y,0))
  57.         mesh = bpy.data.meshes.new("Ikeda")
  58.         bm = bmesh.new()
  59.         for vertex in verlist:
  60.             bm.verts.new(vertex)
  61.         bm.verts.ensure_lookup_table()
  62.         for x in range(len(verlist)-1):
  63.             bm.edges.new([bm.verts[x],bm.verts[x+1]])
  64.         bm.to_mesh(mesh)
  65.         mesh.update()
  66.         object_utils.object_data_add(bpy.context, mesh)
  67.        
  68. def Attractor():
  69.     verlist=[]  
  70.     x,y,z=(1,1,1)
  71.     verlist.append((x,y,z))
  72.     for stp in range(10000):
  73.         x,y,z=ChaoticFlow(x,y,z,0.02)
  74.         verlist.append((x,y,z))
  75.     mesh = bpy.data.meshes.new("CF")
  76.     bm = bmesh.new()
  77.     for vertex in verlist:
  78.         bm.verts.new(vertex)
  79.     bm.verts.ensure_lookup_table()
  80.     for x in range(len(verlist)-1):
  81.         bm.edges.new([bm.verts[x],bm.verts[x+1]])
  82.     bm.to_mesh(mesh)
  83.     mesh.update()
  84.     object_utils.object_data_add(bpy.context, mesh)
  85.  
  86. Attractor()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement