import bpy
import mathutils
def make_mesh(name):
me = bpy.data.meshes.new(name)
ob = bpy.data.objects.new(name, me)
bpy.context.scene.objects.link(ob)
return ob
def add_data(ob,verts,edges,faces):
me = ob.data
me.name = ob.name +' mesh'
me.from_pydata(verts,edges,faces)
me.update()
def sierpinski(verts,edges,faces,level,v0,v1,v2):
if level==0:
last=len(verts)
verts.extend([v0,v1,v2])
faces.append([last,last+1,last+2])
else:
sierpinski(verts,edges,faces,level-1,v0,(v0+v1)/2,(v0+v2)/2)
sierpinski(verts,edges,faces,level-1,v1,(v0+v1)/2,(v1+v2)/2)
sierpinski(verts,edges,faces,level-1,v2,(v0+v2)/2,(v1+v2)/2)
return
def main():
v0=mathutils.Vector(( 0.0, 1.0, 0.0))
v1=mathutils.Vector((-0.9, -0.4, 0.0))
v2=mathutils.Vector(( 0.9, -0.4, 0.0))
verts=[]
edges=[]
faces=[]
sierpinski(verts,edges,faces,5,v0,v1,v2)
ob=make_mesh('Sierpinski')
add_data(ob,verts,edges,faces)
main()
import bpy
import mathutils
def make_mesh(name):
me = bpy.data.meshes.new(name)
ob = bpy.data.objects.new(name, me)
bpy.context.scene.objects.link(ob)
return ob
def add_data(ob,verts,edges,faces):
me = ob.data
me.name = ob.name +' mesh'
me.from_pydata(verts,edges,faces)
me.update()
def sierpinski(verts,edges,faces,level,v0,v1,v2,v3):
if level==0:
last=len(verts)
verts.extend([v0,v1,v2,v3])
faces.append([last,last+1,last+2])
faces.append([last,last+3,last+2])
faces.append([last,last+3,last+1])
faces.append([last+1,last+2,last+3])
else:
sierpinski(verts,edges,faces,level-1,v0,(v0+v1)/2,(v0+v2)/2,(v0+v3)/2)
sierpinski(verts,edges,faces,level-1,v1,(v0+v1)/2,(v1+v2)/2,(v1+v3)/2)
sierpinski(verts,edges,faces,level-1,v2,(v0+v2)/2,(v1+v2)/2,(v2+v3)/2)
sierpinski(verts,edges,faces,level-1,v3,(v0+v3)/2,(v1+v3)/2,(v2+v3)/2)
return
def main():
v0=mathutils.Vector(( 0.0, 1.0, -0.4))
v1=mathutils.Vector((-0.9, -0.4, -0.4))
v2=mathutils.Vector(( 0.9, -0.4, -0.4))
v3=mathutils.Vector(( 0.0, 0.0667, 1))
verts=[]
edges=[]
faces=[]
sierpinski(verts,edges,faces,5,v0,v1,v2,v3)
ob=make_mesh('Sierpinski')
add_data(ob,verts,edges,faces)
main()
import bpy
import mathutils
import math
def make_mesh(name):
me = bpy.data.meshes.new(name)
ob = bpy.data.objects.new(name, me)
bpy.context.scene.objects.link(ob)
return ob
def add_data(ob,verts,edges,faces):
me = ob.data
me.name = ob.name +' mesh'
me.from_pydata(verts,edges,faces)
me.update()
lv = 12
k0 = 1
eul = mathutils.Euler((0.0, 0.0, math.radians( 60.0)), 'XYZ')
def fratree(verts,edges,faces,level,v0,v1):
dv = (v1-v0)
dn = dv.copy()*k0
dn.rotate(eul)
dn[2] = 0.01*(level+2)
v2 = v0 + dn
v3 = v1 + dn
v4 = (v1+v2)/2 + dn
last=len(verts)
verts.extend([v0,v1,v3,v4,v2])
faces.append([last,last+1,last+2,last+3,last+4])
if level!=0:
fratree(verts,edges,faces,level-1,v2,v4)
fratree(verts,edges,faces,level-1,v4,v3)
return
def main():
print('debug')
v0=mathutils.Vector(( 0.0, 0.0, 0.0))
v1=mathutils.Vector(( 1.0, 0.0, 0.0))
verts=[]
edges=[]
faces=[]
fratree(verts,edges,faces,lv,v0,v1)
ob=make_mesh('fratree')
add_data(ob,verts,edges,faces)
main()
import bpy
import mathutils
import math
def make_mesh(name):
me = bpy.data.meshes.new(name)
ob = bpy.data.objects.new(name, me)
bpy.data.collections[0].objects.link(ob)
return ob
def add_data(ob,verts,edges,faces):
me = ob.data
me.name = ob.name +' mesh'
me.from_pydata(verts,edges,faces)
me.update()
lv = 12
k0 = 1
eul = mathutils.Euler((0.0, 0.0, math.radians( 60.0)), 'XYZ')
def fratree(verts,edges,faces,level,v0,v1):
dv = (v1-v0)
dn = dv.copy()*k0
dn.rotate(eul)
dn[2] = 0.01*(level+2)
v2 = v0 + dn
v3 = v1 + dn
v4 = (v1+v2)/2 + dn
last=len(verts)
verts.extend([v0,v1,v3,v4,v2])
faces.append([last,last+1,last+2,last+3,last+4])
if level!=0:
fratree(verts,edges,faces,level-1,v2,v4)
fratree(verts,edges,faces,level-1,v4,v3)
return
def main():
for ob in bpy.data.collections[0].objects:
bpy.data.collections[0].objects.unlink(ob)
bpy.data.collections[0].objects.remove(ob)
print('debug')
v0=mathutils.Vector(( 0.0, 0.0, 0.0))
v1=mathutils.Vector(( 1.0, 0.0, 0.0))
verts=[]
edges=[]
faces=[]
fratree(verts,edges,faces,lv,v0,v1)
ob=make_mesh('fratree')
add_data(ob,verts,edges,faces)
main()
забавное видео про треугольник серпинского https://www.youtube.com/watch?v=-a_iyHtAkew (https://www.youtube.com/watch?v=-a_iyHtAkew)
забавное видео про треугольник серпинского https://www.youtube.com/watch?v=-a_iyHtAkew (https://www.youtube.com/watch?v=-a_iyHtAkew)
Благодарю за ссылку. Очень интересно!
В копилку:
ВВС: История математики (4 серии)
https://www.youtube.com/playlist?list=PLjgAy-o1xYoLklqU3tkpeS-qqanOwNY-1 (https://www.youtube.com/playlist?list=PLjgAy-o1xYoLklqU3tkpeS-qqanOwNY-1)