Не до конца доделал это в своём аддоне, но, поделюсь. Лемниската Бернулли - кривая рисующая бесконечность, то есть, лежачую восьмёрку. Если вытянуть её вершины по оси Z, то можно получить сегмент косы (про волосы). У меня получается меш из вершин, соединённых эджами.
class OBJECT_OT_mesh_lemniscat_add(Operator):
bl_idname = "object.mesh_lemniscat_add"
bl_label = "Lemniskat Bernoulli"
bl_options = {'REGISTER', 'UNDO'}
number = IntProperty(name = "Number",
description = "",
default = 1, min = 1)
resolution = IntProperty(name = "Resolution",
description = "",
default = 10, min = 1, max = 100)
width = FloatProperty(name = "Width",
description = "",
default = 0.1, min = 0.0)
conical = FloatProperty(name = "Conical",
description = "",step=1,
default = 0.0, min = 0.0)
def draw(self,context):
layout = self.layout
layout.prop(self,"number")
layout.prop(self,"resolution")
layout.prop(self,"width")
layout.prop(self,"conical")
def execute(self, context):
props = self.properties
n = props.number
res = props.resolution
w = props.width
c = props.conical
verts = []
edges = []
faces = []
x,y,z = 0,0,0
alpha = 1
val = 36*n
for i in range(0,val):
t = radians(i*10)
x = alpha * sqrt(2) * cos(t) / (sin(t)**2 + 1)
y = alpha * sqrt(2) * cos(t) * sin(t) / (sin(t)**2 + 1)
verts.append([x,y,z])
z+=w
alpha-=c
for i,v in enumerate(verts):
if i != 0:
edges.append((i-1,i))
obj = create_mesh_object(context, verts, edges, faces, "Leminiscate")
return {'FINISHED'}