Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import bpy
- import bmesh
- from random import random,randint
- from bpy_extras import object_utils
- from math import cos,sin
- def IkedaMap(x,y):
- T=0.4-(6.0/(1.0+x**2.0+y**2.0))
- u=0.90
- ox=1.0+u*(x*cos(T)-y*sin(T))
- oy=u*(x*sin(T)+y*cos(T))
- return ox,oy
- def AizawaAtt(x,y,z,dt):
- a,b,c,d,e,f=0.25,0.95,0.6,3.5,0.7,0.1
- dx=(z-e)*x-d*y
- dy=d*x+(z-e)*y
- dz=c+b*z-(z**3/3)-(x**2+y**2)*(1+a*z)+f*z*x**3
- dx*=dt;dy*=dt;dz*=dt
- x+=dx;y+=dy;z+=dz
- return x,y,z
- def ThomasAtt(x,y,z,dt):
- b=0.208186
- dx=sin(y)-b*x
- dy=sin(z)-b*y
- dz=sin(x)-b*z
- dx*=dt;dy*=dt;dz*=dt
- x+=dx;y+=dy;z+=dz
- return x,y,z
- def LorentzAtt(x,y,z,dt):
- o,p,b=10.0,28.0,8.0/3.0
- dx=o*(y-x)
- dy=x*(p-z)-y
- dz=x*y-b*z
- dx*=dt;dy*=dt;dz*=dt
- x+=dx;y+=dy;z+=dz
- return x,y,z
- def ChaoticFlow(x,y,z,dt):
- dx=y
- dy=-x+y*z
- dz=1-y**2
- dx*=dt;dy*=dt;dz*=dt
- x+=dx;y+=dy;z+=dz
- return x,y,z
- def DiscreteSerie():
- for pt in range(120):
- verlist=[]
- x,y=float(randint(-500,500)),float(randint(-500,500))
- verlist.append((x,y,0))
- for stp in range(80):
- x,y=IkedaMap(x,y)
- verlist.append((x,y,0))
- mesh = bpy.data.meshes.new("Ikeda")
- bm = bmesh.new()
- for vertex in verlist:
- bm.verts.new(vertex)
- bm.verts.ensure_lookup_table()
- for x in range(len(verlist)-1):
- bm.edges.new([bm.verts[x],bm.verts[x+1]])
- bm.to_mesh(mesh)
- mesh.update()
- object_utils.object_data_add(bpy.context, mesh)
- def Attractor():
- verlist=[]
- x,y,z=(1,1,1)
- verlist.append((x,y,z))
- for stp in range(10000):
- x,y,z=ChaoticFlow(x,y,z,0.02)
- verlist.append((x,y,z))
- mesh = bpy.data.meshes.new("CF")
- bm = bmesh.new()
- for vertex in verlist:
- bm.verts.new(vertex)
- bm.verts.ensure_lookup_table()
- for x in range(len(verlist)-1):
- bm.edges.new([bm.verts[x],bm.verts[x+1]])
- bm.to_mesh(mesh)
- mesh.update()
- object_utils.object_data_add(bpy.context, mesh)
- Attractor()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement