Files
ViewDesignEngine/docs/api/classvde_1_1curves_1_1BSplineCurve.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

493 lines
25 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::BSplineCurve类 参考</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_1BSplineCurve.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="classvde_1_1curves_1_1BSplineCurve-members.html">所有成员列表</a> </div>
<div class="headertitle">
<div class="title">vde::curves::BSplineCurve类 参考<div class="ingroups"><a class="el" href="group__curves.html">曲线曲面模块 (vde::curves)</a></div></div> </div>
</div><!--header-->
<div class="contents">
<p>B 样条曲线(非有理、均匀/非均匀节点)
<a href="classvde_1_1curves_1_1BSplineCurve.html#details">更多...</a></p>
<p><code>#include &lt;<a class="el" href="bspline__curve_8h_source.html">bspline_curve.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:ac122dfe6b9515f29d0415ae8c6918984"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classvde_1_1curves_1_1BSplineCurve.html#ac122dfe6b9515f29d0415ae8c6918984">BSplineCurve</a> (std::vector&lt; Point3D &gt; <a class="el" href="classvde_1_1curves_1_1BSplineCurve.html#a04741a3297bbd26c5ab8ac712fc86906">control_points</a>, std::vector&lt; double &gt; <a class="el" href="classvde_1_1curves_1_1BSplineCurve.html#ae2f04689aac05a5cc631daa2d4d2661b">knots</a>, int <a class="el" href="classvde_1_1curves_1_1BSplineCurve.html#a4139f8b3b8bd315c5506136681e60273">degree</a>)</td></tr>
<tr class="memdesc:ac122dfe6b9515f29d0415ae8c6918984"><td class="mdescLeft">&#160;</td><td class="mdescRight">构造 B 样条曲线 <a href="classvde_1_1curves_1_1BSplineCurve.html#ac122dfe6b9515f29d0415ae8c6918984">更多...</a><br /></td></tr>
<tr class="separator:ac122dfe6b9515f29d0415ae8c6918984"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa16013651a9b35a2f755c56b94436278"><td class="memItemLeft" align="right" valign="top">Point3D&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classvde_1_1curves_1_1BSplineCurve.html#aa16013651a9b35a2f755c56b94436278">evaluate</a> (double t) const</td></tr>
<tr class="memdesc:aa16013651a9b35a2f755c56b94436278"><td class="mdescLeft">&#160;</td><td class="mdescRight">在参数 t 处求值曲线点 <a href="classvde_1_1curves_1_1BSplineCurve.html#aa16013651a9b35a2f755c56b94436278">更多...</a><br /></td></tr>
<tr class="separator:aa16013651a9b35a2f755c56b94436278"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2fd32824beffc6ed33e731d1aba6288f"><td class="memItemLeft" align="right" valign="top">Vector3D&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classvde_1_1curves_1_1BSplineCurve.html#a2fd32824beffc6ed33e731d1aba6288f">derivative</a> (double t, int order=1) const</td></tr>
<tr class="memdesc:a2fd32824beffc6ed33e731d1aba6288f"><td class="mdescLeft">&#160;</td><td class="mdescRight">在参数 t 处求导数 <a href="classvde_1_1curves_1_1BSplineCurve.html#a2fd32824beffc6ed33e731d1aba6288f">更多...</a><br /></td></tr>
<tr class="separator:a2fd32824beffc6ed33e731d1aba6288f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4139f8b3b8bd315c5506136681e60273"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classvde_1_1curves_1_1BSplineCurve.html#a4139f8b3b8bd315c5506136681e60273">degree</a> () const</td></tr>
<tr class="memdesc:a4139f8b3b8bd315c5506136681e60273"><td class="mdescLeft">&#160;</td><td class="mdescRight">曲线阶次 <a href="classvde_1_1curves_1_1BSplineCurve.html#a4139f8b3b8bd315c5506136681e60273">更多...</a><br /></td></tr>
<tr class="separator:a4139f8b3b8bd315c5506136681e60273"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a020663a039886ef2b17009405e5db855"><td class="memItemLeft" align="right" valign="top">std::pair&lt; double, double &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classvde_1_1curves_1_1BSplineCurve.html#a020663a039886ef2b17009405e5db855">domain</a> () const</td></tr>
<tr class="memdesc:a020663a039886ef2b17009405e5db855"><td class="mdescLeft">&#160;</td><td class="mdescRight">参数定义域 <a href="classvde_1_1curves_1_1BSplineCurve.html#a020663a039886ef2b17009405e5db855">更多...</a><br /></td></tr>
<tr class="separator:a020663a039886ef2b17009405e5db855"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a04741a3297bbd26c5ab8ac712fc86906"><td class="memItemLeft" align="right" valign="top">const std::vector&lt; Point3D &gt; &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classvde_1_1curves_1_1BSplineCurve.html#a04741a3297bbd26c5ab8ac712fc86906">control_points</a> () const</td></tr>
<tr class="memdesc:a04741a3297bbd26c5ab8ac712fc86906"><td class="mdescLeft">&#160;</td><td class="mdescRight">控制点访问 <a href="classvde_1_1curves_1_1BSplineCurve.html#a04741a3297bbd26c5ab8ac712fc86906">更多...</a><br /></td></tr>
<tr class="separator:a04741a3297bbd26c5ab8ac712fc86906"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae2f04689aac05a5cc631daa2d4d2661b"><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_1BSplineCurve.html#ae2f04689aac05a5cc631daa2d4d2661b">knots</a> () const</td></tr>
<tr class="memdesc:ae2f04689aac05a5cc631daa2d4d2661b"><td class="mdescLeft">&#160;</td><td class="mdescRight">节点向量访问 <a href="classvde_1_1curves_1_1BSplineCurve.html#ae2f04689aac05a5cc631daa2d4d2661b">更多...</a><br /></td></tr>
<tr class="separator:ae2f04689aac05a5cc631daa2d4d2661b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af4e982a7104d5a7e1df0ec94539518f1"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classvde_1_1curves_1_1BSplineCurve.html#af4e982a7104d5a7e1df0ec94539518f1">find_span</a> (double t) const</td></tr>
<tr class="memdesc:af4e982a7104d5a7e1df0ec94539518f1"><td class="mdescLeft">&#160;</td><td class="mdescRight">查找 t 所在的节点区间 <a href="classvde_1_1curves_1_1BSplineCurve.html#af4e982a7104d5a7e1df0ec94539518f1">更多...</a><br /></td></tr>
<tr class="separator:af4e982a7104d5a7e1df0ec94539518f1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a233f6553350307715708fff3961e535d"><td class="memItemLeft" align="right" valign="top">std::vector&lt; double &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classvde_1_1curves_1_1BSplineCurve.html#a233f6553350307715708fff3961e535d">basis_functions</a> (double t, int span=-1) const</td></tr>
<tr class="memdesc:a233f6553350307715708fff3961e535d"><td class="mdescLeft">&#160;</td><td class="mdescRight">在 t 处求非零基函数值 <a href="classvde_1_1curves_1_1BSplineCurve.html#a233f6553350307715708fff3961e535d">更多...</a><br /></td></tr>
<tr class="separator:a233f6553350307715708fff3961e535d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aacd9293d70a48686ffe89542d2343051"><td class="memItemLeft" align="right" valign="top">std::vector&lt; double &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classvde_1_1curves_1_1BSplineCurve.html#aacd9293d70a48686ffe89542d2343051">basis_derivatives</a> (double t, int span=-1) const</td></tr>
<tr class="memdesc:aacd9293d70a48686ffe89542d2343051"><td class="mdescLeft">&#160;</td><td class="mdescRight">在 t 处求非零基函数的一阶导数 <a href="classvde_1_1curves_1_1BSplineCurve.html#aacd9293d70a48686ffe89542d2343051">更多...</a><br /></td></tr>
<tr class="separator:aacd9293d70a48686ffe89542d2343051"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">详细描述</h2>
<div class="textblock"><p>B 样条曲线(非有理、均匀/非均匀节点) </p>
<p>由 n+1 个控制点、m+1 个节点向量和阶次 p 定义。 节点向量必须满足 m = n + p + 1。 参数域为 [knots[p], knots[n+1]],由前 p 个和后 p 个节点修剪。</p>
<p>与 Bézier 的主要区别:</p><ul>
<li>局部控制:修改单个控制点仅影响 [t_i, t_{i+p+1}] 区间</li>
<li>节点插入可引入更多控制点而不改变形状</li>
<li>通过多重节点可达 C^{p-k} 连续性 </li>
</ul>
<p class="definition">在文件 <a class="el" href="bspline__curve_8h_source.html">bspline_curve.h</a><a class="el" href="bspline__curve_8h_source.html#l00023">23</a> 行定义.</p>
</div><h2 class="groupheader">构造及析构函数说明</h2>
<a id="ac122dfe6b9515f29d0415ae8c6918984"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac122dfe6b9515f29d0415ae8c6918984">&#9670;&nbsp;</a></span>BSplineCurve()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">vde::curves::BSplineCurve::BSplineCurve </td>
<td>(</td>
<td class="paramtype">std::vector&lt; Point3D &gt;&#160;</td>
<td class="paramname"><em>control_points</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</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>degree</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>构造 B 样条曲线 </p>
<dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">control_points</td><td>n+1 个控制点 </td></tr>
<tr><td class="paramname">knots</td><td>节点向量,必须为非递减序列 </td></tr>
<tr><td class="paramname">degree</td><td>阶次 p </td></tr>
</table>
</dd>
</dl>
<dl class="section note"><dt>注解</dt><dd>节点数量 = 控制点数 + 阶次 + 1;clamped 端点多重度为 p+1 <div class="fragment"><div class="line"><span class="comment">// 三次 B 样条,7 个控制点</span></div>
<div class="line"><a class="code" href="classvde_1_1curves_1_1BSplineCurve.html#ac122dfe6b9515f29d0415ae8c6918984">BSplineCurve</a> curve(cps, {0,0,0,0, 0.25,0.5,0.75, 1,1,1,1}, 3);</div>
<div class="ttc" id="aclassvde_1_1curves_1_1BSplineCurve_html_ac122dfe6b9515f29d0415ae8c6918984"><div class="ttname"><a href="classvde_1_1curves_1_1BSplineCurve.html#ac122dfe6b9515f29d0415ae8c6918984">vde::curves::BSplineCurve::BSplineCurve</a></div><div class="ttdeci">BSplineCurve(std::vector&lt; Point3D &gt; control_points, std::vector&lt; double &gt; knots, int degree)</div><div class="ttdoc">构造 B 样条曲线</div></div>
</div><!-- fragment --> </dd></dl>
</div>
</div>
<h2 class="groupheader">成员函数说明</h2>
<a id="aacd9293d70a48686ffe89542d2343051"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aacd9293d70a48686ffe89542d2343051">&#9670;&nbsp;</a></span>basis_derivatives()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">std::vector&lt;double&gt; vde::curves::BSplineCurve::basis_derivatives </td>
<td>(</td>
<td class="paramtype">double&#160;</td>
<td class="paramname"><em>t</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>span</em> = <code>-1</code>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td> const</td>
</tr>
</table>
</div><div class="memdoc">
<p>在 t 处求非零基函数的一阶导数 </p>
<dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">t</td><td>参数值 </td></tr>
<tr><td class="paramname">span</td><td>节点区间索引,-1 表示自动查找 </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>dN_{span-p}/du, ..., dN_{span}/du 共 p+1 个值 </dd></dl>
<dl class="section note"><dt>注解</dt><dd>B 样条基函数导数递推: N'_{i,p} = p/(t_{i+p}-t_i)·N_{i,p-1} - p/(t_{i+p+1}-t_{i+1})·N_{i+1,p-1} </dd></dl>
<dl class="section see"><dt>参见</dt><dd><a class="el" href="classvde_1_1curves_1_1BSplineCurve.html#a233f6553350307715708fff3961e535d" title="在 t 处求非零基函数值">basis_functions</a> </dd></dl>
</div>
</div>
<a id="a233f6553350307715708fff3961e535d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a233f6553350307715708fff3961e535d">&#9670;&nbsp;</a></span>basis_functions()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">std::vector&lt;double&gt; vde::curves::BSplineCurve::basis_functions </td>
<td>(</td>
<td class="paramtype">double&#160;</td>
<td class="paramname"><em>t</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>span</em> = <code>-1</code>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td> const</td>
</tr>
</table>
</div><div class="memdoc">
<p>在 t 处求非零基函数值 </p>
<dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">t</td><td>参数值 </td></tr>
<tr><td class="paramname">span</td><td>节点区间索引,-1 表示自动查找 </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>N_{span-p}(t), ..., N_{span}(t) 共 p+1 个值 </dd></dl>
<dl class="section note"><dt>注解</dt><dd>仅返回 p+1 个非零基函数;用于端点求值及插值 </dd></dl>
<dl class="section see"><dt>参见</dt><dd><a class="el" href="classvde_1_1curves_1_1BSplineCurve.html#af4e982a7104d5a7e1df0ec94539518f1" title="查找 t 所在的节点区间">find_span</a> </dd></dl>
</div>
</div>
<a id="a04741a3297bbd26c5ab8ac712fc86906"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a04741a3297bbd26c5ab8ac712fc86906">&#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;Point3D&gt;&amp; vde::curves::BSplineCurve::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="bspline__curve_8h_source.html">bspline_curve.h</a><a class="el" href="bspline__curve_8h_source.html#l00075">75</a> 行定义.</p>
</div>
</div>
<a id="a4139f8b3b8bd315c5506136681e60273"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a4139f8b3b8bd315c5506136681e60273">&#9670;&nbsp;</a></span>degree()</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::BSplineCurve::degree </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>阶次 p </dd></dl>
<p class="definition">在文件 <a class="el" href="bspline__curve_8h_source.html">bspline_curve.h</a><a class="el" href="bspline__curve_8h_source.html#l00063">63</a> 行定义.</p>
</div>
</div>
<a id="a2fd32824beffc6ed33e731d1aba6288f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2fd32824beffc6ed33e731d1aba6288f">&#9670;&nbsp;</a></span>derivative()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">Vector3D vde::curves::BSplineCurve::derivative </td>
<td>(</td>
<td class="paramtype">double&#160;</td>
<td class="paramname"><em>t</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>order</em> = <code>1</code>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td> const</td>
</tr>
</table>
</div><div class="memdoc">
<p>在参数 t 处求导数 </p>
<dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">t</td><td>参数值 </td></tr>
<tr><td class="paramname">order</td><td>导数阶数,1 = 一切向量 </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>导数向量 </dd></dl>
<dl class="section note"><dt>注解</dt><dd>B 样条导数公式: P^{(k)}(t) = Σ P_i^{(k)} N_{i,p-k}(t),其中 P_i^{(0)} = P_i P_i^{(k)} = p·(P_i^{(k-1)} - P_{i-1}^{(k-1)}) / (t_{i+p-k+1} - t_i) </dd></dl>
</div>
</div>
<a id="a020663a039886ef2b17009405e5db855"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a020663a039886ef2b17009405e5db855">&#9670;&nbsp;</a></span>domain()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">std::pair&lt;double, double&gt; vde::curves::BSplineCurve::domain </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</div><div class="memdoc">
<p>参数定义域 </p>
<dl class="section return"><dt>返回</dt><dd>有效参数范围 [knots[p], knots[n+1]] </dd></dl>
</div>
</div>
<a id="aa16013651a9b35a2f755c56b94436278"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa16013651a9b35a2f755c56b94436278">&#9670;&nbsp;</a></span>evaluate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">Point3D vde::curves::BSplineCurve::evaluate </td>
<td>(</td>
<td class="paramtype">double&#160;</td>
<td class="paramname"><em>t</em></td><td>)</td>
<td> const</td>
</tr>
</table>
</div><div class="memdoc">
<p>在参数 t 处求值曲线点 </p>
<dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">t</td><td>参数值,必须在 <a class="el" href="classvde_1_1curves_1_1BSplineCurve.html#a020663a039886ef2b17009405e5db855" title="参数定义域">domain()</a> 范围内 </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>曲线上对应 t 的点坐标 </dd></dl>
<dl class="section note"><dt>注解</dt><dd>使用 de BoorCox-de Boor)递推算法 </dd></dl>
</div>
</div>
<a id="af4e982a7104d5a7e1df0ec94539518f1"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af4e982a7104d5a7e1df0ec94539518f1">&#9670;&nbsp;</a></span>find_span()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int vde::curves::BSplineCurve::find_span </td>
<td>(</td>
<td class="paramtype">double&#160;</td>
<td class="paramname"><em>t</em></td><td>)</td>
<td> const</td>
</tr>
</table>
</div><div class="memdoc">
<p>查找 t 所在的节点区间 </p>
<dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">t</td><td>参数值 </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>节点区间索引 i 满足 knots[i] ≤ t &lt; knots[i+1] </dd></dl>
<dl class="section note"><dt>注解</dt><dd>使用二分查找,O(log n);求值和基函数的前置步骤 <div class="fragment"><div class="line"><span class="keywordtype">int</span> span = curve.find_span(0.5);</div>
<div class="line"><span class="keyword">auto</span> N = curve.basis_functions(0.5, span);</div>
</div><!-- fragment --> </dd></dl>
</div>
</div>
<a id="ae2f04689aac05a5cc631daa2d4d2661b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae2f04689aac05a5cc631daa2d4d2661b">&#9670;&nbsp;</a></span>knots()</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::BSplineCurve::knots </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="bspline__curve_8h_source.html">bspline_curve.h</a><a class="el" href="bspline__curve_8h_source.html#l00081">81</a> 行定义.</p>
</div>
</div>
<hr/>该类的文档由以下文件生成:<ul>
<li>include/vde/curves/<a class="el" href="bspline__curve_8h_source.html">bspline_curve.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_1BSplineCurve.html">BSplineCurve</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>