创建正弦网格
在Blender中创建正弦波网格的Python代码:
import math
import Blender
from Blender import NMesh
x = -1 * math.pi
mesh = NMesh.GetRaw()
vNew = NMesh.Vert( x, math.sin( x ), 0 )
mesh.verts.append( vNew )
while x < math.pi:
x += 0.1
vOld = vNew
vNew = NMesh.Vert( x, math.sin( x ), 0 )
mesh.verts.append( vNew )
mesh.addEdge( vOld, vNew )
NMesh.PutRaw( mesh, "SineWave", 1 )
Blender.Redraw()
绘制边线的算法
画一个线段与画三个线段相同,因此问题可以重述为:
How do you draw an arc on a sphere,
given two end points?
换句话说,在球体上的以下两个点之间绘制弧:
> P1 =(x1,y1,z1)
> P2 =(x2,y2,z2)
通过沿着弧P1P2绘制许多中点来解决此问题,如下所示:
>计算球体的半径:
R = sqrt( x12 + y12 + z12 )
>计算P1和P2之间的线的中点(m):
Pm = (xm, ym, zm)
xm = (x1 + x2) / 2
ym = (y1 + y2) / 2
zm = (z1 + z2) / 2
>计算到P1和P2之间的线的中点的长度:
Lm = sqrt( xm2, ym2, zm2 )
>计算球体半径与中点长度的比值:
k = R / Lm
>计算沿圆弧的中点:
Am = k * Pm = (k * xm, k * ym, k * zm)
对于P1到P2,创建两个边:
> P1到上午
>上午到P2
两个边缘将切入球体.要解决此问题,请计算P1Am和AmP2之间的中点.中点越多,线段将越接近球体的表面.
由于Blender的计算相当精确,因此生成的弧可能会(渐近地)被球体隐藏.创建三角形网格后,将其从球体移开几个单位(例如0.01左右).
使用样条线
另一个解决方案是根据以下内容创建spline:
>球体的半径(如上计算)
> P1
>我
> P2
产生的样条曲线必须移到球体的前面.
搅拌器艺术家论坛
Blender experts也将对如何解决这个问题有很好的想法;尝试问他们.
也可以看看