652 lines
42 KiB
HTML
652 lines
42 KiB
HTML
<!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)</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
|
||
 <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&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&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&dn=gpl-2.0.txt GPL-v2 */
|
||
$(document).ready(function(){initNavTree('group__curves.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="#nested-classes">类</a> |
|
||
<a href="#func-members">函数</a> </div>
|
||
<div class="headertitle">
|
||
<div class="title">曲线曲面模块 (vde::curves)</div> </div>
|
||
</div><!--header-->
|
||
<div class="contents">
|
||
|
||
<p>Bézier、B-Spline、NURBS 曲线与曲面的求值、求导、细分
|
||
<a href="#details">更多...</a></p>
|
||
<table class="memberdecls">
|
||
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
|
||
类</h2></td></tr>
|
||
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classvde_1_1curves_1_1BezierCurve.html">vde::curves::BezierCurve</a></td></tr>
|
||
<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">任意阶 Bézier 曲线 <a href="classvde_1_1curves_1_1BezierCurve.html#details">更多...</a><br /></td></tr>
|
||
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
||
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classvde_1_1curves_1_1BezierSurface.html">vde::curves::BezierSurface</a></td></tr>
|
||
<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Bézier 张量积曲面 <a href="classvde_1_1curves_1_1BezierSurface.html#details">更多...</a><br /></td></tr>
|
||
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
||
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classvde_1_1curves_1_1BSplineCurve.html">vde::curves::BSplineCurve</a></td></tr>
|
||
<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">B 样条曲线(非有理、均匀/非均匀节点) <a href="classvde_1_1curves_1_1BSplineCurve.html#details">更多...</a><br /></td></tr>
|
||
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
||
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classvde_1_1curves_1_1BSplineSurface.html">vde::curves::BSplineSurface</a></td></tr>
|
||
<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">B 样条张量积曲面(非有理) <a href="classvde_1_1curves_1_1BSplineSurface.html#details">更多...</a><br /></td></tr>
|
||
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
||
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classvde_1_1curves_1_1NurbsCurve.html">vde::curves::NurbsCurve</a></td></tr>
|
||
<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">NURBS 曲线(Non-Uniform Rational B-Spline) <a href="classvde_1_1curves_1_1NurbsCurve.html#details">更多...</a><br /></td></tr>
|
||
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
||
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classvde_1_1curves_1_1NurbsSurface.html">vde::curves::NurbsSurface</a></td></tr>
|
||
<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">NURBS 张量积曲面 <a href="classvde_1_1curves_1_1NurbsSurface.html#details">更多...</a><br /></td></tr>
|
||
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
||
</table><table class="memberdecls">
|
||
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
|
||
函数</h2></td></tr>
|
||
<tr class="memitem:gabfdf74f116bf265b378972b6a2081018"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classvde_1_1curves_1_1NurbsSurface.html">NurbsSurface</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__curves.html#gabfdf74f116bf265b378972b6a2081018">vde::curves::offset_surface</a> (const <a class="el" href="classvde_1_1curves_1_1NurbsSurface.html">NurbsSurface</a> &surf, double distance)</td></tr>
|
||
<tr class="memdesc:gabfdf74f116bf265b378972b6a2081018"><td class="mdescLeft"> </td><td class="mdescRight">NURBS 曲面等距偏移 <a href="group__curves.html#gabfdf74f116bf265b378972b6a2081018">更多...</a><br /></td></tr>
|
||
<tr class="separator:gabfdf74f116bf265b378972b6a2081018"><td class="memSeparator" colspan="2"> </td></tr>
|
||
<tr class="memitem:gafdf84393ce3a052eb842dca1e1b5ecc7"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classvde_1_1curves_1_1NurbsSurface.html">NurbsSurface</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__curves.html#gafdf84393ce3a052eb842dca1e1b5ecc7">vde::curves::trim_surface</a> (const <a class="el" href="classvde_1_1curves_1_1NurbsSurface.html">NurbsSurface</a> &surf, double u_min, double u_max, double v_min, double v_max)</td></tr>
|
||
<tr class="memdesc:gafdf84393ce3a052eb842dca1e1b5ecc7"><td class="mdescLeft"> </td><td class="mdescRight">NURBS 曲面参数域裁剪 <a href="group__curves.html#gafdf84393ce3a052eb842dca1e1b5ecc7">更多...</a><br /></td></tr>
|
||
<tr class="separator:gafdf84393ce3a052eb842dca1e1b5ecc7"><td class="memSeparator" colspan="2"> </td></tr>
|
||
<tr class="memitem:gad3cc80681a4081099a7527e524fa0bbd"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classvde_1_1curves_1_1NurbsSurface.html">NurbsSurface</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__curves.html#gad3cc80681a4081099a7527e524fa0bbd">vde::curves::blend_surfaces</a> (const <a class="el" href="classvde_1_1curves_1_1NurbsSurface.html">NurbsSurface</a> &surf_a, const <a class="el" href="classvde_1_1curves_1_1NurbsSurface.html">NurbsSurface</a> &surf_b, int edge_a, int edge_b, double blend_radius)</td></tr>
|
||
<tr class="memdesc:gad3cc80681a4081099a7527e524fa0bbd"><td class="mdescLeft"> </td><td class="mdescRight">两 NURBS 曲面沿边界边的过渡面 <a href="group__curves.html#gad3cc80681a4081099a7527e524fa0bbd">更多...</a><br /></td></tr>
|
||
<tr class="separator:gad3cc80681a4081099a7527e524fa0bbd"><td class="memSeparator" colspan="2"> </td></tr>
|
||
<tr class="memitem:ga7580a509f2049a0154a695c641a59c5a"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classvde_1_1curves_1_1NurbsSurface.html">NurbsSurface</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__curves.html#ga7580a509f2049a0154a695c641a59c5a">vde::curves::ruled_surface</a> (const <a class="el" href="classvde_1_1curves_1_1NurbsCurve.html">NurbsCurve</a> &curve_a, const <a class="el" href="classvde_1_1curves_1_1NurbsCurve.html">NurbsCurve</a> &curve_b)</td></tr>
|
||
<tr class="memdesc:ga7580a509f2049a0154a695c641a59c5a"><td class="mdescLeft"> </td><td class="mdescRight">两 NURBS 曲线间的直纹面 <a href="group__curves.html#ga7580a509f2049a0154a695c641a59c5a">更多...</a><br /></td></tr>
|
||
<tr class="separator:ga7580a509f2049a0154a695c641a59c5a"><td class="memSeparator" colspan="2"> </td></tr>
|
||
<tr class="memitem:ga0e1b2c10581b040e266b5862f31b6740"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classvde_1_1curves_1_1NurbsSurface.html">NurbsSurface</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__curves.html#ga0e1b2c10581b040e266b5862f31b6740">vde::curves::coons_patch</a> (const <a class="el" href="classvde_1_1curves_1_1NurbsCurve.html">NurbsCurve</a> &curve_u0, const <a class="el" href="classvde_1_1curves_1_1NurbsCurve.html">NurbsCurve</a> &curve_u1, const <a class="el" href="classvde_1_1curves_1_1NurbsCurve.html">NurbsCurve</a> &curve_v0, const <a class="el" href="classvde_1_1curves_1_1NurbsCurve.html">NurbsCurve</a> &curve_v1)</td></tr>
|
||
<tr class="memdesc:ga0e1b2c10581b040e266b5862f31b6740"><td class="mdescLeft"> </td><td class="mdescRight">由四条边界曲线创建 Coons 曲面 <a href="group__curves.html#ga0e1b2c10581b040e266b5862f31b6740">更多...</a><br /></td></tr>
|
||
<tr class="separator:ga0e1b2c10581b040e266b5862f31b6740"><td class="memSeparator" colspan="2"> </td></tr>
|
||
<tr class="memitem:ga4cab0f3ff296fdc05053eacac91f871f"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classvde_1_1curves_1_1NurbsSurface.html">NurbsSurface</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__curves.html#ga4cab0f3ff296fdc05053eacac91f871f">vde::curves::extrude_curve</a> (const <a class="el" href="classvde_1_1curves_1_1NurbsCurve.html">NurbsCurve</a> &curve, const Vector3D &direction, double length)</td></tr>
|
||
<tr class="memdesc:ga4cab0f3ff296fdc05053eacac91f871f"><td class="mdescLeft"> </td><td class="mdescRight">沿方向向量拉伸 NURBS 曲线为曲面 <a href="group__curves.html#ga4cab0f3ff296fdc05053eacac91f871f">更多...</a><br /></td></tr>
|
||
<tr class="separator:ga4cab0f3ff296fdc05053eacac91f871f"><td class="memSeparator" colspan="2"> </td></tr>
|
||
<tr class="memitem:ga04aae3cd810d0e289e61b699b04113c6"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classvde_1_1curves_1_1NurbsCurve.html">NurbsCurve</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__curves.html#ga04aae3cd810d0e289e61b699b04113c6">vde::curves::extract_boundary_curve</a> (const <a class="el" href="classvde_1_1curves_1_1NurbsSurface.html">NurbsSurface</a> &surf, int edge)</td></tr>
|
||
<tr class="memdesc:ga04aae3cd810d0e289e61b699b04113c6"><td class="mdescLeft"> </td><td class="mdescRight">提取 NURBS 曲面的等参边界曲线 <a href="group__curves.html#ga04aae3cd810d0e289e61b699b04113c6">更多...</a><br /></td></tr>
|
||
<tr class="separator:ga04aae3cd810d0e289e61b699b04113c6"><td class="memSeparator" colspan="2"> </td></tr>
|
||
<tr class="memitem:gaa17077923ccc4097a7dc783238c93c14"><td class="memItemLeft" align="right" valign="top">std::pair< std::vector< Point3D >, std::vector< std::array< int, 3 > > > </td><td class="memItemRight" valign="bottom"><a class="el" href="group__curves.html#gaa17077923ccc4097a7dc783238c93c14">vde::curves::tessellate</a> (const std::function< Point3D(double, double)> &eval, int res_u, int res_v)</td></tr>
|
||
<tr class="memdesc:gaa17077923ccc4097a7dc783238c93c14"><td class="mdescLeft"> </td><td class="mdescRight">均匀参数化曲面三角化 <a href="group__curves.html#gaa17077923ccc4097a7dc783238c93c14">更多...</a><br /></td></tr>
|
||
<tr class="separator:gaa17077923ccc4097a7dc783238c93c14"><td class="memSeparator" colspan="2"> </td></tr>
|
||
<tr class="memitem:gad5446ff8b077aecdad4ed145ccc681b8"><td class="memItemLeft" align="right" valign="top">std::pair< std::vector< Point3D >, std::vector< std::array< int, 3 > > > </td><td class="memItemRight" valign="bottom"><a class="el" href="group__curves.html#gad5446ff8b077aecdad4ed145ccc681b8">vde::curves::adaptive_tessellate</a> (const std::function< Point3D(double, double)> &eval, const std::function< Vector3D(double, double)> &normal_fn, int min_res=2, int max_depth=6, double angle_threshold_deg=5.0)</td></tr>
|
||
<tr class="memdesc:gad5446ff8b077aecdad4ed145ccc681b8"><td class="mdescLeft"> </td><td class="mdescRight">自适应曲面三角化 <a href="group__curves.html#gad5446ff8b077aecdad4ed145ccc681b8">更多...</a><br /></td></tr>
|
||
<tr class="separator:gad5446ff8b077aecdad4ed145ccc681b8"><td class="memSeparator" colspan="2"> </td></tr>
|
||
</table>
|
||
<a name="details" id="details"></a><h2 class="groupheader">详细描述</h2>
|
||
<p>Bézier、B-Spline、NURBS 曲线与曲面的求值、求导、细分 </p>
|
||
<h2 class="groupheader">函数说明</h2>
|
||
<a id="gad5446ff8b077aecdad4ed145ccc681b8"></a>
|
||
<h2 class="memtitle"><span class="permalink"><a href="#gad5446ff8b077aecdad4ed145ccc681b8">◆ </a></span>adaptive_tessellate()</h2>
|
||
|
||
<div class="memitem">
|
||
<div class="memproto">
|
||
<table class="memname">
|
||
<tr>
|
||
<td class="memname">std::pair<std::vector<Point3D>, std::vector<std::array<int, 3> > > vde::curves::adaptive_tessellate </td>
|
||
<td>(</td>
|
||
<td class="paramtype">const std::function< Point3D(double, double)> & </td>
|
||
<td class="paramname"><em>eval</em>, </td>
|
||
</tr>
|
||
<tr>
|
||
<td class="paramkey"></td>
|
||
<td></td>
|
||
<td class="paramtype">const std::function< Vector3D(double, double)> & </td>
|
||
<td class="paramname"><em>normal_fn</em>, </td>
|
||
</tr>
|
||
<tr>
|
||
<td class="paramkey"></td>
|
||
<td></td>
|
||
<td class="paramtype">int </td>
|
||
<td class="paramname"><em>min_res</em> = <code>2</code>, </td>
|
||
</tr>
|
||
<tr>
|
||
<td class="paramkey"></td>
|
||
<td></td>
|
||
<td class="paramtype">int </td>
|
||
<td class="paramname"><em>max_depth</em> = <code>6</code>, </td>
|
||
</tr>
|
||
<tr>
|
||
<td class="paramkey"></td>
|
||
<td></td>
|
||
<td class="paramtype">double </td>
|
||
<td class="paramname"><em>angle_threshold_deg</em> = <code>5.0</code> </td>
|
||
</tr>
|
||
<tr>
|
||
<td></td>
|
||
<td>)</td>
|
||
<td></td><td></td>
|
||
</tr>
|
||
</table>
|
||
</div><div class="memdoc">
|
||
|
||
<p>自适应曲面三角化 </p>
|
||
<p>基于法向角度偏差的自适应细分策略: 从 min_res×min_res 初始网格开始,对每个四边形检查四个角点的法向偏差。 若任意相邻角点间的法向夹角超过 angle_threshold_deg,则将该四边形四分细分。</p>
|
||
<p>相比均匀 <a class="el" href="group__curves.html#gaa17077923ccc4097a7dc783238c93c14" title="均匀参数化曲面三角化">tessellate()</a> 的优点:</p><ul>
|
||
<li>曲率大的区域自动增加采样密度</li>
|
||
<li>平坦区域保持粗糙网格,节省面数</li>
|
||
</ul>
|
||
<dl class="params"><dt>参数</dt><dd>
|
||
<table class="params">
|
||
<tr><td class="paramname">eval</td><td>曲面求值函数 eval(u,v) -> Point3D </td></tr>
|
||
<tr><td class="paramname">normal_fn</td><td>单位法向函数 normal_fn(u,v) -> Vector3D </td></tr>
|
||
<tr><td class="paramname">min_res</td><td>初始每向子分段数(≥ 1),默认 2 </td></tr>
|
||
<tr><td class="paramname">max_depth</td><td>最大递归深度,限制总面数,默认 6 </td></tr>
|
||
<tr><td class="paramname">angle_threshold_deg</td><td>法向角度偏差阈值(度),默认 5.0 </td></tr>
|
||
</table>
|
||
</dd>
|
||
</dl>
|
||
<dl class="section return"><dt>返回</dt><dd>{顶点数组, 三角形索引数组}</dd></dl>
|
||
<dl class="section note"><dt>注解</dt><dd>最终面数上限约为 2·min_res²·4^max_depth(实际远小于此上限) <div class="fragment"><div class="line"><span class="keyword">auto</span> [verts, tris] = <a class="code" href="group__curves.html#gad5446ff8b077aecdad4ed145ccc681b8">adaptive_tessellate</a>(</div>
|
||
<div class="line"> [&](<span class="keywordtype">double</span> u, <span class="keywordtype">double</span> v) { <span class="keywordflow">return</span> surf.evaluate(u,v); },</div>
|
||
<div class="line"> [&](<span class="keywordtype">double</span> u, <span class="keywordtype">double</span> v) { <span class="keywordflow">return</span> surf.normal(u,v); },</div>
|
||
<div class="line"> 2, 5, 3.0); <span class="comment">// 3° 偏差阈值,最大深度 5</span></div>
|
||
<div class="ttc" id="agroup__curves_html_gad5446ff8b077aecdad4ed145ccc681b8"><div class="ttname"><a href="group__curves.html#gad5446ff8b077aecdad4ed145ccc681b8">vde::curves::adaptive_tessellate</a></div><div class="ttdeci">std::pair< std::vector< Point3D >, std::vector< std::array< int, 3 > > > adaptive_tessellate(const std::function< Point3D(double, double)> &eval, const std::function< Vector3D(double, double)> &normal_fn, int min_res=2, int max_depth=6, double angle_threshold_deg=5.0)</div><div class="ttdoc">自适应曲面三角化</div></div>
|
||
</div><!-- fragment --> </dd></dl>
|
||
<dl class="section see"><dt>参见</dt><dd><a class="el" href="group__curves.html#gaa17077923ccc4097a7dc783238c93c14" title="均匀参数化曲面三角化">tessellate</a> </dd></dl>
|
||
|
||
</div>
|
||
</div>
|
||
<a id="gad3cc80681a4081099a7527e524fa0bbd"></a>
|
||
<h2 class="memtitle"><span class="permalink"><a href="#gad3cc80681a4081099a7527e524fa0bbd">◆ </a></span>blend_surfaces()</h2>
|
||
|
||
<div class="memitem">
|
||
<div class="memproto">
|
||
<table class="memname">
|
||
<tr>
|
||
<td class="memname"><a class="el" href="classvde_1_1curves_1_1NurbsSurface.html">NurbsSurface</a> vde::curves::blend_surfaces </td>
|
||
<td>(</td>
|
||
<td class="paramtype">const <a class="el" href="classvde_1_1curves_1_1NurbsSurface.html">NurbsSurface</a> & </td>
|
||
<td class="paramname"><em>surf_a</em>, </td>
|
||
</tr>
|
||
<tr>
|
||
<td class="paramkey"></td>
|
||
<td></td>
|
||
<td class="paramtype">const <a class="el" href="classvde_1_1curves_1_1NurbsSurface.html">NurbsSurface</a> & </td>
|
||
<td class="paramname"><em>surf_b</em>, </td>
|
||
</tr>
|
||
<tr>
|
||
<td class="paramkey"></td>
|
||
<td></td>
|
||
<td class="paramtype">int </td>
|
||
<td class="paramname"><em>edge_a</em>, </td>
|
||
</tr>
|
||
<tr>
|
||
<td class="paramkey"></td>
|
||
<td></td>
|
||
<td class="paramtype">int </td>
|
||
<td class="paramname"><em>edge_b</em>, </td>
|
||
</tr>
|
||
<tr>
|
||
<td class="paramkey"></td>
|
||
<td></td>
|
||
<td class="paramtype">double </td>
|
||
<td class="paramname"><em>blend_radius</em> </td>
|
||
</tr>
|
||
<tr>
|
||
<td></td>
|
||
<td>)</td>
|
||
<td></td><td></td>
|
||
</tr>
|
||
</table>
|
||
</div><div class="memdoc">
|
||
|
||
<p>两 NURBS 曲面沿边界边的过渡面 </p>
|
||
<p>提取两个曲面的指定边界曲线,各沿法向向内偏移 blend_radius 后, 在两偏移曲线之间创建直纹面作为过渡。</p>
|
||
<dl class="params"><dt>参数</dt><dd>
|
||
<table class="params">
|
||
<tr><td class="paramname">surf_a</td><td>第一个曲面 </td></tr>
|
||
<tr><td class="paramname">surf_b</td><td>第二个曲面 </td></tr>
|
||
<tr><td class="paramname">edge_a</td><td>surf_a 的边界边索引(0=u_min, 1=u_max, 2=v_min, 3=v_max) </td></tr>
|
||
<tr><td class="paramname">edge_b</td><td>surf_b 的边界边索引(0=u_min, 1=u_max, 2=v_min, 3=v_max) </td></tr>
|
||
<tr><td class="paramname">blend_radius</td><td>过渡半径 </td></tr>
|
||
</table>
|
||
</dd>
|
||
</dl>
|
||
<dl class="section return"><dt>返回</dt><dd>过渡 NURBS 曲面(在偏移边界曲线间的直纹面)</dd></dl>
|
||
<dl class="section note"><dt>注解</dt><dd>过渡面与原始曲面在边界处为 C⁰ 连续(非切线连续) <div class="fragment"><div class="line"><span class="comment">// surf_a 的 u_max 边过渡到 surf_b 的 u_min 边</span></div>
|
||
<div class="line"><span class="keyword">auto</span> blend = <a class="code" href="group__curves.html#gad3cc80681a4081099a7527e524fa0bbd">blend_surfaces</a>(surf_a, surf_b,</div>
|
||
<div class="line"> 1, 0, <span class="comment">// edge indices: umax → umin</span></div>
|
||
<div class="line"> 0.5); <span class="comment">// blend radius</span></div>
|
||
<div class="ttc" id="agroup__curves_html_gad3cc80681a4081099a7527e524fa0bbd"><div class="ttname"><a href="group__curves.html#gad3cc80681a4081099a7527e524fa0bbd">vde::curves::blend_surfaces</a></div><div class="ttdeci">NurbsSurface blend_surfaces(const NurbsSurface &surf_a, const NurbsSurface &surf_b, int edge_a, int edge_b, double blend_radius)</div><div class="ttdoc">两 NURBS 曲面沿边界边的过渡面</div></div>
|
||
</div><!-- fragment --> </dd></dl>
|
||
<dl class="section see"><dt>参见</dt><dd><a class="el" href="group__curves.html#ga7580a509f2049a0154a695c641a59c5a" title="两 NURBS 曲线间的直纹面">ruled_surface</a> </dd></dl>
|
||
|
||
</div>
|
||
</div>
|
||
<a id="ga0e1b2c10581b040e266b5862f31b6740"></a>
|
||
<h2 class="memtitle"><span class="permalink"><a href="#ga0e1b2c10581b040e266b5862f31b6740">◆ </a></span>coons_patch()</h2>
|
||
|
||
<div class="memitem">
|
||
<div class="memproto">
|
||
<table class="memname">
|
||
<tr>
|
||
<td class="memname"><a class="el" href="classvde_1_1curves_1_1NurbsSurface.html">NurbsSurface</a> vde::curves::coons_patch </td>
|
||
<td>(</td>
|
||
<td class="paramtype">const <a class="el" href="classvde_1_1curves_1_1NurbsCurve.html">NurbsCurve</a> & </td>
|
||
<td class="paramname"><em>curve_u0</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> & </td>
|
||
<td class="paramname"><em>curve_u1</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> & </td>
|
||
<td class="paramname"><em>curve_v0</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> & </td>
|
||
<td class="paramname"><em>curve_v1</em> </td>
|
||
</tr>
|
||
<tr>
|
||
<td></td>
|
||
<td>)</td>
|
||
<td></td><td></td>
|
||
</tr>
|
||
</table>
|
||
</div><div class="memdoc">
|
||
|
||
<p>由四条边界曲线创建 Coons 曲面 </p>
|
||
<p>双线性混合: S(u,v) = (1-u)·C_{v0}(v) + u·C_{v1}(v)</p><ul>
|
||
<li>(1-v)·C_{u0}(u) + v·C_{u1}(u)</li>
|
||
<li>角点修正项</li>
|
||
</ul>
|
||
<p>四条曲线须围成闭合环且有兼容的阶次/节点结构。</p>
|
||
<dl class="params"><dt>参数</dt><dd>
|
||
<table class="params">
|
||
<tr><td class="paramname">curve_u0</td><td>v=0 处边界(沿 u 方向) </td></tr>
|
||
<tr><td class="paramname">curve_u1</td><td>v=1 处边界(沿 u 方向) </td></tr>
|
||
<tr><td class="paramname">curve_v0</td><td>u=0 处边界(沿 v 方向) </td></tr>
|
||
<tr><td class="paramname">curve_v1</td><td>u=1 处边界(沿 v 方向) </td></tr>
|
||
</table>
|
||
</dd>
|
||
</dl>
|
||
<dl class="section return"><dt>返回</dt><dd>Coons 曲面</dd></dl>
|
||
<dl class="section note"><dt>注解</dt><dd>仅保证边界插值,不保证内部形状与设计意图一致 <div class="fragment"><div class="line"><span class="keyword">auto</span> patch = <a class="code" href="group__curves.html#ga0e1b2c10581b040e266b5862f31b6740">coons_patch</a>(bottom, top, left, right);</div>
|
||
<div class="ttc" id="agroup__curves_html_ga0e1b2c10581b040e266b5862f31b6740"><div class="ttname"><a href="group__curves.html#ga0e1b2c10581b040e266b5862f31b6740">vde::curves::coons_patch</a></div><div class="ttdeci">NurbsSurface coons_patch(const NurbsCurve &curve_u0, const NurbsCurve &curve_u1, const NurbsCurve &curve_v0, const NurbsCurve &curve_v1)</div><div class="ttdoc">由四条边界曲线创建 Coons 曲面</div></div>
|
||
</div><!-- fragment --> </dd></dl>
|
||
<dl class="section see"><dt>参见</dt><dd><a class="el" href="group__curves.html#ga7580a509f2049a0154a695c641a59c5a" title="两 NURBS 曲线间的直纹面">ruled_surface</a> </dd></dl>
|
||
|
||
</div>
|
||
</div>
|
||
<a id="ga04aae3cd810d0e289e61b699b04113c6"></a>
|
||
<h2 class="memtitle"><span class="permalink"><a href="#ga04aae3cd810d0e289e61b699b04113c6">◆ </a></span>extract_boundary_curve()</h2>
|
||
|
||
<div class="memitem">
|
||
<div class="memproto">
|
||
<table class="memname">
|
||
<tr>
|
||
<td class="memname"><a class="el" href="classvde_1_1curves_1_1NurbsCurve.html">NurbsCurve</a> vde::curves::extract_boundary_curve </td>
|
||
<td>(</td>
|
||
<td class="paramtype">const <a class="el" href="classvde_1_1curves_1_1NurbsSurface.html">NurbsSurface</a> & </td>
|
||
<td class="paramname"><em>surf</em>, </td>
|
||
</tr>
|
||
<tr>
|
||
<td class="paramkey"></td>
|
||
<td></td>
|
||
<td class="paramtype">int </td>
|
||
<td class="paramname"><em>edge</em> </td>
|
||
</tr>
|
||
<tr>
|
||
<td></td>
|
||
<td>)</td>
|
||
<td></td><td></td>
|
||
</tr>
|
||
</table>
|
||
</div><div class="memdoc">
|
||
|
||
<p>提取 NURBS 曲面的等参边界曲线 </p>
|
||
<p>沿曲面的 u/v 参数极值提取边界 NURBS 曲线。</p>
|
||
<dl class="params"><dt>参数</dt><dd>
|
||
<table class="params">
|
||
<tr><td class="paramname">surf</td><td>输入曲面 </td></tr>
|
||
<tr><td class="paramname">edge</td><td>边界索引:0=u_min, 1=u_max, 2=v_min, 3=v_max </td></tr>
|
||
</table>
|
||
</dd>
|
||
</dl>
|
||
<dl class="section return"><dt>返回</dt><dd>指定边界上的 NURBS 曲线</dd></dl>
|
||
<dl class="section note"><dt>注解</dt><dd>边界曲线继承原曲面该方向的阶次和节点向量 <div class="fragment"><div class="line"><span class="keyword">auto</span> umin_curve = <a class="code" href="group__curves.html#ga04aae3cd810d0e289e61b699b04113c6">extract_boundary_curve</a>(surf, 0);</div>
|
||
<div class="line"><span class="keyword">auto</span> vmax_curve = <a class="code" href="group__curves.html#ga04aae3cd810d0e289e61b699b04113c6">extract_boundary_curve</a>(surf, 3);</div>
|
||
<div class="ttc" id="agroup__curves_html_ga04aae3cd810d0e289e61b699b04113c6"><div class="ttname"><a href="group__curves.html#ga04aae3cd810d0e289e61b699b04113c6">vde::curves::extract_boundary_curve</a></div><div class="ttdeci">NurbsCurve extract_boundary_curve(const NurbsSurface &surf, int edge)</div><div class="ttdoc">提取 NURBS 曲面的等参边界曲线</div></div>
|
||
</div><!-- fragment --> </dd></dl>
|
||
|
||
</div>
|
||
</div>
|
||
<a id="ga4cab0f3ff296fdc05053eacac91f871f"></a>
|
||
<h2 class="memtitle"><span class="permalink"><a href="#ga4cab0f3ff296fdc05053eacac91f871f">◆ </a></span>extrude_curve()</h2>
|
||
|
||
<div class="memitem">
|
||
<div class="memproto">
|
||
<table class="memname">
|
||
<tr>
|
||
<td class="memname"><a class="el" href="classvde_1_1curves_1_1NurbsSurface.html">NurbsSurface</a> vde::curves::extrude_curve </td>
|
||
<td>(</td>
|
||
<td class="paramtype">const <a class="el" href="classvde_1_1curves_1_1NurbsCurve.html">NurbsCurve</a> & </td>
|
||
<td class="paramname"><em>curve</em>, </td>
|
||
</tr>
|
||
<tr>
|
||
<td class="paramkey"></td>
|
||
<td></td>
|
||
<td class="paramtype">const Vector3D & </td>
|
||
<td class="paramname"><em>direction</em>, </td>
|
||
</tr>
|
||
<tr>
|
||
<td class="paramkey"></td>
|
||
<td></td>
|
||
<td class="paramtype">double </td>
|
||
<td class="paramname"><em>length</em> </td>
|
||
</tr>
|
||
<tr>
|
||
<td></td>
|
||
<td>)</td>
|
||
<td></td><td></td>
|
||
</tr>
|
||
</table>
|
||
</div><div class="memdoc">
|
||
|
||
<p>沿方向向量拉伸 NURBS 曲线为曲面 </p>
|
||
<p>创建阶次 (d)×1 的 NURBS 曲面(d = 曲线阶次)。 第一排控制点 = 曲线控制点,最后一排 = 偏移后的控制点。</p>
|
||
<dl class="params"><dt>参数</dt><dd>
|
||
<table class="params">
|
||
<tr><td class="paramname">curve</td><td>截面曲线 </td></tr>
|
||
<tr><td class="paramname">direction</td><td>拉伸方向(内部归一化) </td></tr>
|
||
<tr><td class="paramname">length</td><td>拉伸长度 </td></tr>
|
||
</table>
|
||
</dd>
|
||
</dl>
|
||
<dl class="section return"><dt>返回</dt><dd>拉伸 NURBS 曲面</dd></dl>
|
||
<div class="fragment"><div class="line"><span class="keyword">auto</span> surface = <a class="code" href="group__curves.html#ga4cab0f3ff296fdc05053eacac91f871f">extrude_curve</a>(profile, {0, 0, 1}, 10.0);</div>
|
||
<div class="line"><span class="comment">// 沿 Z 轴拉伸 10 单位</span></div>
|
||
<div class="ttc" id="agroup__curves_html_ga4cab0f3ff296fdc05053eacac91f871f"><div class="ttname"><a href="group__curves.html#ga4cab0f3ff296fdc05053eacac91f871f">vde::curves::extrude_curve</a></div><div class="ttdeci">NurbsSurface extrude_curve(const NurbsCurve &curve, const Vector3D &direction, double length)</div><div class="ttdoc">沿方向向量拉伸 NURBS 曲线为曲面</div></div>
|
||
</div><!-- fragment -->
|
||
</div>
|
||
</div>
|
||
<a id="gabfdf74f116bf265b378972b6a2081018"></a>
|
||
<h2 class="memtitle"><span class="permalink"><a href="#gabfdf74f116bf265b378972b6a2081018">◆ </a></span>offset_surface()</h2>
|
||
|
||
<div class="memitem">
|
||
<div class="memproto">
|
||
<table class="memname">
|
||
<tr>
|
||
<td class="memname"><a class="el" href="classvde_1_1curves_1_1NurbsSurface.html">NurbsSurface</a> vde::curves::offset_surface </td>
|
||
<td>(</td>
|
||
<td class="paramtype">const <a class="el" href="classvde_1_1curves_1_1NurbsSurface.html">NurbsSurface</a> & </td>
|
||
<td class="paramname"><em>surf</em>, </td>
|
||
</tr>
|
||
<tr>
|
||
<td class="paramkey"></td>
|
||
<td></td>
|
||
<td class="paramtype">double </td>
|
||
<td class="paramname"><em>distance</em> </td>
|
||
</tr>
|
||
<tr>
|
||
<td></td>
|
||
<td>)</td>
|
||
<td></td><td></td>
|
||
</tr>
|
||
</table>
|
||
</div><div class="memdoc">
|
||
|
||
<p>NURBS 曲面等距偏移 </p>
|
||
<p>基于 Piegl & Tiller 近似方法:在每个控制点的 Greville 横坐标处 计算曲面法向,将控制点沿法向平移 distance。</p>
|
||
<dl class="params"><dt>参数</dt><dd>
|
||
<table class="params">
|
||
<tr><td class="paramname">surf</td><td>输入 NURBS 曲面 </td></tr>
|
||
<tr><td class="paramname">distance</td><td>偏移距离(正值 = 沿法向外,负值 = 向内) </td></tr>
|
||
</table>
|
||
</dd>
|
||
</dl>
|
||
<dl class="section return"><dt>返回</dt><dd>偏移后的 NURBS 曲面(近似,阶次与原曲面相同)</dd></dl>
|
||
<dl class="section note"><dt>注解</dt><dd>这是几何近似,非精确偏移。对于大变曲率曲面,增大控制点数量 可提高精度。精确偏移需要更高阶曲面或细分方法。 </dd>
|
||
<dd>
|
||
偏移可能导致自交(distance 超过曲面局部曲率半径时) </dd></dl>
|
||
<dl class="section see"><dt>参见</dt><dd><a class="el" href="group__curves.html#gafdf84393ce3a052eb842dca1e1b5ecc7" title="NURBS 曲面参数域裁剪">trim_surface</a> <a class="el" href="group__curves.html#gad3cc80681a4081099a7527e524fa0bbd" title="两 NURBS 曲面沿边界边的过渡面">blend_surfaces</a> </dd></dl>
|
||
|
||
</div>
|
||
</div>
|
||
<a id="ga7580a509f2049a0154a695c641a59c5a"></a>
|
||
<h2 class="memtitle"><span class="permalink"><a href="#ga7580a509f2049a0154a695c641a59c5a">◆ </a></span>ruled_surface()</h2>
|
||
|
||
<div class="memitem">
|
||
<div class="memproto">
|
||
<table class="memname">
|
||
<tr>
|
||
<td class="memname"><a class="el" href="classvde_1_1curves_1_1NurbsSurface.html">NurbsSurface</a> vde::curves::ruled_surface </td>
|
||
<td>(</td>
|
||
<td class="paramtype">const <a class="el" href="classvde_1_1curves_1_1NurbsCurve.html">NurbsCurve</a> & </td>
|
||
<td class="paramname"><em>curve_a</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> & </td>
|
||
<td class="paramname"><em>curve_b</em> </td>
|
||
</tr>
|
||
<tr>
|
||
<td></td>
|
||
<td>)</td>
|
||
<td></td><td></td>
|
||
</tr>
|
||
</table>
|
||
</div><div class="memdoc">
|
||
|
||
<p>两 NURBS 曲线间的直纹面 </p>
|
||
<p>在两条曲线之间线性插值生成曲面: S(u,v) = (1-v)·C_a(u) + v·C_b(u) 纵向保持输入曲线的阶次,直纹方向为线性(degree=1)。</p>
|
||
<dl class="params"><dt>参数</dt><dd>
|
||
<table class="params">
|
||
<tr><td class="paramname">curve_a</td><td>第一条曲线(v=0 边界) </td></tr>
|
||
<tr><td class="paramname">curve_b</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>两条曲线需有兼容的阶次和节点结构(内部执行升阶和节点精化) <div class="fragment"><div class="line"><span class="keyword">auto</span> ruled = <a class="code" href="group__curves.html#ga7580a509f2049a0154a695c641a59c5a">ruled_surface</a>(profile_bottom, profile_top);</div>
|
||
<div class="ttc" id="agroup__curves_html_ga7580a509f2049a0154a695c641a59c5a"><div class="ttname"><a href="group__curves.html#ga7580a509f2049a0154a695c641a59c5a">vde::curves::ruled_surface</a></div><div class="ttdeci">NurbsSurface ruled_surface(const NurbsCurve &curve_a, const NurbsCurve &curve_b)</div><div class="ttdoc">两 NURBS 曲线间的直纹面</div></div>
|
||
</div><!-- fragment --> </dd></dl>
|
||
<dl class="section see"><dt>参见</dt><dd><a class="el" href="group__curves.html#ga0e1b2c10581b040e266b5862f31b6740" title="由四条边界曲线创建 Coons 曲面">coons_patch</a> <a class="el" href="group__curves.html#gad3cc80681a4081099a7527e524fa0bbd" title="两 NURBS 曲面沿边界边的过渡面">blend_surfaces</a> </dd></dl>
|
||
|
||
</div>
|
||
</div>
|
||
<a id="gaa17077923ccc4097a7dc783238c93c14"></a>
|
||
<h2 class="memtitle"><span class="permalink"><a href="#gaa17077923ccc4097a7dc783238c93c14">◆ </a></span>tessellate()</h2>
|
||
|
||
<div class="memitem">
|
||
<div class="memproto">
|
||
<table class="memname">
|
||
<tr>
|
||
<td class="memname">std::pair<std::vector<Point3D>, std::vector<std::array<int, 3> > > vde::curves::tessellate </td>
|
||
<td>(</td>
|
||
<td class="paramtype">const std::function< Point3D(double, double)> & </td>
|
||
<td class="paramname"><em>eval</em>, </td>
|
||
</tr>
|
||
<tr>
|
||
<td class="paramkey"></td>
|
||
<td></td>
|
||
<td class="paramtype">int </td>
|
||
<td class="paramname"><em>res_u</em>, </td>
|
||
</tr>
|
||
<tr>
|
||
<td class="paramkey"></td>
|
||
<td></td>
|
||
<td class="paramtype">int </td>
|
||
<td class="paramname"><em>res_v</em> </td>
|
||
</tr>
|
||
<tr>
|
||
<td></td>
|
||
<td>)</td>
|
||
<td></td><td></td>
|
||
</tr>
|
||
</table>
|
||
</div><div class="memdoc">
|
||
|
||
<p>均匀参数化曲面三角化 </p>
|
||
<p>在参数域 [0,1]×[0,1] 上生成 res_u×res_v 均匀采样点, 调用 eval(u,v) 求值后将每个四边形拆为两个三角形。</p>
|
||
<dl class="params"><dt>参数</dt><dd>
|
||
<table class="params">
|
||
<tr><td class="paramname">eval</td><td>曲面求值函数 eval(u,v) -> Point3D,参数 (u,v) ∈ [0,1]×[0,1] </td></tr>
|
||
<tr><td class="paramname">res_u</td><td>u 方向子分段数(≥ 1) </td></tr>
|
||
<tr><td class="paramname">res_v</td><td>v 方向子分段数(≥ 1) </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+1)×(res_v+1),三角形数 = 2×res_u×res_v <div class="fragment"><div class="line"><span class="keyword">auto</span> [verts, tris] = <a class="code" href="group__curves.html#gaa17077923ccc4097a7dc783238c93c14">tessellate</a>(</div>
|
||
<div class="line"> [&](<span class="keywordtype">double</span> u, <span class="keywordtype">double</span> v) { <span class="keywordflow">return</span> surface.evaluate(u,v); },</div>
|
||
<div class="line"> 20, 20);</div>
|
||
<div class="ttc" id="agroup__curves_html_gaa17077923ccc4097a7dc783238c93c14"><div class="ttname"><a href="group__curves.html#gaa17077923ccc4097a7dc783238c93c14">vde::curves::tessellate</a></div><div class="ttdeci">std::pair< std::vector< Point3D >, std::vector< std::array< int, 3 > > > tessellate(const std::function< Point3D(double, double)> &eval, int res_u, int res_v)</div><div class="ttdoc">均匀参数化曲面三角化</div></div>
|
||
</div><!-- fragment --> </dd></dl>
|
||
<dl class="section see"><dt>参见</dt><dd><a class="el" href="group__curves.html#gad5446ff8b077aecdad4ed145ccc681b8" title="自适应曲面三角化">adaptive_tessellate</a> </dd></dl>
|
||
|
||
</div>
|
||
</div>
|
||
<a id="gafdf84393ce3a052eb842dca1e1b5ecc7"></a>
|
||
<h2 class="memtitle"><span class="permalink"><a href="#gafdf84393ce3a052eb842dca1e1b5ecc7">◆ </a></span>trim_surface()</h2>
|
||
|
||
<div class="memitem">
|
||
<div class="memproto">
|
||
<table class="memname">
|
||
<tr>
|
||
<td class="memname"><a class="el" href="classvde_1_1curves_1_1NurbsSurface.html">NurbsSurface</a> vde::curves::trim_surface </td>
|
||
<td>(</td>
|
||
<td class="paramtype">const <a class="el" href="classvde_1_1curves_1_1NurbsSurface.html">NurbsSurface</a> & </td>
|
||
<td class="paramname"><em>surf</em>, </td>
|
||
</tr>
|
||
<tr>
|
||
<td class="paramkey"></td>
|
||
<td></td>
|
||
<td class="paramtype">double </td>
|
||
<td class="paramname"><em>u_min</em>, </td>
|
||
</tr>
|
||
<tr>
|
||
<td class="paramkey"></td>
|
||
<td></td>
|
||
<td class="paramtype">double </td>
|
||
<td class="paramname"><em>u_max</em>, </td>
|
||
</tr>
|
||
<tr>
|
||
<td class="paramkey"></td>
|
||
<td></td>
|
||
<td class="paramtype">double </td>
|
||
<td class="paramname"><em>v_min</em>, </td>
|
||
</tr>
|
||
<tr>
|
||
<td class="paramkey"></td>
|
||
<td></td>
|
||
<td class="paramtype">double </td>
|
||
<td class="paramname"><em>v_max</em> </td>
|
||
</tr>
|
||
<tr>
|
||
<td></td>
|
||
<td>)</td>
|
||
<td></td><td></td>
|
||
</tr>
|
||
</table>
|
||
</div><div class="memdoc">
|
||
|
||
<p>NURBS 曲面参数域裁剪 </p>
|
||
<p>将原始定义域 [u_min,u_max]×[v_min,v_max] 通过节点重参数化 映射到 [0,1]×[0,1],不改变控制点和权重——仅缩放平移节点向量, 曲面几何保持不变。</p>
|
||
<dl class="params"><dt>参数</dt><dd>
|
||
<table class="params">
|
||
<tr><td class="paramname">surf</td><td>输入曲面 </td></tr>
|
||
<tr><td class="paramname">u_min,u_max</td><td>裁剪后的 u 参数范围(必须在原 domain 内) </td></tr>
|
||
<tr><td class="paramname">v_min,v_max</td><td>裁剪后的 v 参数范围(必须在原 domain 内) </td></tr>
|
||
</table>
|
||
</dd>
|
||
</dl>
|
||
<dl class="section return"><dt>返回</dt><dd>裁剪后的 NURBS 曲面</dd></dl>
|
||
<dl class="section note"><dt>注解</dt><dd>裁剪是"软裁剪"——几何不变,仅改变参数化。如需"硬裁剪" (沿等参线切除曲面边缘),需结合曲面细分。 <div class="fragment"><div class="line"><span class="keyword">auto</span> trimmed = <a class="code" href="group__curves.html#gafdf84393ce3a052eb842dca1e1b5ecc7">trim_surface</a>(surf, 0.2, 0.8, 0.1, 0.9);</div>
|
||
<div class="line"><span class="comment">// trimmed 的参数域为 [0,1]×[0,1],但几何仅对应原曲面的子区域</span></div>
|
||
<div class="ttc" id="agroup__curves_html_gafdf84393ce3a052eb842dca1e1b5ecc7"><div class="ttname"><a href="group__curves.html#gafdf84393ce3a052eb842dca1e1b5ecc7">vde::curves::trim_surface</a></div><div class="ttdeci">NurbsSurface trim_surface(const NurbsSurface &surf, double u_min, double u_max, double v_min, double v_max)</div><div class="ttdoc">NURBS 曲面参数域裁剪</div></div>
|
||
</div><!-- fragment --> </dd></dl>
|
||
|
||
</div>
|
||
</div>
|
||
</div><!-- contents -->
|
||
</div><!-- doc-content -->
|
||
<!-- start footer part -->
|
||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||
<ul>
|
||
<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>
|