<p>这取决于这些点最初代表的是什么。仅仅有一个点数组通常不足以从中导出原始流形。你需要知道哪一点在一起。在</p>
<p>最常见的底层边界表示(“brep”)是一组三角形。这就是OpenGL和Directx的输入。我写了一个Python <a href="http://rsmith.home.xs4all.nl/software/index.html#stl2pov" rel="nofollow noreferrer">software</a>,它可以将<a href="http://en.wikipedia.org/wiki/STL_%28file_format%29" rel="nofollow noreferrer">STL</a>格式的三角形网格转换为PDF图像。也许你可以根据自己的目的来调整。插值一个三角形通常是不必要的,但做起来相当麻烦。在两个原始点之间各创建三个新点。这三个点形成一个内三角形,曲面的其余部分形成三个三角形。这样你就把一个三角形变成了四个三角形。在</p>
<p>如果这些点是样条曲线曲面面片的控制点(如<a href="http://en.wikipedia.org/wiki/NURBS" rel="nofollow noreferrer">NURBS</a>,或<a href="http://en.wikipedia.org/wiki/B%C3%A9zier_surface" rel="nofollow noreferrer">Bézier surfaces</a>),则必须知道哪些点一起构成面片。因为这些是参数化曲面,一旦知道控制点,就可以确定曲面上的所有点。下面是Bézier曲面的函数。参数u和v是曲面的参数坐标。它们沿面片的两个相邻边从0到1。控制点是k帴ij。在</p>
<p><img src="https://i.stack.imgur.com/e0f3k.png" alt="formula of Bézier patch"/></p>
<p>B函数是每个控制点的权函数</p>
<p><img src="https://i.stack.imgur.com/pmzm7.png" alt="weight functions"/></p>
<p>假设您要用10x10个点的网格来近似Bézier曲面。要做到这一点,您必须计算函数<strong>p</strong>对于在10个步骤中从0到1的u和v(生成步骤很容易用<code>numpy.linspace</code>完成)。在</p>
<p>对于每个(u,v)对,<strong>p</strong>返回一个三维点。在</p>
<p>如果您想可视化这些点,可以使用matplotlib中的<a href="http://matplotlib.org/mpl_toolkits/mplot3d/tutorial.html" rel="nofollow noreferrer">mplot3d</a>。在</p>