Files
ViewDesignEngine/docs/api/classvde_1_1curves_1_1NurbsSurface.html
T
茂之钳 2f111edcd5
CI / Build & Test (push) Failing after 33s
CI / Release Build (push) Failing after 31s
Build & Test / build-and-test (push) Has been cancelled
Build & Test / python-bindings (push) Has been cancelled
docs: generated API documentation (483 pages)
2026-07-24 11:55:47 +00:00

755 lines
39 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.9.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>ViewDesignEngine: vde::curves::NurbsSurface类 参考</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">ViewDesignEngine
&#160;<span id="projectnumber">3.1.0</span>
</div>
<div id="projectbrief">高性能 CAD 计算几何引擎</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- 制作者 Doxygen 1.9.1 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'搜索','.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','搜索');
$(document).ready(function() { init_search(); });
});
/* @license-end */</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(document).ready(function(){initNavTree('classvde_1_1curves_1_1NurbsSurface.html',''); initResizable(); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="summary">
<a href="#pub-methods">Public 成员函数</a> &#124;
<a href="#pub-static-methods">静态 Public 成员函数</a> &#124;
<a href="classvde_1_1curves_1_1NurbsSurface-members.html">所有成员列表</a> </div>
<div class="headertitle">
<div class="title">vde::curves::NurbsSurface类 参考<div class="ingroups"><a class="el" href="group__curves.html">曲线曲面模块 (vde::curves)</a></div></div> </div>
</div><!--header-->
<div class="contents">
<p>NURBS 张量积曲面
<a href="classvde_1_1curves_1_1NurbsSurface.html#details">更多...</a></p>
<p><code>#include &lt;<a class="el" href="nurbs__surface_8h_source.html">nurbs_surface.h</a>&gt;</code></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
Public 成员函数</h2></td></tr>
<tr class="memitem:aec7b5095337d5a19831d10c70a2f3e23"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classvde_1_1curves_1_1NurbsSurface.html#aec7b5095337d5a19831d10c70a2f3e23">NurbsSurface</a> (std::vector&lt; std::vector&lt; Point3D &gt;&gt; control_grid, std::vector&lt; double &gt; <a class="el" href="classvde_1_1curves_1_1NurbsSurface.html#aaf8908988e144edfc6597792299c66bc">knots_u</a>, std::vector&lt; double &gt; <a class="el" href="classvde_1_1curves_1_1NurbsSurface.html#a41faea6ee8c5af45774fb7d4ce5241a9">knots_v</a>, std::vector&lt; std::vector&lt; double &gt;&gt; <a class="el" href="classvde_1_1curves_1_1NurbsSurface.html#a64bb35b6d22edb50bd08e40a5d343cff">weights</a>, int <a class="el" href="classvde_1_1curves_1_1NurbsSurface.html#a33f6783b3b8f9a94cbc67715023cc34a">degree_u</a>, int <a class="el" href="classvde_1_1curves_1_1NurbsSurface.html#a9521000400b99d6198cee4023c46ca9f">degree_v</a>)</td></tr>
<tr class="memdesc:aec7b5095337d5a19831d10c70a2f3e23"><td class="mdescLeft">&#160;</td><td class="mdescRight">构造 NURBS 曲面 <a href="classvde_1_1curves_1_1NurbsSurface.html#aec7b5095337d5a19831d10c70a2f3e23">更多...</a><br /></td></tr>
<tr class="separator:aec7b5095337d5a19831d10c70a2f3e23"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a63a1b12f9e6efca9b3b7bc1bb69661bf"><td class="memItemLeft" align="right" valign="top">Point3D&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classvde_1_1curves_1_1NurbsSurface.html#a63a1b12f9e6efca9b3b7bc1bb69661bf">evaluate</a> (double u, double v) const</td></tr>
<tr class="memdesc:a63a1b12f9e6efca9b3b7bc1bb69661bf"><td class="mdescLeft">&#160;</td><td class="mdescRight">求曲面点 S(u,v) <a href="classvde_1_1curves_1_1NurbsSurface.html#a63a1b12f9e6efca9b3b7bc1bb69661bf">更多...</a><br /></td></tr>
<tr class="separator:a63a1b12f9e6efca9b3b7bc1bb69661bf"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6a7c1b3493bf5ac9303ee8c008541147"><td class="memItemLeft" align="right" valign="top">Vector3D&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classvde_1_1curves_1_1NurbsSurface.html#a6a7c1b3493bf5ac9303ee8c008541147">derivative_u</a> (double u, double v) const</td></tr>
<tr class="memdesc:a6a7c1b3493bf5ac9303ee8c008541147"><td class="mdescLeft">&#160;</td><td class="mdescRight">u 向偏导数 <a href="classvde_1_1curves_1_1NurbsSurface.html#a6a7c1b3493bf5ac9303ee8c008541147">更多...</a><br /></td></tr>
<tr class="separator:a6a7c1b3493bf5ac9303ee8c008541147"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:afbcf23fc3c7308bd734a4371e9b71bba"><td class="memItemLeft" align="right" valign="top">Vector3D&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classvde_1_1curves_1_1NurbsSurface.html#afbcf23fc3c7308bd734a4371e9b71bba">derivative_v</a> (double u, double v) const</td></tr>
<tr class="memdesc:afbcf23fc3c7308bd734a4371e9b71bba"><td class="mdescLeft">&#160;</td><td class="mdescRight">v 向偏导数 <a href="classvde_1_1curves_1_1NurbsSurface.html#afbcf23fc3c7308bd734a4371e9b71bba">更多...</a><br /></td></tr>
<tr class="separator:afbcf23fc3c7308bd734a4371e9b71bba"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2db98f16640f9413d1d46d2569073aa4"><td class="memItemLeft" align="right" valign="top">Vector3D&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classvde_1_1curves_1_1NurbsSurface.html#a2db98f16640f9413d1d46d2569073aa4">normal</a> (double u, double v) const</td></tr>
<tr class="memdesc:a2db98f16640f9413d1d46d2569073aa4"><td class="mdescLeft">&#160;</td><td class="mdescRight">单位法向量 <a href="classvde_1_1curves_1_1NurbsSurface.html#a2db98f16640f9413d1d46d2569073aa4">更多...</a><br /></td></tr>
<tr class="separator:a2db98f16640f9413d1d46d2569073aa4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a33f6783b3b8f9a94cbc67715023cc34a"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classvde_1_1curves_1_1NurbsSurface.html#a33f6783b3b8f9a94cbc67715023cc34a">degree_u</a> () const</td></tr>
<tr class="memdesc:a33f6783b3b8f9a94cbc67715023cc34a"><td class="mdescLeft">&#160;</td><td class="mdescRight">u 向阶次 <a href="classvde_1_1curves_1_1NurbsSurface.html#a33f6783b3b8f9a94cbc67715023cc34a">更多...</a><br /></td></tr>
<tr class="separator:a33f6783b3b8f9a94cbc67715023cc34a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9521000400b99d6198cee4023c46ca9f"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classvde_1_1curves_1_1NurbsSurface.html#a9521000400b99d6198cee4023c46ca9f">degree_v</a> () const</td></tr>
<tr class="memdesc:a9521000400b99d6198cee4023c46ca9f"><td class="mdescLeft">&#160;</td><td class="mdescRight">v 向阶次 <a href="classvde_1_1curves_1_1NurbsSurface.html#a9521000400b99d6198cee4023c46ca9f">更多...</a><br /></td></tr>
<tr class="separator:a9521000400b99d6198cee4023c46ca9f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aed017258f17d108c3086010822313f83"><td class="memItemLeft" align="right" valign="top">std::array&lt; int, 2 &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classvde_1_1curves_1_1NurbsSurface.html#aed017258f17d108c3086010822313f83">num_control_points</a> () const</td></tr>
<tr class="memdesc:aed017258f17d108c3086010822313f83"><td class="mdescLeft">&#160;</td><td class="mdescRight">控制点数量 <a href="classvde_1_1curves_1_1NurbsSurface.html#aed017258f17d108c3086010822313f83">更多...</a><br /></td></tr>
<tr class="separator:aed017258f17d108c3086010822313f83"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aaf8908988e144edfc6597792299c66bc"><td class="memItemLeft" align="right" valign="top">const std::vector&lt; double &gt; &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classvde_1_1curves_1_1NurbsSurface.html#aaf8908988e144edfc6597792299c66bc">knots_u</a> () const</td></tr>
<tr class="memdesc:aaf8908988e144edfc6597792299c66bc"><td class="mdescLeft">&#160;</td><td class="mdescRight">u 向节点向量 <a href="classvde_1_1curves_1_1NurbsSurface.html#aaf8908988e144edfc6597792299c66bc">更多...</a><br /></td></tr>
<tr class="separator:aaf8908988e144edfc6597792299c66bc"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a41faea6ee8c5af45774fb7d4ce5241a9"><td class="memItemLeft" align="right" valign="top">const std::vector&lt; double &gt; &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classvde_1_1curves_1_1NurbsSurface.html#a41faea6ee8c5af45774fb7d4ce5241a9">knots_v</a> () const</td></tr>
<tr class="memdesc:a41faea6ee8c5af45774fb7d4ce5241a9"><td class="mdescLeft">&#160;</td><td class="mdescRight">v 向节点向量 <a href="classvde_1_1curves_1_1NurbsSurface.html#a41faea6ee8c5af45774fb7d4ce5241a9">更多...</a><br /></td></tr>
<tr class="separator:a41faea6ee8c5af45774fb7d4ce5241a9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab0bf95cc9ca6f2297fe455f982703f31"><td class="memItemLeft" align="right" valign="top">const std::vector&lt; std::vector&lt; Point3D &gt; &gt; &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classvde_1_1curves_1_1NurbsSurface.html#ab0bf95cc9ca6f2297fe455f982703f31">control_points</a> () const</td></tr>
<tr class="memdesc:ab0bf95cc9ca6f2297fe455f982703f31"><td class="mdescLeft">&#160;</td><td class="mdescRight">控制点网格访问 <a href="classvde_1_1curves_1_1NurbsSurface.html#ab0bf95cc9ca6f2297fe455f982703f31">更多...</a><br /></td></tr>
<tr class="separator:ab0bf95cc9ca6f2297fe455f982703f31"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a64bb35b6d22edb50bd08e40a5d343cff"><td class="memItemLeft" align="right" valign="top">const std::vector&lt; std::vector&lt; double &gt; &gt; &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classvde_1_1curves_1_1NurbsSurface.html#a64bb35b6d22edb50bd08e40a5d343cff">weights</a> () const</td></tr>
<tr class="memdesc:a64bb35b6d22edb50bd08e40a5d343cff"><td class="mdescLeft">&#160;</td><td class="mdescRight">权重网格访问 <a href="classvde_1_1curves_1_1NurbsSurface.html#a64bb35b6d22edb50bd08e40a5d343cff">更多...</a><br /></td></tr>
<tr class="separator:a64bb35b6d22edb50bd08e40a5d343cff"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac8fcef290d2fadee4822514380889291"><td class="memItemLeft" align="right" valign="top">std::pair&lt; std::vector&lt; Point3D &gt;, std::vector&lt; std::array&lt; int, 3 &gt; &gt; &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classvde_1_1curves_1_1NurbsSurface.html#ac8fcef290d2fadee4822514380889291">tessellate</a> (int res_u, int res_v) const</td></tr>
<tr class="memdesc:ac8fcef290d2fadee4822514380889291"><td class="mdescLeft">&#160;</td><td class="mdescRight">将 NURBS 曲面三角化 <a href="classvde_1_1curves_1_1NurbsSurface.html#ac8fcef290d2fadee4822514380889291">更多...</a><br /></td></tr>
<tr class="separator:ac8fcef290d2fadee4822514380889291"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-methods"></a>
静态 Public 成员函数</h2></td></tr>
<tr class="memitem:af53b490ee6741cbe9f59dd529e9deeeb"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classvde_1_1curves_1_1NurbsSurface.html">NurbsSurface</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classvde_1_1curves_1_1NurbsSurface.html#af53b490ee6741cbe9f59dd529e9deeeb">ruled</a> (const <a class="el" href="classvde_1_1curves_1_1NurbsCurve.html">NurbsCurve</a> &amp;c1, const <a class="el" href="classvde_1_1curves_1_1NurbsCurve.html">NurbsCurve</a> &amp;c2)</td></tr>
<tr class="memdesc:af53b490ee6741cbe9f59dd529e9deeeb"><td class="mdescLeft">&#160;</td><td class="mdescRight">由两条 NURBS 曲线创建直纹面 <a href="classvde_1_1curves_1_1NurbsSurface.html#af53b490ee6741cbe9f59dd529e9deeeb">更多...</a><br /></td></tr>
<tr class="separator:af53b490ee6741cbe9f59dd529e9deeeb"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7bdac10dc5fccfce9390818f9abe9440"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classvde_1_1curves_1_1NurbsSurface.html">NurbsSurface</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classvde_1_1curves_1_1NurbsSurface.html#a7bdac10dc5fccfce9390818f9abe9440">revolve</a> (const <a class="el" href="classvde_1_1curves_1_1NurbsCurve.html">NurbsCurve</a> &amp;profile, const Point3D &amp;axis_origin, const Vector3D &amp;axis_dir, double angle_rad)</td></tr>
<tr class="memdesc:a7bdac10dc5fccfce9390818f9abe9440"><td class="mdescLeft">&#160;</td><td class="mdescRight">由截面曲线旋转生成旋转曲面 <a href="classvde_1_1curves_1_1NurbsSurface.html#a7bdac10dc5fccfce9390818f9abe9440">更多...</a><br /></td></tr>
<tr class="separator:a7bdac10dc5fccfce9390818f9abe9440"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">详细描述</h2>
<div class="textblock"><p>NURBS 张量积曲面 </p>
<p>由 (nu+1)×(nv+1) 控制点网格、权重网格、u/v 节点向量及阶次定义。 求值公式: S(u,v) = Σ_i Σ_j N_{i,pu}(u)·N_{j,pv}(v)·w_{ij}·P_{ij} / Σ_i Σ_j N_{i,pu}(u)·N_{j,pv}(v)·w_{ij}</p>
<p>可精确表示球面、圆柱面、锥面等二次曲面。广泛应用于 CAD 数据交换。 </p>
<p class="definition">在文件 <a class="el" href="nurbs__surface_8h_source.html">nurbs_surface.h</a><a class="el" href="nurbs__surface_8h_source.html#l00024">24</a> 行定义.</p>
</div><h2 class="groupheader">构造及析构函数说明</h2>
<a id="aec7b5095337d5a19831d10c70a2f3e23"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aec7b5095337d5a19831d10c70a2f3e23">&#9670;&nbsp;</a></span>NurbsSurface()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">vde::curves::NurbsSurface::NurbsSurface </td>
<td>(</td>
<td class="paramtype">std::vector&lt; std::vector&lt; Point3D &gt;&gt;&#160;</td>
<td class="paramname"><em>control_grid</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::vector&lt; double &gt;&#160;</td>
<td class="paramname"><em>knots_u</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::vector&lt; double &gt;&#160;</td>
<td class="paramname"><em>knots_v</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::vector&lt; std::vector&lt; double &gt;&gt;&#160;</td>
<td class="paramname"><em>weights</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>degree_u</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>degree_v</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>构造 NURBS 曲面 </p>
<dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">control_grid</td><td>控制点网格 </td></tr>
<tr><td class="paramname">knots_u</td><td>u 向节点向量 </td></tr>
<tr><td class="paramname">knots_v</td><td>v 向节点向量 </td></tr>
<tr><td class="paramname">weights</td><td>权重网格,维度与 control_grid 一致,所有值 &gt; 0 </td></tr>
<tr><td class="paramname">degree_u</td><td>u 向阶次 </td></tr>
<tr><td class="paramname">degree_v</td><td>v 向阶次 <div class="fragment"><div class="line"><a class="code" href="classvde_1_1curves_1_1NurbsSurface.html#aec7b5095337d5a19831d10c70a2f3e23">NurbsSurface</a> <a class="code" href="namespacevde_1_1sdf.html#ab544a3ebc4c0844b322b73bbbe4efb3f">sphere</a>(grid, u_knots, v_knots, <a class="code" href="classvde_1_1curves_1_1NurbsSurface.html#a64bb35b6d22edb50bd08e40a5d343cff">weights</a>, 3, 3);</div>
<div class="ttc" id="aclassvde_1_1curves_1_1NurbsSurface_html_a64bb35b6d22edb50bd08e40a5d343cff"><div class="ttname"><a href="classvde_1_1curves_1_1NurbsSurface.html#a64bb35b6d22edb50bd08e40a5d343cff">vde::curves::NurbsSurface::weights</a></div><div class="ttdeci">const std::vector&lt; std::vector&lt; double &gt; &gt; &amp; weights() const</div><div class="ttdoc">权重网格访问</div><div class="ttdef"><b>Definition:</b> <a href="nurbs__surface_8h_source.html#l00117">nurbs_surface.h:117</a></div></div>
<div class="ttc" id="aclassvde_1_1curves_1_1NurbsSurface_html_aec7b5095337d5a19831d10c70a2f3e23"><div class="ttname"><a href="classvde_1_1curves_1_1NurbsSurface.html#aec7b5095337d5a19831d10c70a2f3e23">vde::curves::NurbsSurface::NurbsSurface</a></div><div class="ttdeci">NurbsSurface(std::vector&lt; std::vector&lt; Point3D &gt;&gt; control_grid, std::vector&lt; double &gt; knots_u, std::vector&lt; double &gt; knots_v, std::vector&lt; std::vector&lt; double &gt;&gt; weights, int degree_u, int degree_v)</div><div class="ttdoc">构造 NURBS 曲面</div></div>
<div class="ttc" id="anamespacevde_1_1sdf_html_ab544a3ebc4c0844b322b73bbbe4efb3f"><div class="ttname"><a href="namespacevde_1_1sdf.html#ab544a3ebc4c0844b322b73bbbe4efb3f">vde::sdf::sphere</a></div><div class="ttdeci">double sphere(const Point3D &amp;p, double radius)</div><div class="ttdoc">球体的 SDF</div><div class="ttdef"><b>Definition:</b> <a href="sdf__primitives_8h_source.html#l00068">sdf_primitives.h:68</a></div></div>
</div><!-- fragment --> </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<h2 class="groupheader">成员函数说明</h2>
<a id="ab0bf95cc9ca6f2297fe455f982703f31"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab0bf95cc9ca6f2297fe455f982703f31">&#9670;&nbsp;</a></span>control_points()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">const std::vector&lt;std::vector&lt;Point3D&gt; &gt;&amp; vde::curves::NurbsSurface::control_points </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>控制点网格访问 </p>
<dl class="section return"><dt>返回</dt><dd>只读引用 </dd></dl>
<p class="definition">在文件 <a class="el" href="nurbs__surface_8h_source.html">nurbs_surface.h</a><a class="el" href="nurbs__surface_8h_source.html#l00111">111</a> 行定义.</p>
</div>
</div>
<a id="a33f6783b3b8f9a94cbc67715023cc34a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a33f6783b3b8f9a94cbc67715023cc34a">&#9670;&nbsp;</a></span>degree_u()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">int vde::curves::NurbsSurface::degree_u </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>u 向阶次 </p>
<dl class="section return"><dt>返回</dt><dd>pu </dd></dl>
<p class="definition">在文件 <a class="el" href="nurbs__surface_8h_source.html">nurbs_surface.h</a><a class="el" href="nurbs__surface_8h_source.html#l00079">79</a> 行定义.</p>
</div>
</div>
<a id="a9521000400b99d6198cee4023c46ca9f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9521000400b99d6198cee4023c46ca9f">&#9670;&nbsp;</a></span>degree_v()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">int vde::curves::NurbsSurface::degree_v </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>v 向阶次 </p>
<dl class="section return"><dt>返回</dt><dd>pv </dd></dl>
<p class="definition">在文件 <a class="el" href="nurbs__surface_8h_source.html">nurbs_surface.h</a><a class="el" href="nurbs__surface_8h_source.html#l00085">85</a> 行定义.</p>
</div>
</div>
<a id="a6a7c1b3493bf5ac9303ee8c008541147"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6a7c1b3493bf5ac9303ee8c008541147">&#9670;&nbsp;</a></span>derivative_u()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">Vector3D vde::curves::NurbsSurface::derivative_u </td>
<td>(</td>
<td class="paramtype">double&#160;</td>
<td class="paramname"><em>u</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">double&#160;</td>
<td class="paramname"><em>v</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td> const</td>
</tr>
</table>
</div><div class="memdoc">
<p>u 向偏导数 </p>
<dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">u</td><td>u 参数 </td></tr>
<tr><td class="paramname">v</td><td>v 参数 </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>∂S/∂u </dd></dl>
</div>
</div>
<a id="afbcf23fc3c7308bd734a4371e9b71bba"></a>
<h2 class="memtitle"><span class="permalink"><a href="#afbcf23fc3c7308bd734a4371e9b71bba">&#9670;&nbsp;</a></span>derivative_v()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">Vector3D vde::curves::NurbsSurface::derivative_v </td>
<td>(</td>
<td class="paramtype">double&#160;</td>
<td class="paramname"><em>u</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">double&#160;</td>
<td class="paramname"><em>v</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td> const</td>
</tr>
</table>
</div><div class="memdoc">
<p>v 向偏导数 </p>
<dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">u</td><td>u 参数 </td></tr>
<tr><td class="paramname">v</td><td>v 参数 </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>∂S/∂v </dd></dl>
</div>
</div>
<a id="a63a1b12f9e6efca9b3b7bc1bb69661bf"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a63a1b12f9e6efca9b3b7bc1bb69661bf">&#9670;&nbsp;</a></span>evaluate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">Point3D vde::curves::NurbsSurface::evaluate </td>
<td>(</td>
<td class="paramtype">double&#160;</td>
<td class="paramname"><em>u</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">double&#160;</td>
<td class="paramname"><em>v</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td> const</td>
</tr>
</table>
</div><div class="memdoc">
<p>求曲面点 S(u,v) </p>
<dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">u</td><td>u 参数 </td></tr>
<tr><td class="paramname">v</td><td>v 参数 </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>曲面上对应 (u,v) 的 3D 点 </dd></dl>
</div>
</div>
<a id="aaf8908988e144edfc6597792299c66bc"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aaf8908988e144edfc6597792299c66bc">&#9670;&nbsp;</a></span>knots_u()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">const std::vector&lt;double&gt;&amp; vde::curves::NurbsSurface::knots_u </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>u 向节点向量 </p>
<dl class="section return"><dt>返回</dt><dd>只读引用 </dd></dl>
<p class="definition">在文件 <a class="el" href="nurbs__surface_8h_source.html">nurbs_surface.h</a><a class="el" href="nurbs__surface_8h_source.html#l00099">99</a> 行定义.</p>
</div>
</div>
<a id="a41faea6ee8c5af45774fb7d4ce5241a9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a41faea6ee8c5af45774fb7d4ce5241a9">&#9670;&nbsp;</a></span>knots_v()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">const std::vector&lt;double&gt;&amp; vde::curves::NurbsSurface::knots_v </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>v 向节点向量 </p>
<dl class="section return"><dt>返回</dt><dd>只读引用 </dd></dl>
<p class="definition">在文件 <a class="el" href="nurbs__surface_8h_source.html">nurbs_surface.h</a><a class="el" href="nurbs__surface_8h_source.html#l00105">105</a> 行定义.</p>
</div>
</div>
<a id="a2db98f16640f9413d1d46d2569073aa4"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2db98f16640f9413d1d46d2569073aa4">&#9670;&nbsp;</a></span>normal()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">Vector3D vde::curves::NurbsSurface::normal </td>
<td>(</td>
<td class="paramtype">double&#160;</td>
<td class="paramname"><em>u</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">double&#160;</td>
<td class="paramname"><em>v</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td> const</td>
</tr>
</table>
</div><div class="memdoc">
<p>单位法向量 </p>
<dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">u</td><td>u 参数 </td></tr>
<tr><td class="paramname">v</td><td>v 参数 </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>N(u,v) = normalize(∂S/∂u × ∂S/∂v) </dd></dl>
</div>
</div>
<a id="aed017258f17d108c3086010822313f83"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aed017258f17d108c3086010822313f83">&#9670;&nbsp;</a></span>num_control_points()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">std::array&lt;int, 2&gt; vde::curves::NurbsSurface::num_control_points </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>控制点数量 </p>
<dl class="section return"><dt>返回</dt><dd>{nu+1, nv+1},即网格的行数和列数 </dd></dl>
<p class="definition">在文件 <a class="el" href="nurbs__surface_8h_source.html">nurbs_surface.h</a><a class="el" href="nurbs__surface_8h_source.html#l00091">91</a> 行定义.</p>
</div>
</div>
<a id="a7bdac10dc5fccfce9390818f9abe9440"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7bdac10dc5fccfce9390818f9abe9440">&#9670;&nbsp;</a></span>revolve()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">static <a class="el" href="classvde_1_1curves_1_1NurbsSurface.html">NurbsSurface</a> vde::curves::NurbsSurface::revolve </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classvde_1_1curves_1_1NurbsCurve.html">NurbsCurve</a> &amp;&#160;</td>
<td class="paramname"><em>profile</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const Point3D &amp;&#160;</td>
<td class="paramname"><em>axis_origin</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const Vector3D &amp;&#160;</td>
<td class="paramname"><em>axis_dir</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">double&#160;</td>
<td class="paramname"><em>angle_rad</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>由截面曲线旋转生成旋转曲面 </p>
<dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">profile</td><td>截面 NURBS 曲线 </td></tr>
<tr><td class="paramname">axis_origin</td><td>旋转轴上一点 </td></tr>
<tr><td class="paramname">axis_dir</td><td>旋转轴方向 </td></tr>
<tr><td class="paramname">angle_rad</td><td>旋转角度(弧度),≤ 2π </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>旋转 NURBS 曲面 </dd></dl>
<dl class="section note"><dt>注解</dt><dd>使用 NURBS 表示圆弧的权重方案;完整旋转生成闭曲面 <div class="fragment"><div class="line"><span class="keyword">auto</span> rev = <a class="code" href="classvde_1_1curves_1_1NurbsSurface.html#a7bdac10dc5fccfce9390818f9abe9440">NurbsSurface::revolve</a>(profile, origin, {0,0,1}, M_PI);</div>
<div class="ttc" id="aclassvde_1_1curves_1_1NurbsSurface_html_a7bdac10dc5fccfce9390818f9abe9440"><div class="ttname"><a href="classvde_1_1curves_1_1NurbsSurface.html#a7bdac10dc5fccfce9390818f9abe9440">vde::curves::NurbsSurface::revolve</a></div><div class="ttdeci">static NurbsSurface revolve(const NurbsCurve &amp;profile, const Point3D &amp;axis_origin, const Vector3D &amp;axis_dir, double angle_rad)</div><div class="ttdoc">由截面曲线旋转生成旋转曲面</div></div>
</div><!-- fragment --> </dd></dl>
</div>
</div>
<a id="af53b490ee6741cbe9f59dd529e9deeeb"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af53b490ee6741cbe9f59dd529e9deeeb">&#9670;&nbsp;</a></span>ruled()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">static <a class="el" href="classvde_1_1curves_1_1NurbsSurface.html">NurbsSurface</a> vde::curves::NurbsSurface::ruled </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classvde_1_1curves_1_1NurbsCurve.html">NurbsCurve</a> &amp;&#160;</td>
<td class="paramname"><em>c1</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classvde_1_1curves_1_1NurbsCurve.html">NurbsCurve</a> &amp;&#160;</td>
<td class="paramname"><em>c2</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>由两条 NURBS 曲线创建直纹面 </p>
<dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">c1</td><td>起始曲线(v=0 边界) </td></tr>
<tr><td class="paramname">c2</td><td>终止曲线(v=1 边界) </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>直纹 NURBS 曲面 </dd></dl>
<dl class="section note"><dt>注解</dt><dd>两条曲线需具有兼容的阶次和节点结构(内部做升阶和节点精化对齐) </dd></dl>
<dl class="section see"><dt>参见</dt><dd><a class="el" href="group__curves.html#gad3cc80681a4081099a7527e524fa0bbd" title="两 NURBS 曲面沿边界边的过渡面">blend_surfaces</a> <a class="el" href="group__curves.html#ga7580a509f2049a0154a695c641a59c5a" title="两 NURBS 曲线间的直纹面">ruled_surface</a> </dd></dl>
</div>
</div>
<a id="ac8fcef290d2fadee4822514380889291"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac8fcef290d2fadee4822514380889291">&#9670;&nbsp;</a></span>tessellate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">std::pair&lt;std::vector&lt;Point3D&gt;, std::vector&lt;std::array&lt;int,3&gt; &gt; &gt; vde::curves::NurbsSurface::tessellate </td>
<td>(</td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>res_u</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>res_v</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td> const</td>
</tr>
</table>
</div><div class="memdoc">
<p>将 NURBS 曲面三角化 </p>
<dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">res_u</td><td>u 方向采样分辨率 </td></tr>
<tr><td class="paramname">res_v</td><td>v 方向采样分辨率 </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>{顶点数组, 三角形索引数组},每个三角形为 {i0,i1,i2} </dd></dl>
<dl class="section note"><dt>注解</dt><dd>生成 res_u×res_v 均匀网格,每个单元格拆为两个三角形 </dd></dl>
<dl class="section see"><dt>参见</dt><dd><a class="el" href="classvde_1_1curves_1_1NurbsSurface.html#ac8fcef290d2fadee4822514380889291" title="将 NURBS 曲面三角化">tessellate</a> </dd></dl>
</div>
</div>
<a id="a64bb35b6d22edb50bd08e40a5d343cff"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a64bb35b6d22edb50bd08e40a5d343cff">&#9670;&nbsp;</a></span>weights()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">const std::vector&lt;std::vector&lt;double&gt; &gt;&amp; vde::curves::NurbsSurface::weights </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>权重网格访问 </p>
<dl class="section return"><dt>返回</dt><dd>只读引用 </dd></dl>
<p class="definition">在文件 <a class="el" href="nurbs__surface_8h_source.html">nurbs_surface.h</a><a class="el" href="nurbs__surface_8h_source.html#l00117">117</a> 行定义.</p>
</div>
</div>
<hr/>该类的文档由以下文件生成:<ul>
<li>include/vde/curves/<a class="el" href="nurbs__surface_8h_source.html">nurbs_surface.h</a></li>
</ul>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="namespacevde.html">vde</a></li><li class="navelem"><a class="el" href="namespacevde_1_1curves.html">curves</a></li><li class="navelem"><a class="el" href="classvde_1_1curves_1_1NurbsSurface.html">NurbsSurface</a></li>
<li class="footer">生成于 2026年 七月 24日 星期五 11:21:23 , 为 ViewDesignEngine使用 <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1 </li>
</ul>
</div>
</body>
</html>