282 lines
50 KiB
HTML
282 lines
50 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: include/vde/sdf/sdf_optimize.h 源文件</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('sdf__optimize_8h_source.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="headertitle">
|
||
|
|
<div class="title">sdf_optimize.h</div> </div>
|
||
|
|
</div><!--header-->
|
||
|
|
<div class="contents">
|
||
|
|
<a href="sdf__optimize_8h.html">浏览该文件的文档.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="preprocessor">#pragma once</span></div>
|
||
|
|
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#include "<a class="code" href="sdf__tree_8h.html">vde/sdf/sdf_tree.h</a>"</span></div>
|
||
|
|
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor">#include "<a class="code" href="point_8h.html">vde/core/point.h</a>"</span></div>
|
||
|
|
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor">#include <vector></span></div>
|
||
|
|
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="preprocessor">#include <functional></span></div>
|
||
|
|
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  </div>
|
||
|
|
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="keyword">namespace </span><a class="code" href="namespacevde_1_1sdf.html">vde::sdf</a> {</div>
|
||
|
|
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  </div>
|
||
|
|
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="keyword">using</span> <a class="code" href="namespacevde_1_1core.html#ac6aed70c4b90d13f10217267cd7a1952">core::Point3D</a>;</div>
|
||
|
|
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="keyword">using</span> <a class="code" href="namespacevde_1_1core.html#ab763c018d19e10e91a6c6d6ab2ccc8e0">core::Vector3D</a>;</div>
|
||
|
|
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  </div>
|
||
|
|
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="comment">// ────────────────────────────────────────────────</span></div>
|
||
|
|
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="comment">// Shape Optimization</span></div>
|
||
|
|
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="comment">// ────────────────────────────────────────────────</span></div>
|
||
|
|
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  </div>
|
||
|
|
<div class="line"><a name="l00050"></a><span class="lineno"><a class="line" href="structvde_1_1sdf_1_1OptimizeResult.html"> 50</a></span> <span class="keyword">struct </span><a class="code" href="structvde_1_1sdf_1_1OptimizeResult.html">OptimizeResult</a> {</div>
|
||
|
|
<div class="line"><a name="l00051"></a><span class="lineno"><a class="line" href="structvde_1_1sdf_1_1OptimizeResult.html#aa28eb8fdf31493d2f294e03401085404"> 51</a></span>  <a class="code" href="namespacevde_1_1sdf.html#a8fdcf277d6327c0b1413373ae82f9d5d">SdfNodePtr</a> <a class="code" href="structvde_1_1sdf_1_1OptimizeResult.html#aa28eb8fdf31493d2f294e03401085404">optimized_shape</a>; </div>
|
||
|
|
<div class="line"><a name="l00052"></a><span class="lineno"><a class="line" href="structvde_1_1sdf_1_1OptimizeResult.html#afa8ff8ccb303c25d39942692b5dc074f"> 52</a></span>  <span class="keywordtype">double</span> <a class="code" href="structvde_1_1sdf_1_1OptimizeResult.html#afa8ff8ccb303c25d39942692b5dc074f">final_loss</a>; </div>
|
||
|
|
<div class="line"><a name="l00053"></a><span class="lineno"><a class="line" href="structvde_1_1sdf_1_1OptimizeResult.html#a4c5a8ca85fc30a4b9b5bfe945b73d9a1"> 53</a></span>  <span class="keywordtype">int</span> <a class="code" href="structvde_1_1sdf_1_1OptimizeResult.html#a4c5a8ca85fc30a4b9b5bfe945b73d9a1">iterations</a>; </div>
|
||
|
|
<div class="line"><a name="l00054"></a><span class="lineno"><a class="line" href="structvde_1_1sdf_1_1OptimizeResult.html#a164285a2d84d09ab13e7e7f969956b80"> 54</a></span>  <span class="keywordtype">bool</span> <a class="code" href="structvde_1_1sdf_1_1OptimizeResult.html#a164285a2d84d09ab13e7e7f969956b80">converged</a>; </div>
|
||
|
|
<div class="line"><a name="l00055"></a><span class="lineno"><a class="line" href="structvde_1_1sdf_1_1OptimizeResult.html#ad763278c553a7c69487340598f9bae0b"> 55</a></span>  std::vector<double> <a class="code" href="structvde_1_1sdf_1_1OptimizeResult.html#ad763278c553a7c69487340598f9bae0b">loss_history</a>; </div>
|
||
|
|
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> };</div>
|
||
|
|
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  </div>
|
||
|
|
<div class="line"><a name="l00065"></a><span class="lineno"><a class="line" href="namespacevde_1_1sdf.html#a3ff132fb69c033909652b3078f81ad1a"> 65</a></span> <span class="keyword">using</span> <a class="code" href="namespacevde_1_1sdf.html#a3ff132fb69c033909652b3078f81ad1a">LossFn</a> = std::function<double(<span class="keyword">const</span> std::function<<span class="keywordtype">double</span>(<span class="keyword">const</span> <a class="code" href="namespacevde_1_1core.html#ac6aed70c4b90d13f10217267cd7a1952">Point3D</a>&)>&)>;</div>
|
||
|
|
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  </div>
|
||
|
|
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> <span class="comment">// ── Shape Fitting ───────────────────────────────</span></div>
|
||
|
|
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  </div>
|
||
|
|
<div class="line"><a name="l00099"></a><span class="lineno"><a class="line" href="namespacevde_1_1sdf.html#a437e4e366b2cc67090426ce6b6158be6"> 99</a></span> [[nodiscard]] <a class="code" href="structvde_1_1sdf_1_1OptimizeResult.html">OptimizeResult</a> <a class="code" href="namespacevde_1_1sdf.html#a437e4e366b2cc67090426ce6b6158be6">fit_to_point_cloud</a>(</div>
|
||
|
|
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  <span class="keyword">const</span> <a class="code" href="namespacevde_1_1sdf.html#a8fdcf277d6327c0b1413373ae82f9d5d">SdfNodePtr</a>& initial,</div>
|
||
|
|
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  <span class="keyword">const</span> std::vector<Point3D>& target_points,</div>
|
||
|
|
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  <span class="keywordtype">double</span> learning_rate = 0.01,</div>
|
||
|
|
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  <span class="keywordtype">int</span> max_iterations = 100);</div>
|
||
|
|
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  </div>
|
||
|
|
<div class="line"><a name="l00119"></a><span class="lineno"><a class="line" href="namespacevde_1_1sdf.html#a268271fb51fd0a95c5b0611394397a9d"> 119</a></span> [[nodiscard]] <a class="code" href="structvde_1_1sdf_1_1OptimizeResult.html">OptimizeResult</a> <a class="code" href="namespacevde_1_1sdf.html#a268271fb51fd0a95c5b0611394397a9d">fit_surface_to_points</a>(</div>
|
||
|
|
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  <span class="keyword">const</span> <a class="code" href="namespacevde_1_1sdf.html#a8fdcf277d6327c0b1413373ae82f9d5d">SdfNodePtr</a>& initial,</div>
|
||
|
|
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  <span class="keyword">const</span> std::vector<Point3D>& surface_points,</div>
|
||
|
|
<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  <span class="keywordtype">double</span> learning_rate = 0.01,</div>
|
||
|
|
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  <span class="keywordtype">int</span> max_iterations = 100);</div>
|
||
|
|
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  </div>
|
||
|
|
<div class="line"><a name="l00147"></a><span class="lineno"><a class="line" href="namespacevde_1_1sdf.html#a5cf5230813be28ae6862f124adf3e438"> 147</a></span> [[nodiscard]] <a class="code" href="structvde_1_1sdf_1_1OptimizeResult.html">OptimizeResult</a> <a class="code" href="namespacevde_1_1sdf.html#a5cf5230813be28ae6862f124adf3e438">fit_to_sdf</a>(</div>
|
||
|
|
<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  <span class="keyword">const</span> <a class="code" href="namespacevde_1_1sdf.html#a8fdcf277d6327c0b1413373ae82f9d5d">SdfNodePtr</a>& source,</div>
|
||
|
|
<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  <span class="keyword">const</span> std::function<<span class="keywordtype">double</span>(<span class="keyword">const</span> <a class="code" href="namespacevde_1_1core.html#ac6aed70c4b90d13f10217267cd7a1952">Point3D</a>&)>& target_sdf,</div>
|
||
|
|
<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  <span class="keyword">const</span> <a class="code" href="namespacevde_1_1core.html#ac6aed70c4b90d13f10217267cd7a1952">Point3D</a>& bmin, <span class="keyword">const</span> <a class="code" href="namespacevde_1_1core.html#ac6aed70c4b90d13f10217267cd7a1952">Point3D</a>& bmax,</div>
|
||
|
|
<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  <span class="keywordtype">int</span> grid_resolution = 16,</div>
|
||
|
|
<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  <span class="keywordtype">double</span> learning_rate = 0.01,</div>
|
||
|
|
<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  <span class="keywordtype">int</span> max_iterations = 100);</div>
|
||
|
|
<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  </div>
|
||
|
|
<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> <span class="comment">// ── Collision Avoidance ─────────────────────────</span></div>
|
||
|
|
<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  </div>
|
||
|
|
<div class="line"><a name="l00177"></a><span class="lineno"><a class="line" href="namespacevde_1_1sdf.html#a694dea06d4bbecf6063203f554d9fe05"> 177</a></span> [[nodiscard]] <span class="keywordtype">bool</span> <a class="code" href="namespacevde_1_1sdf.html#a694dea06d4bbecf6063203f554d9fe05">resolve_collision</a>(</div>
|
||
|
|
<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  <a class="code" href="namespacevde_1_1sdf.html#a8fdcf277d6327c0b1413373ae82f9d5d">SdfNodePtr</a>& shape_a, <a class="code" href="namespacevde_1_1sdf.html#a8fdcf277d6327c0b1413373ae82f9d5d">SdfNodePtr</a>& shape_b,</div>
|
||
|
|
<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  <span class="keywordtype">double</span> step_size = 0.1,</div>
|
||
|
|
<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>  <span class="keywordtype">int</span> max_iterations = 50);</div>
|
||
|
|
<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  </div>
|
||
|
|
<div class="line"><a name="l00197"></a><span class="lineno"><a class="line" href="namespacevde_1_1sdf.html#a859ced3d37ab1c3b26dba3400fbb2dfc"> 197</a></span> [[nodiscard]] <span class="keywordtype">double</span> <a class="code" href="namespacevde_1_1sdf.html#a859ced3d37ab1c3b26dba3400fbb2dfc">penetration_depth</a>(</div>
|
||
|
|
<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  <span class="keyword">const</span> <a class="code" href="namespacevde_1_1sdf.html#a8fdcf277d6327c0b1413373ae82f9d5d">SdfNodePtr</a>& shape_a,</div>
|
||
|
|
<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  <span class="keyword">const</span> <a class="code" href="namespacevde_1_1sdf.html#a8fdcf277d6327c0b1413373ae82f9d5d">SdfNodePtr</a>& shape_b,</div>
|
||
|
|
<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>  <span class="keyword">const</span> <a class="code" href="namespacevde_1_1core.html#ac6aed70c4b90d13f10217267cd7a1952">Point3D</a>& bmin, <span class="keyword">const</span> <a class="code" href="namespacevde_1_1core.html#ac6aed70c4b90d13f10217267cd7a1952">Point3D</a>& bmax,</div>
|
||
|
|
<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>  <span class="keywordtype">int</span> samples = 1000);</div>
|
||
|
|
<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>  </div>
|
||
|
|
<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> <span class="comment">// ── Reachability / Accessibility ─────────────────</span></div>
|
||
|
|
<div class="line"><a name="l00204"></a><span class="lineno"> 204</span>  </div>
|
||
|
|
<div class="line"><a name="l00221"></a><span class="lineno"><a class="line" href="namespacevde_1_1sdf.html#a2008f513c59b2b1d55cf7dd6ca7d5bcc"> 221</a></span> [[nodiscard]] <span class="keywordtype">double</span> <a class="code" href="namespacevde_1_1sdf.html#a2008f513c59b2b1d55cf7dd6ca7d5bcc">accessibility</a>(</div>
|
||
|
|
<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>  <span class="keyword">const</span> <a class="code" href="namespacevde_1_1sdf.html#a8fdcf277d6327c0b1413373ae82f9d5d">SdfNodePtr</a>& shape,</div>
|
||
|
|
<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>  <span class="keyword">const</span> <a class="code" href="namespacevde_1_1core.html#ac6aed70c4b90d13f10217267cd7a1952">Point3D</a>& p, <span class="comment">// surface point</span></div>
|
||
|
|
<div class="line"><a name="l00224"></a><span class="lineno"> 224</span>  <span class="keyword">const</span> <a class="code" href="namespacevde_1_1core.html#ab763c018d19e10e91a6c6d6ab2ccc8e0">Vector3D</a>& direction, <span class="comment">// approach direction</span></div>
|
||
|
|
<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>  <span class="keywordtype">int</span> hemisphere_samples = 64);</div>
|
||
|
|
<div class="line"><a name="l00226"></a><span class="lineno"> 226</span>  </div>
|
||
|
|
<div class="line"><a name="l00241"></a><span class="lineno"><a class="line" href="namespacevde_1_1sdf.html#a145b3e2651a90dd1ddc4c5f8d2f3befd"> 241</a></span> [[nodiscard]] <a class="code" href="namespacevde_1_1core.html#ac6aed70c4b90d13f10217267cd7a1952">Point3D</a> <a class="code" href="namespacevde_1_1sdf.html#a145b3e2651a90dd1ddc4c5f8d2f3befd">find_accessible_point</a>(</div>
|
||
|
|
<div class="line"><a name="l00242"></a><span class="lineno"> 242</span>  <span class="keyword">const</span> <a class="code" href="namespacevde_1_1sdf.html#a8fdcf277d6327c0b1413373ae82f9d5d">SdfNodePtr</a>& shape,</div>
|
||
|
|
<div class="line"><a name="l00243"></a><span class="lineno"> 243</span>  <span class="keyword">const</span> <a class="code" href="namespacevde_1_1core.html#ab763c018d19e10e91a6c6d6ab2ccc8e0">Vector3D</a>& approach_dir,</div>
|
||
|
|
<div class="line"><a name="l00244"></a><span class="lineno"> 244</span>  <span class="keyword">const</span> <a class="code" href="namespacevde_1_1core.html#ac6aed70c4b90d13f10217267cd7a1952">Point3D</a>& bmin, <span class="keyword">const</span> <a class="code" href="namespacevde_1_1core.html#ac6aed70c4b90d13f10217267cd7a1952">Point3D</a>& bmax,</div>
|
||
|
|
<div class="line"><a name="l00245"></a><span class="lineno"> 245</span>  <span class="keywordtype">int</span> grid_res = 32);</div>
|
||
|
|
<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>  </div>
|
||
|
|
<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> <span class="comment">// ── Symmetry Detection ──────────────────────────</span></div>
|
||
|
|
<div class="line"><a name="l00248"></a><span class="lineno"> 248</span>  </div>
|
||
|
|
<div class="line"><a name="l00265"></a><span class="lineno"><a class="line" href="namespacevde_1_1sdf.html#a6e1454146ae724f12fac47f7026048f7"> 265</a></span> [[nodiscard]] <span class="keywordtype">double</span> <a class="code" href="namespacevde_1_1sdf.html#a6e1454146ae724f12fac47f7026048f7">symmetry_score</a>(</div>
|
||
|
|
<div class="line"><a name="l00266"></a><span class="lineno"> 266</span>  <span class="keyword">const</span> <a class="code" href="namespacevde_1_1sdf.html#a8fdcf277d6327c0b1413373ae82f9d5d">SdfNodePtr</a>& shape,</div>
|
||
|
|
<div class="line"><a name="l00267"></a><span class="lineno"> 267</span>  <span class="keyword">const</span> <a class="code" href="namespacevde_1_1core.html#ac6aed70c4b90d13f10217267cd7a1952">Point3D</a>& bmin, <span class="keyword">const</span> <a class="code" href="namespacevde_1_1core.html#ac6aed70c4b90d13f10217267cd7a1952">Point3D</a>& bmax,</div>
|
||
|
|
<div class="line"><a name="l00268"></a><span class="lineno"> 268</span>  <span class="keyword">const</span> <a class="code" href="namespacevde_1_1core.html#ab763c018d19e10e91a6c6d6ab2ccc8e0">Vector3D</a>& plane_normal,</div>
|
||
|
|
<div class="line"><a name="l00269"></a><span class="lineno"> 269</span>  <span class="keywordtype">double</span> plane_offset = 0.0,</div>
|
||
|
|
<div class="line"><a name="l00270"></a><span class="lineno"> 270</span>  <span class="keywordtype">int</span> samples = 1000);</div>
|
||
|
|
<div class="line"><a name="l00271"></a><span class="lineno"> 271</span>  </div>
|
||
|
|
<div class="line"><a name="l00275"></a><span class="lineno"><a class="line" href="structvde_1_1sdf_1_1SymmetryResult.html"> 275</a></span> <span class="keyword">struct </span><a class="code" href="structvde_1_1sdf_1_1SymmetryResult.html">SymmetryResult</a> {</div>
|
||
|
|
<div class="line"><a name="l00276"></a><span class="lineno"><a class="line" href="structvde_1_1sdf_1_1SymmetryResult.html#a728d551540721a7aa5c65baeb6d87a8a"> 276</a></span>  <span class="keywordtype">double</span> <a class="code" href="structvde_1_1sdf_1_1SymmetryResult.html#a728d551540721a7aa5c65baeb6d87a8a">score</a>; </div>
|
||
|
|
<div class="line"><a name="l00277"></a><span class="lineno"><a class="line" href="structvde_1_1sdf_1_1SymmetryResult.html#ac6a7e9e46b44b9de5b2dc52f06da9a75"> 277</a></span>  <a class="code" href="namespacevde_1_1core.html#ab763c018d19e10e91a6c6d6ab2ccc8e0">Vector3D</a> <a class="code" href="structvde_1_1sdf_1_1SymmetryResult.html#ac6a7e9e46b44b9de5b2dc52f06da9a75">normal</a>; </div>
|
||
|
|
<div class="line"><a name="l00278"></a><span class="lineno"><a class="line" href="structvde_1_1sdf_1_1SymmetryResult.html#af1175d4979bb192167bd6aa95d69e610"> 278</a></span>  <span class="keywordtype">double</span> <a class="code" href="structvde_1_1sdf_1_1SymmetryResult.html#af1175d4979bb192167bd6aa95d69e610">offset</a>; </div>
|
||
|
|
<div class="line"><a name="l00279"></a><span class="lineno"> 279</span> };</div>
|
||
|
|
<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>  </div>
|
||
|
|
<div class="line"><a name="l00295"></a><span class="lineno"><a class="line" href="namespacevde_1_1sdf.html#a03924b38a765ff02af4d2f7f97fa414b"> 295</a></span> [[nodiscard]] <a class="code" href="structvde_1_1sdf_1_1SymmetryResult.html">SymmetryResult</a> <a class="code" href="namespacevde_1_1sdf.html#a03924b38a765ff02af4d2f7f97fa414b">find_symmetry_plane</a>(</div>
|
||
|
|
<div class="line"><a name="l00296"></a><span class="lineno"> 296</span>  <span class="keyword">const</span> <a class="code" href="namespacevde_1_1sdf.html#a8fdcf277d6327c0b1413373ae82f9d5d">SdfNodePtr</a>& shape,</div>
|
||
|
|
<div class="line"><a name="l00297"></a><span class="lineno"> 297</span>  <span class="keyword">const</span> <a class="code" href="namespacevde_1_1core.html#ac6aed70c4b90d13f10217267cd7a1952">Point3D</a>& bmin, <span class="keyword">const</span> <a class="code" href="namespacevde_1_1core.html#ac6aed70c4b90d13f10217267cd7a1952">Point3D</a>& bmax,</div>
|
||
|
|
<div class="line"><a name="l00298"></a><span class="lineno"> 298</span>  <span class="keywordtype">int</span> samples = 1000);</div>
|
||
|
|
<div class="line"><a name="l00299"></a><span class="lineno"> 299</span>  </div>
|
||
|
|
<div class="line"><a name="l00300"></a><span class="lineno"> 300</span> <span class="comment">// ── SDF Volume Computation ──────────────────────</span></div>
|
||
|
|
<div class="line"><a name="l00301"></a><span class="lineno"> 301</span>  </div>
|
||
|
|
<div class="line"><a name="l00321"></a><span class="lineno"><a class="line" href="namespacevde_1_1sdf.html#aa2c04cbe9e7cdd1252128f51af322a33"> 321</a></span> [[nodiscard]] <span class="keywordtype">double</span> <a class="code" href="namespacevde_1_1sdf.html#aa2c04cbe9e7cdd1252128f51af322a33">estimate_volume</a>(</div>
|
||
|
|
<div class="line"><a name="l00322"></a><span class="lineno"> 322</span>  <span class="keyword">const</span> <a class="code" href="namespacevde_1_1sdf.html#a8fdcf277d6327c0b1413373ae82f9d5d">SdfNodePtr</a>& shape,</div>
|
||
|
|
<div class="line"><a name="l00323"></a><span class="lineno"> 323</span>  <span class="keyword">const</span> <a class="code" href="namespacevde_1_1core.html#ac6aed70c4b90d13f10217267cd7a1952">Point3D</a>& bmin, <span class="keyword">const</span> <a class="code" href="namespacevde_1_1core.html#ac6aed70c4b90d13f10217267cd7a1952">Point3D</a>& bmax,</div>
|
||
|
|
<div class="line"><a name="l00324"></a><span class="lineno"> 324</span>  <span class="keywordtype">int</span> samples = 10000);</div>
|
||
|
|
<div class="line"><a name="l00325"></a><span class="lineno"> 325</span>  </div>
|
||
|
|
<div class="line"><a name="l00341"></a><span class="lineno"><a class="line" href="namespacevde_1_1sdf.html#a2f05df8be69025eaa31529072fd47a6d"> 341</a></span> [[nodiscard]] <a class="code" href="namespacevde_1_1core.html#ac6aed70c4b90d13f10217267cd7a1952">Point3D</a> <a class="code" href="namespacevde_1_1sdf.html#a2f05df8be69025eaa31529072fd47a6d">center_of_mass</a>(</div>
|
||
|
|
<div class="line"><a name="l00342"></a><span class="lineno"> 342</span>  <span class="keyword">const</span> <a class="code" href="namespacevde_1_1sdf.html#a8fdcf277d6327c0b1413373ae82f9d5d">SdfNodePtr</a>& shape,</div>
|
||
|
|
<div class="line"><a name="l00343"></a><span class="lineno"> 343</span>  <span class="keyword">const</span> <a class="code" href="namespacevde_1_1core.html#ac6aed70c4b90d13f10217267cd7a1952">Point3D</a>& bmin, <span class="keyword">const</span> <a class="code" href="namespacevde_1_1core.html#ac6aed70c4b90d13f10217267cd7a1952">Point3D</a>& bmax,</div>
|
||
|
|
<div class="line"><a name="l00344"></a><span class="lineno"> 344</span>  <span class="keywordtype">int</span> samples = 10000);</div>
|
||
|
|
<div class="line"><a name="l00345"></a><span class="lineno"> 345</span>  </div>
|
||
|
|
<div class="line"><a name="l00346"></a><span class="lineno"> 346</span> <span class="comment">// ── Parameter Collection ────────────────────────</span></div>
|
||
|
|
<div class="line"><a name="l00347"></a><span class="lineno"> 347</span>  </div>
|
||
|
|
<div class="line"><a name="l00354"></a><span class="lineno"><a class="line" href="structvde_1_1sdf_1_1ParamRef.html"> 354</a></span> <span class="keyword">struct </span><a class="code" href="structvde_1_1sdf_1_1ParamRef.html">ParamRef</a> {</div>
|
||
|
|
<div class="line"><a name="l00355"></a><span class="lineno"><a class="line" href="structvde_1_1sdf_1_1ParamRef.html#ae7bafe6272b37e49dbd27bb7801a17f7"> 355</a></span>  <span class="keywordtype">double</span>* <a class="code" href="structvde_1_1sdf_1_1ParamRef.html#ae7bafe6272b37e49dbd27bb7801a17f7">value</a>; </div>
|
||
|
|
<div class="line"><a name="l00356"></a><span class="lineno"><a class="line" href="structvde_1_1sdf_1_1ParamRef.html#a0cbedc43e468666e27a8990f39f386d0"> 356</a></span>  std::string <a class="code" href="structvde_1_1sdf_1_1ParamRef.html#a0cbedc43e468666e27a8990f39f386d0">name</a>; </div>
|
||
|
|
<div class="line"><a name="l00357"></a><span class="lineno"> 357</span> };</div>
|
||
|
|
<div class="line"><a name="l00358"></a><span class="lineno"> 358</span>  </div>
|
||
|
|
<div class="line"><a name="l00380"></a><span class="lineno"><a class="line" href="namespacevde_1_1sdf.html#ad6473a81281335b9b3aff1f1f145c448"> 380</a></span> [[nodiscard]] std::vector<ParamRef> <a class="code" href="namespacevde_1_1sdf.html#ad6473a81281335b9b3aff1f1f145c448">collect_params</a>(<a class="code" href="namespacevde_1_1sdf.html#a8fdcf277d6327c0b1413373ae82f9d5d">SdfNodePtr</a>& root);</div>
|
||
|
|
<div class="line"><a name="l00381"></a><span class="lineno"> 381</span>  </div>
|
||
|
|
<div class="line"><a name="l00405"></a><span class="lineno"><a class="line" href="namespacevde_1_1sdf.html#afdc3f3bcc8bf4b4884210afadb494c72"> 405</a></span> [[nodiscard]] std::vector<double> <a class="code" href="namespacevde_1_1sdf.html#afdc3f3bcc8bf4b4884210afadb494c72">numerical_gradient</a>(</div>
|
||
|
|
<div class="line"><a name="l00406"></a><span class="lineno"> 406</span>  <span class="keyword">const</span> std::vector<ParamRef>& params,</div>
|
||
|
|
<div class="line"><a name="l00407"></a><span class="lineno"> 407</span>  <span class="keyword">const</span> std::function<<span class="keywordtype">double</span>()>& loss_fn,</div>
|
||
|
|
<div class="line"><a name="l00408"></a><span class="lineno"> 408</span>  <span class="keywordtype">double</span> eps = 1e-6);</div>
|
||
|
|
<div class="line"><a name="l00409"></a><span class="lineno"> 409</span>  </div>
|
||
|
|
<div class="line"><a name="l00410"></a><span class="lineno"> 410</span> <span class="comment">// ── Gradient Descent Utility ────────────────────</span></div>
|
||
|
|
<div class="line"><a name="l00411"></a><span class="lineno"> 411</span>  </div>
|
||
|
|
<div class="line"><a name="l00428"></a><span class="lineno"><a class="line" href="classvde_1_1sdf_1_1GradientDescent.html"> 428</a></span> <span class="keyword">class </span><a class="code" href="classvde_1_1sdf_1_1GradientDescent.html">GradientDescent</a> {</div>
|
||
|
|
<div class="line"><a name="l00429"></a><span class="lineno"> 429</span> <span class="keyword">public</span>:</div>
|
||
|
|
<div class="line"><a name="l00434"></a><span class="lineno"><a class="line" href="classvde_1_1sdf_1_1GradientDescent.html#a3278d73a572d2439849e704278fe288e"> 434</a></span>  <span class="keyword">explicit</span> <a class="code" href="classvde_1_1sdf_1_1GradientDescent.html#a3278d73a572d2439849e704278fe288e">GradientDescent</a>(<span class="keywordtype">double</span> lr) : lr_(lr) {}</div>
|
||
|
|
<div class="line"><a name="l00435"></a><span class="lineno"> 435</span>  </div>
|
||
|
|
<div class="line"><a name="l00448"></a><span class="lineno"><a class="line" href="classvde_1_1sdf_1_1GradientDescent.html#ad2b8fd13bd3621248f58b96ad203cf20"> 448</a></span>  <span class="keywordtype">double</span> <a class="code" href="classvde_1_1sdf_1_1GradientDescent.html#ad2b8fd13bd3621248f58b96ad203cf20">step</a>(std::vector<double>& params,</div>
|
||
|
|
<div class="line"><a name="l00449"></a><span class="lineno"> 449</span>  <span class="keyword">const</span> std::function<<span class="keywordtype">double</span>(<span class="keyword">const</span> std::vector<double>&,</div>
|
||
|
|
<div class="line"><a name="l00450"></a><span class="lineno"> 450</span>  std::vector<double>&)>& grad_fn);</div>
|
||
|
|
<div class="line"><a name="l00451"></a><span class="lineno"> 451</span>  </div>
|
||
|
|
<div class="line"><a name="l00453"></a><span class="lineno"><a class="line" href="classvde_1_1sdf_1_1GradientDescent.html#a60a9114d4dc5df50682390ab1747615d"> 453</a></span>  <span class="keywordtype">void</span> <a class="code" href="classvde_1_1sdf_1_1GradientDescent.html#a60a9114d4dc5df50682390ab1747615d">set_learning_rate</a>(<span class="keywordtype">double</span> lr) { lr_ = lr; }</div>
|
||
|
|
<div class="line"><a name="l00454"></a><span class="lineno"> 454</span>  </div>
|
||
|
|
<div class="line"><a name="l00456"></a><span class="lineno"><a class="line" href="classvde_1_1sdf_1_1GradientDescent.html#a733ab9edb64d4013c59d48940eef202a"> 456</a></span>  [[nodiscard]] <span class="keywordtype">double</span> <a class="code" href="classvde_1_1sdf_1_1GradientDescent.html#a733ab9edb64d4013c59d48940eef202a">learning_rate</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> lr_; }</div>
|
||
|
|
<div class="line"><a name="l00457"></a><span class="lineno"> 457</span>  </div>
|
||
|
|
<div class="line"><a name="l00459"></a><span class="lineno"><a class="line" href="classvde_1_1sdf_1_1GradientDescent.html#a1691b2a9296d4c0e2dc6a86c57d5620e"> 459</a></span>  [[nodiscard]] <span class="keywordtype">int</span> <a class="code" href="classvde_1_1sdf_1_1GradientDescent.html#a1691b2a9296d4c0e2dc6a86c57d5620e">iteration</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> iteration_; }</div>
|
||
|
|
<div class="line"><a name="l00460"></a><span class="lineno"> 460</span>  </div>
|
||
|
|
<div class="line"><a name="l00461"></a><span class="lineno"> 461</span> <span class="keyword">private</span>:</div>
|
||
|
|
<div class="line"><a name="l00462"></a><span class="lineno"> 462</span>  <span class="keywordtype">double</span> lr_;</div>
|
||
|
|
<div class="line"><a name="l00463"></a><span class="lineno"> 463</span>  <span class="keywordtype">int</span> iteration_ = 0;</div>
|
||
|
|
<div class="line"><a name="l00464"></a><span class="lineno"> 464</span> };</div>
|
||
|
|
<div class="line"><a name="l00465"></a><span class="lineno"> 465</span>  </div>
|
||
|
|
<div class="line"><a name="l00466"></a><span class="lineno"> 466</span> } <span class="comment">// namespace vde::sdf</span></div>
|
||
|
|
<div class="ttc" id="aclassvde_1_1sdf_1_1GradientDescent_html"><div class="ttname"><a href="classvde_1_1sdf_1_1GradientDescent.html">vde::sdf::GradientDescent</a></div><div class="ttdoc">固定学习率的简单梯度下降优化器</div><div class="ttdef"><b>Definition:</b> <a href="sdf__optimize_8h_source.html#l00428">sdf_optimize.h:428</a></div></div>
|
||
|
|
<div class="ttc" id="aclassvde_1_1sdf_1_1GradientDescent_html_a1691b2a9296d4c0e2dc6a86c57d5620e"><div class="ttname"><a href="classvde_1_1sdf_1_1GradientDescent.html#a1691b2a9296d4c0e2dc6a86c57d5620e">vde::sdf::GradientDescent::iteration</a></div><div class="ttdeci">int iteration() const</div><div class="ttdoc">获取当前迭代次数</div><div class="ttdef"><b>Definition:</b> <a href="sdf__optimize_8h_source.html#l00459">sdf_optimize.h:459</a></div></div>
|
||
|
|
<div class="ttc" id="aclassvde_1_1sdf_1_1GradientDescent_html_a3278d73a572d2439849e704278fe288e"><div class="ttname"><a href="classvde_1_1sdf_1_1GradientDescent.html#a3278d73a572d2439849e704278fe288e">vde::sdf::GradientDescent::GradientDescent</a></div><div class="ttdeci">GradientDescent(double lr)</div><div class="ttdoc">构造优化器</div><div class="ttdef"><b>Definition:</b> <a href="sdf__optimize_8h_source.html#l00434">sdf_optimize.h:434</a></div></div>
|
||
|
|
<div class="ttc" id="aclassvde_1_1sdf_1_1GradientDescent_html_a60a9114d4dc5df50682390ab1747615d"><div class="ttname"><a href="classvde_1_1sdf_1_1GradientDescent.html#a60a9114d4dc5df50682390ab1747615d">vde::sdf::GradientDescent::set_learning_rate</a></div><div class="ttdeci">void set_learning_rate(double lr)</div><div class="ttdoc">设置学习率</div><div class="ttdef"><b>Definition:</b> <a href="sdf__optimize_8h_source.html#l00453">sdf_optimize.h:453</a></div></div>
|
||
|
|
<div class="ttc" id="aclassvde_1_1sdf_1_1GradientDescent_html_a733ab9edb64d4013c59d48940eef202a"><div class="ttname"><a href="classvde_1_1sdf_1_1GradientDescent.html#a733ab9edb64d4013c59d48940eef202a">vde::sdf::GradientDescent::learning_rate</a></div><div class="ttdeci">double learning_rate() const</div><div class="ttdoc">获取学习率</div><div class="ttdef"><b>Definition:</b> <a href="sdf__optimize_8h_source.html#l00456">sdf_optimize.h:456</a></div></div>
|
||
|
|
<div class="ttc" id="aclassvde_1_1sdf_1_1GradientDescent_html_ad2b8fd13bd3621248f58b96ad203cf20"><div class="ttname"><a href="classvde_1_1sdf_1_1GradientDescent.html#ad2b8fd13bd3621248f58b96ad203cf20">vde::sdf::GradientDescent::step</a></div><div class="ttdeci">double step(std::vector< double > &params, const std::function< double(const std::vector< double > &, std::vector< double > &)> &grad_fn)</div><div class="ttdoc">执行单步梯度下降</div></div>
|
||
|
|
<div class="ttc" id="anamespacevde_1_1core_html_ab763c018d19e10e91a6c6d6ab2ccc8e0"><div class="ttname"><a href="namespacevde_1_1core.html#ab763c018d19e10e91a6c6d6ab2ccc8e0">vde::core::Vector3D</a></div><div class="ttdeci">foundation::Vector3D Vector3D</div><div class="ttdoc">双精度三维向量(重新导出)</div><div class="ttdef"><b>Definition:</b> <a href="point_8h_source.html#l00049">point.h:49</a></div></div>
|
||
|
|
<div class="ttc" id="anamespacevde_1_1core_html_ac6aed70c4b90d13f10217267cd7a1952"><div class="ttname"><a href="namespacevde_1_1core.html#ac6aed70c4b90d13f10217267cd7a1952">vde::core::Point3D</a></div><div class="ttdeci">foundation::Point3D Point3D</div><div class="ttdoc">双精度三维点(重新导出)</div><div class="ttdef"><b>Definition:</b> <a href="point_8h_source.html#l00031">point.h:31</a></div></div>
|
||
|
|
<div class="ttc" id="anamespacevde_1_1sdf_html"><div class="ttname"><a href="namespacevde_1_1sdf.html">vde::sdf</a></div><div class="ttdef"><b>Definition:</b> <a href="sdf__gradient_8h_source.html#l00032">sdf_gradient.h:32</a></div></div>
|
||
|
|
<div class="ttc" id="anamespacevde_1_1sdf_html_a03924b38a765ff02af4d2f7f97fa414b"><div class="ttname"><a href="namespacevde_1_1sdf.html#a03924b38a765ff02af4d2f7f97fa414b">vde::sdf::find_symmetry_plane</a></div><div class="ttdeci">SymmetryResult find_symmetry_plane(const SdfNodePtr &shape, const Point3D &bmin, const Point3D &bmax, int samples=1000)</div><div class="ttdoc">自动找到形状的最佳反射对称平面</div></div>
|
||
|
|
<div class="ttc" id="anamespacevde_1_1sdf_html_a145b3e2651a90dd1ddc4c5f8d2f3befd"><div class="ttname"><a href="namespacevde_1_1sdf.html#a145b3e2651a90dd1ddc4c5f8d2f3befd">vde::sdf::find_accessible_point</a></div><div class="ttdeci">Point3D find_accessible_point(const SdfNodePtr &shape, const Vector3D &approach_dir, const Point3D &bmin, const Point3D &bmax, int grid_res=32)</div><div class="ttdoc">找到给定接近方向下具有最大可及性的表面点</div></div>
|
||
|
|
<div class="ttc" id="anamespacevde_1_1sdf_html_a2008f513c59b2b1d55cf7dd6ca7d5bcc"><div class="ttname"><a href="namespacevde_1_1sdf.html#a2008f513c59b2b1d55cf7dd6ca7d5bcc">vde::sdf::accessibility</a></div><div class="ttdeci">double accessibility(const SdfNodePtr &shape, const Point3D &p, const Vector3D &direction, int hemisphere_samples=64)</div><div class="ttdoc">计算形状表面上点的可及性分数</div></div>
|
||
|
|
<div class="ttc" id="anamespacevde_1_1sdf_html_a268271fb51fd0a95c5b0611394397a9d"><div class="ttname"><a href="namespacevde_1_1sdf.html#a268271fb51fd0a95c5b0611394397a9d">vde::sdf::fit_surface_to_points</a></div><div class="ttdeci">OptimizeResult fit_surface_to_points(const SdfNodePtr &initial, const std::vector< Point3D > &surface_points, double learning_rate=0.01, int max_iterations=100)</div><div class="ttdoc">将形状表面移动到目标采样点</div></div>
|
||
|
|
<div class="ttc" id="anamespacevde_1_1sdf_html_a2f05df8be69025eaa31529072fd47a6d"><div class="ttname"><a href="namespacevde_1_1sdf.html#a2f05df8be69025eaa31529072fd47a6d">vde::sdf::center_of_mass</a></div><div class="ttdeci">Point3D center_of_mass(const SdfNodePtr &shape, const Point3D &bmin, const Point3D &bmax, int samples=10000)</div><div class="ttdoc">通过蒙地卡罗法估算形状的质心</div></div>
|
||
|
|
<div class="ttc" id="anamespacevde_1_1sdf_html_a3ff132fb69c033909652b3078f81ad1a"><div class="ttname"><a href="namespacevde_1_1sdf.html#a3ff132fb69c033909652b3078f81ad1a">vde::sdf::LossFn</a></div><div class="ttdeci">std::function< double(const std::function< double(const Point3D &)> &)> LossFn</div><div class="ttdoc">损失函数类型</div><div class="ttdef"><b>Definition:</b> <a href="sdf__optimize_8h_source.html#l00065">sdf_optimize.h:65</a></div></div>
|
||
|
|
<div class="ttc" id="anamespacevde_1_1sdf_html_a437e4e366b2cc67090426ce6b6158be6"><div class="ttname"><a href="namespacevde_1_1sdf.html#a437e4e366b2cc67090426ce6b6158be6">vde::sdf::fit_to_point_cloud</a></div><div class="ttdeci">OptimizeResult fit_to_point_cloud(const SdfNodePtr &initial, const std::vector< Point3D > &target_points, double learning_rate=0.01, int max_iterations=100)</div><div class="ttdoc">将参数化形状拟合到目标点云</div></div>
|
||
|
|
<div class="ttc" id="anamespacevde_1_1sdf_html_a5cf5230813be28ae6862f124adf3e438"><div class="ttname"><a href="namespacevde_1_1sdf.html#a5cf5230813be28ae6862f124adf3e438">vde::sdf::fit_to_sdf</a></div><div class="ttdeci">OptimizeResult fit_to_sdf(const SdfNodePtr &source, const std::function< double(const Point3D &)> &target_sdf, const Point3D &bmin, const Point3D &bmax, int grid_resolution=16, double learning_rate=0.01, int max_iterations=100)</div><div class="ttdoc">拟合一个 SDF 形状以匹配另一个目标 SDF</div></div>
|
||
|
|
<div class="ttc" id="anamespacevde_1_1sdf_html_a694dea06d4bbecf6063203f554d9fe05"><div class="ttname"><a href="namespacevde_1_1sdf.html#a694dea06d4bbecf6063203f554d9fe05">vde::sdf::resolve_collision</a></div><div class="ttdeci">bool resolve_collision(SdfNodePtr &shape_a, SdfNodePtr &shape_b, double step_size=0.1, int max_iterations=50)</div><div class="ttdoc">通过平移解决两个形状之间的穿透</div></div>
|
||
|
|
<div class="ttc" id="anamespacevde_1_1sdf_html_a6e1454146ae724f12fac47f7026048f7"><div class="ttname"><a href="namespacevde_1_1sdf.html#a6e1454146ae724f12fac47f7026048f7">vde::sdf::symmetry_score</a></div><div class="ttdeci">double symmetry_score(const SdfNodePtr &shape, const Point3D &bmin, const Point3D &bmax, const Vector3D &plane_normal, double plane_offset=0.0, int samples=1000)</div><div class="ttdoc">检测形状在给定方向上的反射对称性</div></div>
|
||
|
|
<div class="ttc" id="anamespacevde_1_1sdf_html_a859ced3d37ab1c3b26dba3400fbb2dfc"><div class="ttname"><a href="namespacevde_1_1sdf.html#a859ced3d37ab1c3b26dba3400fbb2dfc">vde::sdf::penetration_depth</a></div><div class="ttdeci">double penetration_depth(const SdfNodePtr &shape_a, const SdfNodePtr &shape_b, const Point3D &bmin, const Point3D &bmax, int samples=1000)</div><div class="ttdoc">估算两个形状之间的最小穿透距离</div></div>
|
||
|
|
<div class="ttc" id="anamespacevde_1_1sdf_html_a8fdcf277d6327c0b1413373ae82f9d5d"><div class="ttname"><a href="namespacevde_1_1sdf.html#a8fdcf277d6327c0b1413373ae82f9d5d">vde::sdf::SdfNodePtr</a></div><div class="ttdeci">std::shared_ptr< SdfNode > SdfNodePtr</div><div class="ttdef"><b>Definition:</b> <a href="sdf__tree_8h_source.html#l00048">sdf_tree.h:48</a></div></div>
|
||
|
|
<div class="ttc" id="anamespacevde_1_1sdf_html_aa2c04cbe9e7cdd1252128f51af322a33"><div class="ttname"><a href="namespacevde_1_1sdf.html#aa2c04cbe9e7cdd1252128f51af322a33">vde::sdf::estimate_volume</a></div><div class="ttdeci">double estimate_volume(const SdfNodePtr &shape, const Point3D &bmin, const Point3D &bmax, int samples=10000)</div><div class="ttdoc">通过蒙地卡罗法估算隐式形状的体积</div></div>
|
||
|
|
<div class="ttc" id="anamespacevde_1_1sdf_html_ad6473a81281335b9b3aff1f1f145c448"><div class="ttname"><a href="namespacevde_1_1sdf.html#ad6473a81281335b9b3aff1f1f145c448">vde::sdf::collect_params</a></div><div class="ttdeci">std::vector< ParamRef > collect_params(SdfNodePtr &root)</div><div class="ttdoc">从叶节点收集所有可变数值参数</div></div>
|
||
|
|
<div class="ttc" id="anamespacevde_1_1sdf_html_afdc3f3bcc8bf4b4884210afadb494c72"><div class="ttname"><a href="namespacevde_1_1sdf.html#afdc3f3bcc8bf4b4884210afadb494c72">vde::sdf::numerical_gradient</a></div><div class="ttdeci">std::vector< double > numerical_gradient(const std::vector< ParamRef > &params, const std::function< double()> &loss_fn, double eps=1e-6)</div><div class="ttdoc">计算标量损失对收集到的参数的数值梯度</div></div>
|
||
|
|
<div class="ttc" id="apoint_8h_html"><div class="ttname"><a href="point_8h.html">point.h</a></div></div>
|
||
|
|
<div class="ttc" id="asdf__tree_8h_html"><div class="ttname"><a href="sdf__tree_8h.html">sdf_tree.h</a></div><div class="ttdoc">SDF 表达式树结构</div></div>
|
||
|
|
<div class="ttc" id="astructvde_1_1sdf_1_1OptimizeResult_html"><div class="ttname"><a href="structvde_1_1sdf_1_1OptimizeResult.html">vde::sdf::OptimizeResult</a></div><div class="ttdoc">优化结果</div><div class="ttdef"><b>Definition:</b> <a href="sdf__optimize_8h_source.html#l00050">sdf_optimize.h:50</a></div></div>
|
||
|
|
<div class="ttc" id="astructvde_1_1sdf_1_1OptimizeResult_html_a164285a2d84d09ab13e7e7f969956b80"><div class="ttname"><a href="structvde_1_1sdf_1_1OptimizeResult.html#a164285a2d84d09ab13e7e7f969956b80">vde::sdf::OptimizeResult::converged</a></div><div class="ttdeci">bool converged</div><div class="ttdoc">是否收敛</div><div class="ttdef"><b>Definition:</b> <a href="sdf__optimize_8h_source.html#l00054">sdf_optimize.h:54</a></div></div>
|
||
|
|
<div class="ttc" id="astructvde_1_1sdf_1_1OptimizeResult_html_a4c5a8ca85fc30a4b9b5bfe945b73d9a1"><div class="ttname"><a href="structvde_1_1sdf_1_1OptimizeResult.html#a4c5a8ca85fc30a4b9b5bfe945b73d9a1">vde::sdf::OptimizeResult::iterations</a></div><div class="ttdeci">int iterations</div><div class="ttdoc">实际迭代次数</div><div class="ttdef"><b>Definition:</b> <a href="sdf__optimize_8h_source.html#l00053">sdf_optimize.h:53</a></div></div>
|
||
|
|
<div class="ttc" id="astructvde_1_1sdf_1_1OptimizeResult_html_aa28eb8fdf31493d2f294e03401085404"><div class="ttname"><a href="structvde_1_1sdf_1_1OptimizeResult.html#aa28eb8fdf31493d2f294e03401085404">vde::sdf::OptimizeResult::optimized_shape</a></div><div class="ttdeci">SdfNodePtr optimized_shape</div><div class="ttdoc">优化后的 SDF 树(参数已更新)</div><div class="ttdef"><b>Definition:</b> <a href="sdf__optimize_8h_source.html#l00051">sdf_optimize.h:51</a></div></div>
|
||
|
|
<div class="ttc" id="astructvde_1_1sdf_1_1OptimizeResult_html_ad763278c553a7c69487340598f9bae0b"><div class="ttname"><a href="structvde_1_1sdf_1_1OptimizeResult.html#ad763278c553a7c69487340598f9bae0b">vde::sdf::OptimizeResult::loss_history</a></div><div class="ttdeci">std::vector< double > loss_history</div><div class="ttdoc">每次迭代的损失记录</div><div class="ttdef"><b>Definition:</b> <a href="sdf__optimize_8h_source.html#l00055">sdf_optimize.h:55</a></div></div>
|
||
|
|
<div class="ttc" id="astructvde_1_1sdf_1_1OptimizeResult_html_afa8ff8ccb303c25d39942692b5dc074f"><div class="ttname"><a href="structvde_1_1sdf_1_1OptimizeResult.html#afa8ff8ccb303c25d39942692b5dc074f">vde::sdf::OptimizeResult::final_loss</a></div><div class="ttdeci">double final_loss</div><div class="ttdoc">最终损失值</div><div class="ttdef"><b>Definition:</b> <a href="sdf__optimize_8h_source.html#l00052">sdf_optimize.h:52</a></div></div>
|
||
|
|
<div class="ttc" id="astructvde_1_1sdf_1_1ParamRef_html"><div class="ttname"><a href="structvde_1_1sdf_1_1ParamRef.html">vde::sdf::ParamRef</a></div><div class="ttdoc">SDF 树中可变参数的引用</div><div class="ttdef"><b>Definition:</b> <a href="sdf__optimize_8h_source.html#l00354">sdf_optimize.h:354</a></div></div>
|
||
|
|
<div class="ttc" id="astructvde_1_1sdf_1_1ParamRef_html_a0cbedc43e468666e27a8990f39f386d0"><div class="ttname"><a href="structvde_1_1sdf_1_1ParamRef.html#a0cbedc43e468666e27a8990f39f386d0">vde::sdf::ParamRef::name</a></div><div class="ttdeci">std::string name</div><div class="ttdoc">参数名称(调试用)</div><div class="ttdef"><b>Definition:</b> <a href="sdf__optimize_8h_source.html#l00356">sdf_optimize.h:356</a></div></div>
|
||
|
|
<div class="ttc" id="astructvde_1_1sdf_1_1ParamRef_html_ae7bafe6272b37e49dbd27bb7801a17f7"><div class="ttname"><a href="structvde_1_1sdf_1_1ParamRef.html#ae7bafe6272b37e49dbd27bb7801a17f7">vde::sdf::ParamRef::value</a></div><div class="ttdeci">double * value</div><div class="ttdoc">指向参数值的可写指针</div><div class="ttdef"><b>Definition:</b> <a href="sdf__optimize_8h_source.html#l00355">sdf_optimize.h:355</a></div></div>
|
||
|
|
<div class="ttc" id="astructvde_1_1sdf_1_1SymmetryResult_html"><div class="ttname"><a href="structvde_1_1sdf_1_1SymmetryResult.html">vde::sdf::SymmetryResult</a></div><div class="ttdoc">对称检测结果</div><div class="ttdef"><b>Definition:</b> <a href="sdf__optimize_8h_source.html#l00275">sdf_optimize.h:275</a></div></div>
|
||
|
|
<div class="ttc" id="astructvde_1_1sdf_1_1SymmetryResult_html_a728d551540721a7aa5c65baeb6d87a8a"><div class="ttname"><a href="structvde_1_1sdf_1_1SymmetryResult.html#a728d551540721a7aa5c65baeb6d87a8a">vde::sdf::SymmetryResult::score</a></div><div class="ttdeci">double score</div><div class="ttdoc">对称性分数 [0, 1]</div><div class="ttdef"><b>Definition:</b> <a href="sdf__optimize_8h_source.html#l00276">sdf_optimize.h:276</a></div></div>
|
||
|
|
<div class="ttc" id="astructvde_1_1sdf_1_1SymmetryResult_html_ac6a7e9e46b44b9de5b2dc52f06da9a75"><div class="ttname"><a href="structvde_1_1sdf_1_1SymmetryResult.html#ac6a7e9e46b44b9de5b2dc52f06da9a75">vde::sdf::SymmetryResult::normal</a></div><div class="ttdeci">Vector3D normal</div><div class="ttdoc">最佳对称平面的法向量</div><div class="ttdef"><b>Definition:</b> <a href="sdf__optimize_8h_source.html#l00277">sdf_optimize.h:277</a></div></div>
|
||
|
|
<div class="ttc" id="astructvde_1_1sdf_1_1SymmetryResult_html_af1175d4979bb192167bd6aa95d69e610"><div class="ttname"><a href="structvde_1_1sdf_1_1SymmetryResult.html#af1175d4979bb192167bd6aa95d69e610">vde::sdf::SymmetryResult::offset</a></div><div class="ttdeci">double offset</div><div class="ttdoc">最佳对称平面的偏移量</div><div class="ttdef"><b>Definition:</b> <a href="sdf__optimize_8h_source.html#l00278">sdf_optimize.h:278</a></div></div>
|
||
|
|
</div><!-- fragment --></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="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li><li class="navelem"><a class="el" href="dir_36dfe8171299c47a6036082559f11ede.html">vde</a></li><li class="navelem"><a class="el" href="dir_865941a50ed007925fcdd14642daadc9.html">sdf</a></li><li class="navelem"><a class="el" href="sdf__optimize_8h.html">sdf_optimize.h</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>
|