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

1693 lines
109 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::mesh)</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('group__mesh.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> &#124;
<a href="#enum-members">枚举</a> &#124;
<a href="#func-members">函数</a> </div>
<div class="headertitle">
<div class="title">网格模块 (vde::mesh)</div> </div>
</div><!--header-->
<div class="contents">
<p>半边网格、Delaunay 2D/3D、简化、平滑、修复、参数化、Marching Cubes
<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">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structvde_1_1mesh_1_1DelaunayResult.html">vde::mesh::DelaunayResult</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">2D Delaunay 三角化结果 <a href="structvde_1_1mesh_1_1DelaunayResult.html#details">更多...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structvde_1_1mesh_1_1TetrahedronMesh.html">vde::mesh::TetrahedronMesh</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">四面体网格结构 <a href="structvde_1_1mesh_1_1TetrahedronMesh.html#details">更多...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structvde_1_1mesh_1_1Halfedge.html">vde::mesh::Halfedge</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">半边数据结构元素 <a href="structvde_1_1mesh_1_1Halfedge.html#details">更多...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structvde_1_1mesh_1_1Face.html">vde::mesh::Face</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">面元素 <a href="structvde_1_1mesh_1_1Face.html#details">更多...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classvde_1_1mesh_1_1HalfedgeMesh.html">vde::mesh::HalfedgeMesh</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">半边数据结构三角网格 <a href="classvde_1_1mesh_1_1HalfedgeMesh.html#details">更多...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structvde_1_1mesh_1_1MCMesh.html">vde::mesh::MCMesh</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Marching Cubes 输出网格 <a href="structvde_1_1mesh_1_1MCMesh.html#details">更多...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structvde_1_1mesh_1_1CurvatureResult.html">vde::mesh::CurvatureResult</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">离散曲率计算结果 <a href="structvde_1_1mesh_1_1CurvatureResult.html#details">更多...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structvde_1_1mesh_1_1MeshQuality.html">vde::mesh::MeshQuality</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">三角网格质量指标 <a href="structvde_1_1mesh_1_1MeshQuality.html#details">更多...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structvde_1_1mesh_1_1TetQuality.html">vde::mesh::TetQuality</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">四面体网格质量指标 <a href="structvde_1_1mesh_1_1TetQuality.html#details">更多...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structvde_1_1mesh_1_1ElemQuality.html">vde::mesh::ElemQuality</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">通用单元质量指标 <a href="structvde_1_1mesh_1_1ElemQuality.html#details">更多...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structvde_1_1mesh_1_1QualityReport.html">vde::mesh::QualityReport</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">详细质量报告 <a href="structvde_1_1mesh_1_1QualityReport.html#details">更多...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structvde_1_1mesh_1_1RepairOptions.html">vde::mesh::RepairOptions</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">网格修复选项 <a href="structvde_1_1mesh_1_1RepairOptions.html#details">更多...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structvde_1_1mesh_1_1SimplifyOptions.html">vde::mesh::SimplifyOptions</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">网格简化选项 <a href="structvde_1_1mesh_1_1SimplifyOptions.html#details">更多...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structvde_1_1mesh_1_1SmoothOptions.html">vde::mesh::SmoothOptions</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">网格光顺参数 <a href="structvde_1_1mesh_1_1SmoothOptions.html#details">更多...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
枚举</h2></td></tr>
<tr class="memitem:gad8808432c406c456c97e1aed624bf2a7"><td class="memItemLeft" align="right" valign="top">enum class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__mesh.html#gad8808432c406c456c97e1aed624bf2a7">vde::mesh::BooleanOp</a> { <a class="el" href="group__mesh.html#ggad8808432c406c456c97e1aed624bf2a7aaef12e903e606a4895a16b393bfdec8c">vde::mesh::Union</a>
, <a class="el" href="group__mesh.html#ggad8808432c406c456c97e1aed624bf2a7aa06d31c2ee920b4d53e8c9c06d90ba24">vde::mesh::Intersection</a>
, <a class="el" href="group__mesh.html#ggad8808432c406c456c97e1aed624bf2a7a28ed2ac6c29f64a3692c956004b8ff7a">vde::mesh::Difference</a>
, <a class="el" href="group__mesh.html#ggad8808432c406c456c97e1aed624bf2a7ab3fff9b7882b88e6b08b2b3090df9de1">vde::mesh::SymDiff</a>
}</td></tr>
<tr class="memdesc:gad8808432c406c456c97e1aed624bf2a7"><td class="mdescLeft">&#160;</td><td class="mdescRight">布尔运算类型(CSG 组合) <a href="group__mesh.html#gad8808432c406c456c97e1aed624bf2a7">更多...</a><br /></td></tr>
<tr class="separator:gad8808432c406c456c97e1aed624bf2a7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gab584f2ea8e883f4c53ad72d8b1f4059c"><td class="memItemLeft" align="right" valign="top">enum class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__mesh.html#gab584f2ea8e883f4c53ad72d8b1f4059c">vde::mesh::ElementType</a> { <a class="el" href="group__mesh.html#ggab584f2ea8e883f4c53ad72d8b1f4059cab8c4c2cd6e0f11e2fbb894caeaeccef3">vde::mesh::Tri</a>
, <a class="el" href="group__mesh.html#ggab584f2ea8e883f4c53ad72d8b1f4059cae9017664588010860a92ceb5f8fcb824">vde::mesh::Quad</a>
, <a class="el" href="group__mesh.html#ggab584f2ea8e883f4c53ad72d8b1f4059ca36a04c4c21d4024e5a8cb138fc249d78">vde::mesh::Tet</a>
, <a class="el" href="group__mesh.html#ggab584f2ea8e883f4c53ad72d8b1f4059ca92640bd72988395b326c888614f8937a">vde::mesh::Hex</a>
}</td></tr>
<tr class="memdesc:gab584f2ea8e883f4c53ad72d8b1f4059c"><td class="mdescLeft">&#160;</td><td class="mdescRight">单元类型枚举 <a href="group__mesh.html#gab584f2ea8e883f4c53ad72d8b1f4059c">更多...</a><br /></td></tr>
<tr class="separator:gab584f2ea8e883f4c53ad72d8b1f4059c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gab6b25a36fe98ad9dc1a6fc3889565c35"><td class="memItemLeft" align="right" valign="top">enum class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__mesh.html#gab6b25a36fe98ad9dc1a6fc3889565c35">vde::mesh::SmoothMethod</a> { <a class="el" href="group__mesh.html#ggab6b25a36fe98ad9dc1a6fc3889565c35a799723f39baf497704a3d39e7c03555f">vde::mesh::Laplacian</a>
, <a class="el" href="group__mesh.html#ggab6b25a36fe98ad9dc1a6fc3889565c35a83d3b0844a534014ccbc6102e01193f3">vde::mesh::Taubin</a>
, <a class="el" href="group__mesh.html#ggab6b25a36fe98ad9dc1a6fc3889565c35a4858637dbc3d21ddae3614fc7affff4f">vde::mesh::HCLaplacian</a>
, <a class="el" href="group__mesh.html#ggab6b25a36fe98ad9dc1a6fc3889565c35ae62ecfbae0c6e1d3cb64be0e1e30a46a">vde::mesh::Bilateral</a>
}</td></tr>
<tr class="memdesc:gab6b25a36fe98ad9dc1a6fc3889565c35"><td class="mdescLeft">&#160;</td><td class="mdescRight">网格光顺方法 <a href="group__mesh.html#gab6b25a36fe98ad9dc1a6fc3889565c35">更多...</a><br /></td></tr>
<tr class="separator:gab6b25a36fe98ad9dc1a6fc3889565c35"><td class="memSeparator" colspan="2">&#160;</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:gafc6a6011d521ce49fc08d5eb0371f53b"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structvde_1_1mesh_1_1TetrahedronMesh.html">TetrahedronMesh</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__mesh.html#gafc6a6011d521ce49fc08d5eb0371f53b">vde::mesh::alpha_shapes</a> (const std::vector&lt; Point3D &gt; &amp;points, double alpha)</td></tr>
<tr class="memdesc:gafc6a6011d521ce49fc08d5eb0371f53b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Alpha Shapes 点云表面重建 <a href="group__mesh.html#gafc6a6011d521ce49fc08d5eb0371f53b">更多...</a><br /></td></tr>
<tr class="separator:gafc6a6011d521ce49fc08d5eb0371f53b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga9cb135f377987dd30cd33b44d728d3cb"><td class="memItemLeft" align="right" valign="top">std::pair&lt; std::vector&lt; Point3D &gt;, std::vector&lt; std::array&lt; int, 3 &gt; &gt; &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__mesh.html#ga9cb135f377987dd30cd33b44d728d3cb">vde::mesh::alpha_shapes_surface</a> (const <a class="el" href="structvde_1_1mesh_1_1TetrahedronMesh.html">TetrahedronMesh</a> &amp;tet_mesh)</td></tr>
<tr class="memdesc:ga9cb135f377987dd30cd33b44d728d3cb"><td class="mdescLeft">&#160;</td><td class="mdescRight">将 Alpha Shapes 四面体网格的表面提取为三角形网格 <a href="group__mesh.html#ga9cb135f377987dd30cd33b44d728d3cb">更多...</a><br /></td></tr>
<tr class="separator:ga9cb135f377987dd30cd33b44d728d3cb"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga589b3c23a527e157e19bfa7d3091010e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structvde_1_1mesh_1_1DelaunayResult.html">DelaunayResult</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__mesh.html#ga589b3c23a527e157e19bfa7d3091010e">vde::mesh::constrained_delaunay_2d</a> (const std::vector&lt; Point2D &gt; &amp;points, const std::vector&lt; std::pair&lt; int, int &gt;&gt; &amp;constraints)</td></tr>
<tr class="memdesc:ga589b3c23a527e157e19bfa7d3091010e"><td class="mdescLeft">&#160;</td><td class="mdescRight">约束 Delaunay 三角化(CDT <a href="group__mesh.html#ga589b3c23a527e157e19bfa7d3091010e">更多...</a><br /></td></tr>
<tr class="separator:ga589b3c23a527e157e19bfa7d3091010e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaefe8814fce53875c65a8fb9308944cd1"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structvde_1_1mesh_1_1DelaunayResult.html">DelaunayResult</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__mesh.html#gaefe8814fce53875c65a8fb9308944cd1">vde::mesh::delaunay_2d</a> (const std::vector&lt; Point2D &gt; &amp;points)</td></tr>
<tr class="memdesc:gaefe8814fce53875c65a8fb9308944cd1"><td class="mdescLeft">&#160;</td><td class="mdescRight">2D Delaunay 三角化(Bowyer-Watson 增量算法) <a href="group__mesh.html#gaefe8814fce53875c65a8fb9308944cd1">更多...</a><br /></td></tr>
<tr class="separator:gaefe8814fce53875c65a8fb9308944cd1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gafebfe12ff8349da1c1cc7c8f7245375a"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structvde_1_1mesh_1_1TetrahedronMesh.html">TetrahedronMesh</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__mesh.html#gafebfe12ff8349da1c1cc7c8f7245375a">vde::mesh::delaunay_3d</a> (const std::vector&lt; Point3D &gt; &amp;points)</td></tr>
<tr class="memdesc:gafebfe12ff8349da1c1cc7c8f7245375a"><td class="mdescLeft">&#160;</td><td class="mdescRight">3D Delaunay 四面体化(Bowyer-Watson 增量算法) <a href="group__mesh.html#gafebfe12ff8349da1c1cc7c8f7245375a">更多...</a><br /></td></tr>
<tr class="separator:gafebfe12ff8349da1c1cc7c8f7245375a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga3b72be8e64cc183adecc16722c62cad8"><td class="memItemLeft" align="right" valign="top">std::vector&lt; double &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__mesh.html#ga3b72be8e64cc183adecc16722c62cad8">vde::mesh::geodesic_distance</a> (const <a class="el" href="classvde_1_1mesh_1_1HalfedgeMesh.html">HalfedgeMesh</a> &amp;mesh, const std::vector&lt; int &gt; &amp;sources, double t=-1.0)</td></tr>
<tr class="memdesc:ga3b72be8e64cc183adecc16722c62cad8"><td class="mdescLeft">&#160;</td><td class="mdescRight">热方法(Heat Method)计算测地距离 <a href="group__mesh.html#ga3b72be8e64cc183adecc16722c62cad8">更多...</a><br /></td></tr>
<tr class="separator:ga3b72be8e64cc183adecc16722c62cad8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga1dfc79e7134920b11f72724170e1ac2a"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structvde_1_1mesh_1_1MCMesh.html">MCMesh</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__mesh.html#ga1dfc79e7134920b11f72724170e1ac2a">vde::mesh::marching_cubes</a> (const std::function&lt; double(double, double, double)&gt; &amp;f, double iso_level, const Point3D &amp;bmin, const Point3D &amp;bmax, int resolution)</td></tr>
<tr class="memdesc:ga1dfc79e7134920b11f72724170e1ac2a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Marching Cubes 等值面提取 <a href="group__mesh.html#ga1dfc79e7134920b11f72724170e1ac2a">更多...</a><br /></td></tr>
<tr class="separator:ga1dfc79e7134920b11f72724170e1ac2a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaf8519dd35d3adfc02e5cb5556c9bf93a"><td class="memItemLeft" align="right" valign="top">double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__mesh.html#gaf8519dd35d3adfc02e5cb5556c9bf93a">vde::mesh::sdf_sphere</a> (double x, double y, double z, double cx, double cy, double cz, double r)</td></tr>
<tr class="memdesc:gaf8519dd35d3adfc02e5cb5556c9bf93a"><td class="mdescLeft">&#160;</td><td class="mdescRight">SDF 球体函数 <a href="group__mesh.html#gaf8519dd35d3adfc02e5cb5556c9bf93a">更多...</a><br /></td></tr>
<tr class="separator:gaf8519dd35d3adfc02e5cb5556c9bf93a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gac7ff5123d0343063449838aeff11e703"><td class="memItemLeft" align="right" valign="top">double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__mesh.html#gac7ff5123d0343063449838aeff11e703">vde::mesh::sdf_box</a> (double x, double y, double z, double hx, double hy, double hz)</td></tr>
<tr class="memdesc:gac7ff5123d0343063449838aeff11e703"><td class="mdescLeft">&#160;</td><td class="mdescRight">SDF 立方体函数(轴对齐,中心在原点) <a href="group__mesh.html#gac7ff5123d0343063449838aeff11e703">更多...</a><br /></td></tr>
<tr class="separator:gac7ff5123d0343063449838aeff11e703"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga962fd7d9b943b8502fde8e59062df761"><td class="memItemLeft" align="right" valign="top">double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__mesh.html#ga962fd7d9b943b8502fde8e59062df761">vde::mesh::sdf_smooth_subtraction</a> (double d1, double d2, double k)</td></tr>
<tr class="memdesc:ga962fd7d9b943b8502fde8e59062df761"><td class="mdescLeft">&#160;</td><td class="mdescRight">SDF 平滑差集(Smooth Subtraction <a href="group__mesh.html#ga962fd7d9b943b8502fde8e59062df761">更多...</a><br /></td></tr>
<tr class="separator:ga962fd7d9b943b8502fde8e59062df761"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga0c168a5ae3ebc4179829932e0a9fc3c3"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classvde_1_1mesh_1_1HalfedgeMesh.html">HalfedgeMesh</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__mesh.html#ga0c168a5ae3ebc4179829932e0a9fc3c3">vde::mesh::mesh_boolean</a> (const <a class="el" href="classvde_1_1mesh_1_1HalfedgeMesh.html">HalfedgeMesh</a> &amp;a, const <a class="el" href="classvde_1_1mesh_1_1HalfedgeMesh.html">HalfedgeMesh</a> &amp;b, <a class="el" href="group__mesh.html#gad8808432c406c456c97e1aed624bf2a7">BooleanOp</a> op)</td></tr>
<tr class="memdesc:ga0c168a5ae3ebc4179829932e0a9fc3c3"><td class="mdescLeft">&#160;</td><td class="mdescRight">三角网格布尔运算 <a href="group__mesh.html#ga0c168a5ae3ebc4179829932e0a9fc3c3">更多...</a><br /></td></tr>
<tr class="separator:ga0c168a5ae3ebc4179829932e0a9fc3c3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gad85a12c525696c7f01cfa1473dbe547a"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structvde_1_1mesh_1_1CurvatureResult.html">CurvatureResult</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__mesh.html#gad85a12c525696c7f01cfa1473dbe547a">vde::mesh::compute_curvature</a> (const <a class="el" href="classvde_1_1mesh_1_1HalfedgeMesh.html">HalfedgeMesh</a> &amp;mesh)</td></tr>
<tr class="memdesc:gad85a12c525696c7f01cfa1473dbe547a"><td class="mdescLeft">&#160;</td><td class="mdescRight">离散曲率计算(Cotan 公式,Meyer et al. 2003 <a href="group__mesh.html#gad85a12c525696c7f01cfa1473dbe547a">更多...</a><br /></td></tr>
<tr class="separator:gad85a12c525696c7f01cfa1473dbe547a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga9068d8d71f80728567dff91785f01255"><td class="memItemLeft" align="right" valign="top">std::vector&lt; Point2D &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__mesh.html#ga9068d8d71f80728567dff91785f01255">vde::mesh::tutte_parameterization</a> (const <a class="el" href="classvde_1_1mesh_1_1HalfedgeMesh.html">HalfedgeMesh</a> &amp;mesh)</td></tr>
<tr class="memdesc:ga9068d8d71f80728567dff91785f01255"><td class="mdescLeft">&#160;</td><td class="mdescRight">Tutte 参数化(调和参数化) <a href="group__mesh.html#ga9068d8d71f80728567dff91785f01255">更多...</a><br /></td></tr>
<tr class="separator:ga9068d8d71f80728567dff91785f01255"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga8a58050cdf32fc480b502640c7ff5fa7"><td class="memItemLeft" align="right" valign="top">std::vector&lt; Point2D &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__mesh.html#ga8a58050cdf32fc480b502640c7ff5fa7">vde::mesh::lscm_parameterization</a> (const <a class="el" href="classvde_1_1mesh_1_1HalfedgeMesh.html">HalfedgeMesh</a> &amp;mesh)</td></tr>
<tr class="memdesc:ga8a58050cdf32fc480b502640c7ff5fa7"><td class="mdescLeft">&#160;</td><td class="mdescRight">LSCMLeast Squares Conformal Maps)参数化 <a href="group__mesh.html#ga8a58050cdf32fc480b502640c7ff5fa7">更多...</a><br /></td></tr>
<tr class="separator:ga8a58050cdf32fc480b502640c7ff5fa7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga38aa79a2a2e09c4657531dcc18934e4e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structvde_1_1mesh_1_1MeshQuality.html">MeshQuality</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__mesh.html#ga38aa79a2a2e09c4657531dcc18934e4e">vde::mesh::evaluate_mesh_quality</a> (const <a class="el" href="classvde_1_1mesh_1_1HalfedgeMesh.html">HalfedgeMesh</a> &amp;mesh)</td></tr>
<tr class="memdesc:ga38aa79a2a2e09c4657531dcc18934e4e"><td class="mdescLeft">&#160;</td><td class="mdescRight">评估三角网格质量 <a href="group__mesh.html#ga38aa79a2a2e09c4657531dcc18934e4e">更多...</a><br /></td></tr>
<tr class="separator:ga38aa79a2a2e09c4657531dcc18934e4e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga6b4eec2fa0e1818ae4e0108e892d5f86"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structvde_1_1mesh_1_1TetQuality.html">TetQuality</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__mesh.html#ga6b4eec2fa0e1818ae4e0108e892d5f86">vde::mesh::evaluate_tet_quality</a> (const <a class="el" href="classvde_1_1mesh_1_1HalfedgeMesh.html">HalfedgeMesh</a> &amp;mesh)</td></tr>
<tr class="memdesc:ga6b4eec2fa0e1818ae4e0108e892d5f86"><td class="mdescLeft">&#160;</td><td class="mdescRight">评估三角网格作为四面体边界的质量 <a href="group__mesh.html#ga6b4eec2fa0e1818ae4e0108e892d5f86">更多...</a><br /></td></tr>
<tr class="separator:ga6b4eec2fa0e1818ae4e0108e892d5f86"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gac1cc5a3b53625ea8b233f7dbf9f009c5"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structvde_1_1mesh_1_1ElemQuality.html">ElemQuality</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__mesh.html#gac1cc5a3b53625ea8b233f7dbf9f009c5">vde::mesh::evaluate_element_quality</a> (const <a class="el" href="classvde_1_1mesh_1_1HalfedgeMesh.html">HalfedgeMesh</a> &amp;mesh, <a class="el" href="group__mesh.html#gab584f2ea8e883f4c53ad72d8b1f4059c">ElementType</a> type)</td></tr>
<tr class="memdesc:gac1cc5a3b53625ea8b233f7dbf9f009c5"><td class="mdescLeft">&#160;</td><td class="mdescRight">按单元类型分派的网格质量评估 <a href="group__mesh.html#gac1cc5a3b53625ea8b233f7dbf9f009c5">更多...</a><br /></td></tr>
<tr class="separator:gac1cc5a3b53625ea8b233f7dbf9f009c5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga1b08d4770fb1870f5a50d11981017970"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structvde_1_1mesh_1_1QualityReport.html">QualityReport</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__mesh.html#ga1b08d4770fb1870f5a50d11981017970">vde::mesh::mesh_quality_report</a> (const <a class="el" href="classvde_1_1mesh_1_1HalfedgeMesh.html">HalfedgeMesh</a> &amp;mesh)</td></tr>
<tr class="memdesc:ga1b08d4770fb1870f5a50d11981017970"><td class="mdescLeft">&#160;</td><td class="mdescRight">生成三角网格的完整质量报告 <a href="group__mesh.html#ga1b08d4770fb1870f5a50d11981017970">更多...</a><br /></td></tr>
<tr class="separator:ga1b08d4770fb1870f5a50d11981017970"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga17256fc8a4833aa5702f06c2ffd3b070"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structvde_1_1mesh_1_1QualityReport.html">QualityReport</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__mesh.html#ga17256fc8a4833aa5702f06c2ffd3b070">vde::mesh::mesh_quality_report_tet</a> (const <a class="el" href="classvde_1_1mesh_1_1HalfedgeMesh.html">HalfedgeMesh</a> &amp;mesh)</td></tr>
<tr class="memdesc:ga17256fc8a4833aa5702f06c2ffd3b070"><td class="mdescLeft">&#160;</td><td class="mdescRight">生成四面体网格的完整质量报告 <a href="group__mesh.html#ga17256fc8a4833aa5702f06c2ffd3b070">更多...</a><br /></td></tr>
<tr class="separator:ga17256fc8a4833aa5702f06c2ffd3b070"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gad1d22c2fdf308f1471636a5111053343"><td class="memItemLeft" align="right" valign="top">double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__mesh.html#gad1d22c2fdf308f1471636a5111053343">vde::mesh::tri_scaled_jacobian</a> (const Point3D &amp;a, const Point3D &amp;b, const Point3D &amp;c)</td></tr>
<tr class="memdesc:gad1d22c2fdf308f1471636a5111053343"><td class="mdescLeft">&#160;</td><td class="mdescRight">三角形归一化 Jacobian <a href="group__mesh.html#gad1d22c2fdf308f1471636a5111053343">更多...</a><br /></td></tr>
<tr class="separator:gad1d22c2fdf308f1471636a5111053343"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga757b9f18c66578733038aa4f438ec2a4"><td class="memItemLeft" align="right" valign="top">double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__mesh.html#ga757b9f18c66578733038aa4f438ec2a4">vde::mesh::tet_scaled_jacobian</a> (const Point3D &amp;a, const Point3D &amp;b, const Point3D &amp;c, const Point3D &amp;d)</td></tr>
<tr class="memdesc:ga757b9f18c66578733038aa4f438ec2a4"><td class="mdescLeft">&#160;</td><td class="mdescRight">四面体归一化 Jacobian <a href="group__mesh.html#ga757b9f18c66578733038aa4f438ec2a4">更多...</a><br /></td></tr>
<tr class="separator:ga757b9f18c66578733038aa4f438ec2a4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gac2545d1f554c6ec28ca24627e6824a52"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classvde_1_1mesh_1_1HalfedgeMesh.html">HalfedgeMesh</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__mesh.html#gac2545d1f554c6ec28ca24627e6824a52">vde::mesh::repair_mesh</a> (const <a class="el" href="classvde_1_1mesh_1_1HalfedgeMesh.html">HalfedgeMesh</a> &amp;mesh, const <a class="el" href="structvde_1_1mesh_1_1RepairOptions.html">RepairOptions</a> &amp;opts={})</td></tr>
<tr class="memdesc:gac2545d1f554c6ec28ca24627e6824a52"><td class="mdescLeft">&#160;</td><td class="mdescRight">自动网格修复 <a href="group__mesh.html#gac2545d1f554c6ec28ca24627e6824a52">更多...</a><br /></td></tr>
<tr class="separator:gac2545d1f554c6ec28ca24627e6824a52"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga16cf72e083686ade908d6ea9258bcd26"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classvde_1_1mesh_1_1HalfedgeMesh.html">HalfedgeMesh</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__mesh.html#ga16cf72e083686ade908d6ea9258bcd26">vde::mesh::simplify_mesh</a> (const <a class="el" href="classvde_1_1mesh_1_1HalfedgeMesh.html">HalfedgeMesh</a> &amp;mesh, const <a class="el" href="structvde_1_1mesh_1_1SimplifyOptions.html">SimplifyOptions</a> &amp;opts={})</td></tr>
<tr class="memdesc:ga16cf72e083686ade908d6ea9258bcd26"><td class="mdescLeft">&#160;</td><td class="mdescRight">QEMQuadric Error Metrics)网格简化 <a href="group__mesh.html#ga16cf72e083686ade908d6ea9258bcd26">更多...</a><br /></td></tr>
<tr class="separator:ga16cf72e083686ade908d6ea9258bcd26"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga98a34525afcacc2ee0a2fed755531f87"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classvde_1_1mesh_1_1HalfedgeMesh.html">HalfedgeMesh</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__mesh.html#ga98a34525afcacc2ee0a2fed755531f87">vde::mesh::smooth_mesh</a> (const <a class="el" href="classvde_1_1mesh_1_1HalfedgeMesh.html">HalfedgeMesh</a> &amp;mesh, const <a class="el" href="structvde_1_1mesh_1_1SmoothOptions.html">SmoothOptions</a> &amp;opts={})</td></tr>
<tr class="memdesc:ga98a34525afcacc2ee0a2fed755531f87"><td class="mdescLeft">&#160;</td><td class="mdescRight">网格光顺(通用分发器) <a href="group__mesh.html#ga98a34525afcacc2ee0a2fed755531f87">更多...</a><br /></td></tr>
<tr class="separator:ga98a34525afcacc2ee0a2fed755531f87"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga8b9c1c97c831fc23bf669abd054abeeb"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classvde_1_1mesh_1_1HalfedgeMesh.html">HalfedgeMesh</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__mesh.html#ga8b9c1c97c831fc23bf669abd054abeeb">vde::mesh::smooth_laplacian</a> (const <a class="el" href="classvde_1_1mesh_1_1HalfedgeMesh.html">HalfedgeMesh</a> &amp;mesh, int iterations, double lambda)</td></tr>
<tr class="memdesc:ga8b9c1c97c831fc23bf669abd054abeeb"><td class="mdescLeft">&#160;</td><td class="mdescRight">标准拉普拉斯光顺 <a href="group__mesh.html#ga8b9c1c97c831fc23bf669abd054abeeb">更多...</a><br /></td></tr>
<tr class="separator:ga8b9c1c97c831fc23bf669abd054abeeb"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaf3f70299323208ea800e0ce1fc74d6db"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classvde_1_1mesh_1_1HalfedgeMesh.html">HalfedgeMesh</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__mesh.html#gaf3f70299323208ea800e0ce1fc74d6db">vde::mesh::smooth_taubin</a> (const <a class="el" href="classvde_1_1mesh_1_1HalfedgeMesh.html">HalfedgeMesh</a> &amp;mesh, int iterations, double lambda, double mu)</td></tr>
<tr class="memdesc:gaf3f70299323208ea800e0ce1fc74d6db"><td class="mdescLeft">&#160;</td><td class="mdescRight">Taubin λ|μ 光顺(体积保持) <a href="group__mesh.html#gaf3f70299323208ea800e0ce1fc74d6db">更多...</a><br /></td></tr>
<tr class="separator:gaf3f70299323208ea800e0ce1fc74d6db"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gae5db218bd1a94c461355750e858ff1a7"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classvde_1_1mesh_1_1HalfedgeMesh.html">HalfedgeMesh</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__mesh.html#gae5db218bd1a94c461355750e858ff1a7">vde::mesh::smooth_hc_laplacian</a> (const <a class="el" href="classvde_1_1mesh_1_1HalfedgeMesh.html">HalfedgeMesh</a> &amp;mesh, const <a class="el" href="structvde_1_1mesh_1_1SmoothOptions.html">SmoothOptions</a> &amp;opts={})</td></tr>
<tr class="memdesc:gae5db218bd1a94c461355750e858ff1a7"><td class="mdescLeft">&#160;</td><td class="mdescRight">HC 拉普拉斯光顺(Humphrey's Classes <a href="group__mesh.html#gae5db218bd1a94c461355750e858ff1a7">更多...</a><br /></td></tr>
<tr class="separator:gae5db218bd1a94c461355750e858ff1a7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga74a01dbb67d7fe37fddfd0d62d71e111"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classvde_1_1mesh_1_1HalfedgeMesh.html">HalfedgeMesh</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__mesh.html#ga74a01dbb67d7fe37fddfd0d62d71e111">vde::mesh::smooth_bilateral</a> (const <a class="el" href="classvde_1_1mesh_1_1HalfedgeMesh.html">HalfedgeMesh</a> &amp;mesh, const <a class="el" href="structvde_1_1mesh_1_1SmoothOptions.html">SmoothOptions</a> &amp;opts={})</td></tr>
<tr class="memdesc:ga74a01dbb67d7fe37fddfd0d62d71e111"><td class="mdescLeft">&#160;</td><td class="mdescRight">双边网格滤波 <a href="group__mesh.html#ga74a01dbb67d7fe37fddfd0d62d71e111">更多...</a><br /></td></tr>
<tr class="separator:ga74a01dbb67d7fe37fddfd0d62d71e111"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">详细描述</h2>
<p>半边网格、Delaunay 2D/3D、简化、平滑、修复、参数化、Marching Cubes </p>
<h2 class="groupheader">枚举类型说明</h2>
<a id="gad8808432c406c456c97e1aed624bf2a7"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gad8808432c406c456c97e1aed624bf2a7">&#9670;&nbsp;</a></span>BooleanOp</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">enum <a class="el" href="group__mesh.html#gad8808432c406c456c97e1aed624bf2a7">vde::mesh::BooleanOp</a></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">strong</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>布尔运算类型(CSG 组合) </p>
<table class="fieldtable">
<tr><th colspan="2">枚举值</th></tr><tr><td class="fieldname"><a id="ggad8808432c406c456c97e1aed624bf2a7aaef12e903e606a4895a16b393bfdec8c"></a>Union&#160;</td><td class="fielddoc"><p>A B 并集 </p>
</td></tr>
<tr><td class="fieldname"><a id="ggad8808432c406c456c97e1aed624bf2a7aa06d31c2ee920b4d53e8c9c06d90ba24"></a>Intersection&#160;</td><td class="fielddoc"><p>A ∩ B 交集 </p>
</td></tr>
<tr><td class="fieldname"><a id="ggad8808432c406c456c97e1aed624bf2a7a28ed2ac6c29f64a3692c956004b8ff7a"></a>Difference&#160;</td><td class="fielddoc"><p>A \ B 差集 </p>
</td></tr>
<tr><td class="fieldname"><a id="ggad8808432c406c456c97e1aed624bf2a7ab3fff9b7882b88e6b08b2b3090df9de1"></a>SymDiff&#160;</td><td class="fielddoc"><p>A Δ B 对称差集 </p>
</td></tr>
</table>
<p class="definition">在文件 <a class="el" href="mesh__boolean_8h_source.html">mesh_boolean.h</a><a class="el" href="mesh__boolean_8h_source.html#l00013">13</a> 行定义.</p>
</div>
</div>
<a id="gab584f2ea8e883f4c53ad72d8b1f4059c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gab584f2ea8e883f4c53ad72d8b1f4059c">&#9670;&nbsp;</a></span>ElementType</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">enum <a class="el" href="group__mesh.html#gab584f2ea8e883f4c53ad72d8b1f4059c">vde::mesh::ElementType</a></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">strong</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>单元类型枚举 </p>
<table class="fieldtable">
<tr><th colspan="2">枚举值</th></tr><tr><td class="fieldname"><a id="ggab584f2ea8e883f4c53ad72d8b1f4059cab8c4c2cd6e0f11e2fbb894caeaeccef3"></a>Tri&#160;</td><td class="fielddoc"><p>三角形 </p>
</td></tr>
<tr><td class="fieldname"><a id="ggab584f2ea8e883f4c53ad72d8b1f4059cae9017664588010860a92ceb5f8fcb824"></a>Quad&#160;</td><td class="fielddoc"><p>四边形(Stub </p>
</td></tr>
<tr><td class="fieldname"><a id="ggab584f2ea8e883f4c53ad72d8b1f4059ca36a04c4c21d4024e5a8cb138fc249d78"></a>Tet&#160;</td><td class="fielddoc"><p>四面体 </p>
</td></tr>
<tr><td class="fieldname"><a id="ggab584f2ea8e883f4c53ad72d8b1f4059ca92640bd72988395b326c888614f8937a"></a>Hex&#160;</td><td class="fielddoc"><p>六面体(Stub </p>
</td></tr>
</table>
<p class="definition">在文件 <a class="el" href="mesh__quality_8h_source.html">mesh_quality.h</a><a class="el" href="mesh__quality_8h_source.html#l00092">92</a> 行定义.</p>
</div>
</div>
<a id="gab6b25a36fe98ad9dc1a6fc3889565c35"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gab6b25a36fe98ad9dc1a6fc3889565c35">&#9670;&nbsp;</a></span>SmoothMethod</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">enum <a class="el" href="group__mesh.html#gab6b25a36fe98ad9dc1a6fc3889565c35">vde::mesh::SmoothMethod</a></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">strong</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>网格光顺方法 </p>
<table class="fieldtable">
<tr><th colspan="2">枚举值</th></tr><tr><td class="fieldname"><a id="ggab6b25a36fe98ad9dc1a6fc3889565c35a799723f39baf497704a3d39e7c03555f"></a>Laplacian&#160;</td><td class="fielddoc"><p>标准拉普拉斯光顺:v ← v + λ·L(v),快速但会收缩 </p>
</td></tr>
<tr><td class="fieldname"><a id="ggab6b25a36fe98ad9dc1a6fc3889565c35a83d3b0844a534014ccbc6102e01193f3"></a>Taubin&#160;</td><td class="fielddoc"><p>Taubin λ|μ 光顺:先正后负步交替,体积保持 </p>
</td></tr>
<tr><td class="fieldname"><a id="ggab6b25a36fe98ad9dc1a6fc3889565c35a4858637dbc3d21ddae3614fc7affff4f"></a>HCLaplacian&#160;</td><td class="fielddoc"><p>HC 拉普拉斯(Humphrey's Classes):推拉两步保持形状/体积 </p>
</td></tr>
<tr><td class="fieldname"><a id="ggab6b25a36fe98ad9dc1a6fc3889565c35ae62ecfbae0c6e1d3cb64be0e1e30a46a"></a>Bilateral&#160;</td><td class="fielddoc"><p>双边滤波:法向加权去噪,保持尖锐特征 </p>
</td></tr>
</table>
<p class="definition">在文件 <a class="el" href="mesh__smooth_8h_source.html">mesh_smooth.h</a><a class="el" href="mesh__smooth_8h_source.html#l00013">13</a> 行定义.</p>
</div>
</div>
<h2 class="groupheader">函数说明</h2>
<a id="gafc6a6011d521ce49fc08d5eb0371f53b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gafc6a6011d521ce49fc08d5eb0371f53b">&#9670;&nbsp;</a></span>alpha_shapes()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="structvde_1_1mesh_1_1TetrahedronMesh.html">TetrahedronMesh</a> vde::mesh::alpha_shapes </td>
<td>(</td>
<td class="paramtype">const std::vector&lt; Point3D &gt; &amp;&#160;</td>
<td class="paramname"><em>points</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">double&#160;</td>
<td class="paramname"><em>alpha</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Alpha Shapes 点云表面重建 </p>
<p>从 3D 点云的 Delaunay 四面体化中提取表面,通过参数 α 控制细节级别:</p><ul>
<li>α → ∞:返回凸包(所有边界四面体面都保留)</li>
<li>α → 0:返回所有 Delaunay 面(非常详细,含内部结构)</li>
<li>中间值:剔除外接球半径 &gt; α 的四面体,保留细节适中的表面</li>
</ul>
<p>算法:对每个 Delaunay 四面体,检查其外接球半径。 若半径 ≤ α,四面体保留;否则剔除。最终表面 = 保留四面体与 被剔除四面体(或外部)之间的边界三角形面。</p>
<dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">points</td><td>输入 3D 点云 </td></tr>
<tr><td class="paramname">alpha</td><td>α 半径阈值,通常取平均点间距的 1~3 倍 </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>返回</dt><dd><a class="el" href="structvde_1_1mesh_1_1TetrahedronMesh.html" title="四面体网格结构">TetrahedronMesh</a> 保留的四面体网格</dd></dl>
<div class="fragment"><div class="line"><span class="comment">// 从点云重建表面</span></div>
<div class="line"><span class="keyword">auto</span> tets = <a class="code" href="group__mesh.html#gafc6a6011d521ce49fc08d5eb0371f53b">alpha_shapes</a>(point_cloud, 0.5);</div>
<div class="line"><span class="keyword">auto</span> [verts, tris] = <a class="code" href="group__mesh.html#ga9cb135f377987dd30cd33b44d728d3cb">alpha_shapes_surface</a>(tets);</div>
<div class="ttc" id="agroup__mesh_html_ga9cb135f377987dd30cd33b44d728d3cb"><div class="ttname"><a href="group__mesh.html#ga9cb135f377987dd30cd33b44d728d3cb">vde::mesh::alpha_shapes_surface</a></div><div class="ttdeci">std::pair&lt; std::vector&lt; Point3D &gt;, std::vector&lt; std::array&lt; int, 3 &gt; &gt; &gt; alpha_shapes_surface(const TetrahedronMesh &amp;tet_mesh)</div><div class="ttdoc">将 Alpha Shapes 四面体网格的表面提取为三角形网格</div></div>
<div class="ttc" id="agroup__mesh_html_gafc6a6011d521ce49fc08d5eb0371f53b"><div class="ttname"><a href="group__mesh.html#gafc6a6011d521ce49fc08d5eb0371f53b">vde::mesh::alpha_shapes</a></div><div class="ttdeci">TetrahedronMesh alpha_shapes(const std::vector&lt; Point3D &gt; &amp;points, double alpha)</div><div class="ttdoc">Alpha Shapes 点云表面重建</div></div>
</div><!-- fragment --> <dl class="section see"><dt>参见</dt><dd><a class="el" href="group__mesh.html#ga9cb135f377987dd30cd33b44d728d3cb" title="将 Alpha Shapes 四面体网格的表面提取为三角形网格">alpha_shapes_surface</a> <a class="el" href="group__mesh.html#gafebfe12ff8349da1c1cc7c8f7245375a" title="3D Delaunay 四面体化(Bowyer-Watson 增量算法)">delaunay_3d</a> </dd></dl>
</div>
</div>
<a id="ga9cb135f377987dd30cd33b44d728d3cb"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga9cb135f377987dd30cd33b44d728d3cb">&#9670;&nbsp;</a></span>alpha_shapes_surface()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">std::pair&lt;std::vector&lt;Point3D&gt;, std::vector&lt;std::array&lt;int,3&gt; &gt; &gt; vde::mesh::alpha_shapes_surface </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="structvde_1_1mesh_1_1TetrahedronMesh.html">TetrahedronMesh</a> &amp;&#160;</td>
<td class="paramname"><em>tet_mesh</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>将 Alpha Shapes 四面体网格的表面提取为三角形网格 </p>
<p>遍历四面体网格,提取所有仅出现在一个四面体上的面(边界面), 即为重建的表面三角形。</p>
<dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">tet_mesh</td><td>Alpha Shapes 输出的四面体网格 </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>{顶点数组, 三角形索引数组}</dd></dl>
<dl class="section note"><dt>注解</dt><dd>表面三角形法向指向四面体外部(右手定则) </dd></dl>
<dl class="section see"><dt>参见</dt><dd><a class="el" href="group__mesh.html#gafc6a6011d521ce49fc08d5eb0371f53b" title="Alpha Shapes 点云表面重建">alpha_shapes</a> </dd></dl>
</div>
</div>
<a id="gad85a12c525696c7f01cfa1473dbe547a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gad85a12c525696c7f01cfa1473dbe547a">&#9670;&nbsp;</a></span>compute_curvature()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="structvde_1_1mesh_1_1CurvatureResult.html">CurvatureResult</a> vde::mesh::compute_curvature </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classvde_1_1mesh_1_1HalfedgeMesh.html">HalfedgeMesh</a> &amp;&#160;</td>
<td class="paramname"><em>mesh</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>离散曲率计算(Cotan 公式,Meyer et al. 2003 </p>
<p>对三角网格每个顶点计算离散高斯曲率和平均曲率。</p>
<p>高斯曲率(内点): K(v) = (2π - Σ_j θ_j) / A_v 其中 θ_j 是顶点 v 处面角的总和,A_v 是 Voronoi 面积</p>
<p>平均曲率: H(v) = || Σ_j (cot α_j + cot β_j) · e_j || / (2 · A_v) 其中 α_j,β_j 是与边 e_j 相对的两个角</p>
<p>边界顶点使用角度缺损公式修正。</p>
<dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">mesh</td><td>输入三角网格 </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>返回</dt><dd><a class="el" href="structvde_1_1mesh_1_1CurvatureResult.html" title="离散曲率计算结果">CurvatureResult</a> 每顶点曲率</dd></dl>
<dl class="section note"><dt>注解</dt><dd>要求网格为流形;边界顶点曲率使用近似公式 <div class="fragment"><div class="line"><span class="keyword">auto</span> crv = <a class="code" href="group__mesh.html#gad85a12c525696c7f01cfa1473dbe547a">compute_curvature</a>(mesh);</div>
<div class="line"><span class="keywordtype">double</span> max_curvature = *std::max_element(crv.gaussian.begin(), crv.gaussian.end());</div>
<div class="line"><span class="comment">// 可用于特征检测、网格分割等</span></div>
<div class="ttc" id="agroup__mesh_html_gad85a12c525696c7f01cfa1473dbe547a"><div class="ttname"><a href="group__mesh.html#gad85a12c525696c7f01cfa1473dbe547a">vde::mesh::compute_curvature</a></div><div class="ttdeci">CurvatureResult compute_curvature(const HalfedgeMesh &amp;mesh)</div><div class="ttdoc">离散曲率计算(Cotan 公式,Meyer et al. 2003</div></div>
</div><!-- fragment --> </dd></dl>
</div>
</div>
<a id="ga589b3c23a527e157e19bfa7d3091010e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga589b3c23a527e157e19bfa7d3091010e">&#9670;&nbsp;</a></span>constrained_delaunay_2d()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="structvde_1_1mesh_1_1DelaunayResult.html">DelaunayResult</a> vde::mesh::constrained_delaunay_2d </td>
<td>(</td>
<td class="paramtype">const std::vector&lt; Point2D &gt; &amp;&#160;</td>
<td class="paramname"><em>points</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const std::vector&lt; std::pair&lt; int, int &gt;&gt; &amp;&#160;</td>
<td class="paramname"><em>constraints</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>约束 Delaunay 三角化(CDT </p>
<p>在标准 Delaunay 三角化基础上强制指定的约束边必须出现在三角化中。 通过边翻转(edge flip)反复消除与约束边相交的三角形边,直到所有 约束边都成为三角形边。</p>
<p>约束边在输出三角化中一定存在(作为三角形边),但不保证满足 空圆性质——靠近约束边的三角形可能违反 Delaunay 条件。</p>
<dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">points</td><td>输入 2D 点集 </td></tr>
<tr><td class="paramname">constraints</td><td>约束边列表,每项为 {起点索引, 终点索引} </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>返回</dt><dd><a class="el" href="structvde_1_1mesh_1_1DelaunayResult.html" title="2D Delaunay 三角化结果">DelaunayResult</a> 含约束边的三角化结果</dd></dl>
<dl class="section note"><dt>注解</dt><dd>约束边不能相交(否则行为未定义);自相交约束需先分割交点 <div class="fragment"><div class="line"><span class="comment">// 带孔洞的三角化:约束边标记孔洞边界</span></div>
<div class="line"><span class="keyword">auto</span> result = <a class="code" href="group__mesh.html#ga589b3c23a527e157e19bfa7d3091010e">constrained_delaunay_2d</a>(points,</div>
<div class="line"> {{0,1}, {1,2}, {2,1}, {3,0}});</div>
<div class="ttc" id="agroup__mesh_html_ga589b3c23a527e157e19bfa7d3091010e"><div class="ttname"><a href="group__mesh.html#ga589b3c23a527e157e19bfa7d3091010e">vde::mesh::constrained_delaunay_2d</a></div><div class="ttdeci">DelaunayResult constrained_delaunay_2d(const std::vector&lt; Point2D &gt; &amp;points, const std::vector&lt; std::pair&lt; int, int &gt;&gt; &amp;constraints)</div><div class="ttdoc">约束 Delaunay 三角化(CDT</div></div>
</div><!-- fragment --> </dd></dl>
<dl class="section see"><dt>参见</dt><dd><a class="el" href="group__mesh.html#gaefe8814fce53875c65a8fb9308944cd1" title="2D Delaunay 三角化(Bowyer-Watson 增量算法)">delaunay_2d</a> </dd></dl>
</div>
</div>
<a id="gaefe8814fce53875c65a8fb9308944cd1"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gaefe8814fce53875c65a8fb9308944cd1">&#9670;&nbsp;</a></span>delaunay_2d()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="structvde_1_1mesh_1_1DelaunayResult.html">DelaunayResult</a> vde::mesh::delaunay_2d </td>
<td>(</td>
<td class="paramtype">const std::vector&lt; Point2D &gt; &amp;&#160;</td>
<td class="paramname"><em>points</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>2D Delaunay 三角化(Bowyer-Watson 增量算法) </p>
<p>构建点集的 Delaunay 三角化:任意三角形的外接圆内不含其他点。 该性质使三角化的最小角最大化,避免狭长三角形。</p>
<p>算法流程:</p><ol type="1">
<li>创建包围所有输入点的超级三角形</li>
<li>逐点插入: a. 找出外接圆包含新点的所有三角形("坏三角形") b. 删除坏三角形,形成多边形空洞 c. 将新点与空洞边界各边连接形成新三角形</li>
<li>删除与超级三角形顶点相关的三角形</li>
</ol>
<dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">points</td><td>输入 2D 点集(至少 3 个不共线点) </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>返回</dt><dd><a class="el" href="structvde_1_1mesh_1_1DelaunayResult.html" title="2D Delaunay 三角化结果">DelaunayResult</a> 三角化结果</dd></dl>
<dl class="section note"><dt>注解</dt><dd>时间复杂度:平均 O(n log n),最坏 O(n²) <div class="fragment"><div class="line"><span class="keyword">auto</span> result = <a class="code" href="group__mesh.html#gaefe8814fce53875c65a8fb9308944cd1">delaunay_2d</a>({{0,0}, {1,0}, {0.5, 0.5}, {0,1}, {1,1}});</div>
<div class="line"><span class="comment">// result.triangles 为 Delaunay 三角形索引</span></div>
<div class="ttc" id="agroup__mesh_html_gaefe8814fce53875c65a8fb9308944cd1"><div class="ttname"><a href="group__mesh.html#gaefe8814fce53875c65a8fb9308944cd1">vde::mesh::delaunay_2d</a></div><div class="ttdeci">DelaunayResult delaunay_2d(const std::vector&lt; Point2D &gt; &amp;points)</div><div class="ttdoc">2D Delaunay 三角化(Bowyer-Watson 增量算法)</div></div>
</div><!-- fragment --> </dd></dl>
<dl class="section see"><dt>参见</dt><dd><a class="el" href="group__mesh.html#ga589b3c23a527e157e19bfa7d3091010e" title="约束 Delaunay 三角化(CDT">constrained_delaunay_2d</a> </dd></dl>
</div>
</div>
<a id="gafebfe12ff8349da1c1cc7c8f7245375a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gafebfe12ff8349da1c1cc7c8f7245375a">&#9670;&nbsp;</a></span>delaunay_3d()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="structvde_1_1mesh_1_1TetrahedronMesh.html">TetrahedronMesh</a> vde::mesh::delaunay_3d </td>
<td>(</td>
<td class="paramtype">const std::vector&lt; Point3D &gt; &amp;&#160;</td>
<td class="paramname"><em>points</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>3D Delaunay 四面体化(Bowyer-Watson 增量算法) </p>
<p>将 3D 点集剖分为 Delaunay 四面体网格:任意四面体的外接球内不含其他顶点。 算法是 2D 版本的自然推广:</p><ol type="1">
<li>构建超级四面体包含所有点</li>
<li>逐点插入:删除外接球包含新点的四面体 → 空洞 → 重连</li>
<li>去除超级四面体相关单元</li>
</ol>
<dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">points</td><td>输入 3D 点集(至少 4 个不共面点) </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>返回</dt><dd><a class="el" href="structvde_1_1mesh_1_1TetrahedronMesh.html" title="四面体网格结构">TetrahedronMesh</a> 四面体网格</dd></dl>
<dl class="section note"><dt>注解</dt><dd>时间复杂度与 2D 类似:平均 O(n log n),最坏 O(n²) </dd>
<dd>
输出包括内部和边界四面体;通过 alpha_shapes 可提取表面 <div class="fragment"><div class="line"><span class="keyword">auto</span> tet_mesh = <a class="code" href="group__mesh.html#gafebfe12ff8349da1c1cc7c8f7245375a">delaunay_3d</a>(point_cloud);</div>
<div class="ttc" id="agroup__mesh_html_gafebfe12ff8349da1c1cc7c8f7245375a"><div class="ttname"><a href="group__mesh.html#gafebfe12ff8349da1c1cc7c8f7245375a">vde::mesh::delaunay_3d</a></div><div class="ttdeci">TetrahedronMesh delaunay_3d(const std::vector&lt; Point3D &gt; &amp;points)</div><div class="ttdoc">3D Delaunay 四面体化(Bowyer-Watson 增量算法)</div></div>
</div><!-- fragment --> </dd></dl>
<dl class="section see"><dt>参见</dt><dd><a class="el" href="group__mesh.html#gafc6a6011d521ce49fc08d5eb0371f53b" title="Alpha Shapes 点云表面重建">alpha_shapes</a> </dd></dl>
</div>
</div>
<a id="gac1cc5a3b53625ea8b233f7dbf9f009c5"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gac1cc5a3b53625ea8b233f7dbf9f009c5">&#9670;&nbsp;</a></span>evaluate_element_quality()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="structvde_1_1mesh_1_1ElemQuality.html">ElemQuality</a> vde::mesh::evaluate_element_quality </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classvde_1_1mesh_1_1HalfedgeMesh.html">HalfedgeMesh</a> &amp;&#160;</td>
<td class="paramname"><em>mesh</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__mesh.html#gab584f2ea8e883f4c53ad72d8b1f4059c">ElementType</a>&#160;</td>
<td class="paramname"><em>type</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>按单元类型分派的网格质量评估 </p>
<dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">mesh</td><td>输入网格 </td></tr>
<tr><td class="paramname">type</td><td>单元类型 </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>返回</dt><dd><a class="el" href="structvde_1_1mesh_1_1ElemQuality.html" title="通用单元质量指标">ElemQuality</a> 质量指标</dd></dl>
<dl class="section note"><dt>注解</dt><dd>目前仅 Tri 和 Tet 完整实现;Quad / Hex 返回 stub(全零) </dd></dl>
</div>
</div>
<a id="ga38aa79a2a2e09c4657531dcc18934e4e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga38aa79a2a2e09c4657531dcc18934e4e">&#9670;&nbsp;</a></span>evaluate_mesh_quality()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="structvde_1_1mesh_1_1MeshQuality.html">MeshQuality</a> vde::mesh::evaluate_mesh_quality </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classvde_1_1mesh_1_1HalfedgeMesh.html">HalfedgeMesh</a> &amp;&#160;</td>
<td class="paramname"><em>mesh</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>评估三角网格质量 </p>
<p>对网格中每个三角面计算内角、长宽比,统计全局最值及平均值。 质量好的三角网格应有:</p><ul>
<li>min_angle &gt; 20°(CFD 模拟要求 &gt; 25°)</li>
<li>max_angle &lt; 120°(避免狭长退化)</li>
<li>avg_aspect_ratio 接近 1</li>
</ul>
<dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">mesh</td><td>输入三角网格 </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>返回</dt><dd><a class="el" href="structvde_1_1mesh_1_1MeshQuality.html" title="三角网格质量指标">MeshQuality</a> 质量指标汇总</dd></dl>
<div class="fragment"><div class="line"><span class="keyword">auto</span> q = <a class="code" href="group__mesh.html#ga38aa79a2a2e09c4657531dcc18934e4e">evaluate_mesh_quality</a>(mesh);</div>
<div class="line"><span class="keywordflow">if</span> (q.min_angle_deg &lt; 15.0) {</div>
<div class="line"> <span class="comment">// 需要 remesh 或优化</span></div>
<div class="line">}</div>
<div class="ttc" id="agroup__mesh_html_ga38aa79a2a2e09c4657531dcc18934e4e"><div class="ttname"><a href="group__mesh.html#ga38aa79a2a2e09c4657531dcc18934e4e">vde::mesh::evaluate_mesh_quality</a></div><div class="ttdeci">MeshQuality evaluate_mesh_quality(const HalfedgeMesh &amp;mesh)</div><div class="ttdoc">评估三角网格质量</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="ga6b4eec2fa0e1818ae4e0108e892d5f86"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga6b4eec2fa0e1818ae4e0108e892d5f86">&#9670;&nbsp;</a></span>evaluate_tet_quality()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="structvde_1_1mesh_1_1TetQuality.html">TetQuality</a> vde::mesh::evaluate_tet_quality </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classvde_1_1mesh_1_1HalfedgeMesh.html">HalfedgeMesh</a> &amp;&#160;</td>
<td class="paramname"><em>mesh</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>评估三角网格作为四面体边界的质量 </p>
<p>将每个三角面与其面重心构造虚拟四面体,评估这些四面体的质量。 适用于将封闭三角表面解释为体积边界时的质量检测。</p>
<dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">mesh</td><td>封闭三角网格(volume boundary </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>返回</dt><dd><a class="el" href="structvde_1_1mesh_1_1TetQuality.html" title="四面体网格质量指标">TetQuality</a> 四面体质量指标</dd></dl>
<dl class="section note"><dt>注解</dt><dd>这不是真正的四面体网格质量评估——仅用于表面网格的代理指标 </dd></dl>
</div>
</div>
<a id="ga3b72be8e64cc183adecc16722c62cad8"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga3b72be8e64cc183adecc16722c62cad8">&#9670;&nbsp;</a></span>geodesic_distance()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">std::vector&lt;double&gt; vde::mesh::geodesic_distance </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classvde_1_1mesh_1_1HalfedgeMesh.html">HalfedgeMesh</a> &amp;&#160;</td>
<td class="paramname"><em>mesh</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const std::vector&lt; int &gt; &amp;&#160;</td>
<td class="paramname"><em>sources</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">double&#160;</td>
<td class="paramname"><em>t</em> = <code>-1.0</code>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>热方法(Heat Method)计算测地距离 </p>
<p>基于 Crane et al. 2013 的算法,通过求解三个线性系统高效计算 曲面上任意点到源点集的测地距离(Geodesic Distance)。</p>
<p>算法三步:</p><ol type="1">
<li>热扩散:求解 (I - t·L)·u = u₀,其中 u₀ 在源点为 1 其余为 0</li>
<li>梯度归一化:X = -∇u / |∇u|</li>
<li>泊松重建:L·φ = div(X),得到测地距离 φ</li>
</ol>
<p>相比精确测地线算法(如 MMP),热方法更快(~线性时间)且易于实现, 但精度受时间步长 t 和网格分辨率影响。</p>
<dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">mesh</td><td>输入三角网格 </td></tr>
<tr><td class="paramname">sources</td><td>源顶点索引列表(距离为 0 的顶点) </td></tr>
<tr><td class="paramname">t</td><td>时间步长,&lt; 0 时自动设为平均边长平方 </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>每顶点到最近源点的测地距离</dd></dl>
<dl class="section note"><dt>注解</dt><dd>要求网格为连通流形;时间步长 t 越小精度越高但数值越不稳定 <div class="fragment"><div class="line"><span class="keyword">auto</span> dist = <a class="code" href="group__mesh.html#ga3b72be8e64cc183adecc16722c62cad8">geodesic_distance</a>(mesh, {0, 10, 20});</div>
<div class="line"><span class="comment">// dist[i] = 顶点 i 到 {0,10,20} 中最近顶点的测地距离</span></div>
<div class="ttc" id="agroup__mesh_html_ga3b72be8e64cc183adecc16722c62cad8"><div class="ttname"><a href="group__mesh.html#ga3b72be8e64cc183adecc16722c62cad8">vde::mesh::geodesic_distance</a></div><div class="ttdeci">std::vector&lt; double &gt; geodesic_distance(const HalfedgeMesh &amp;mesh, const std::vector&lt; int &gt; &amp;sources, double t=-1.0)</div><div class="ttdoc">热方法(Heat Method)计算测地距离</div></div>
</div><!-- fragment --> </dd></dl>
</div>
</div>
<a id="ga8a58050cdf32fc480b502640c7ff5fa7"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga8a58050cdf32fc480b502640c7ff5fa7">&#9670;&nbsp;</a></span>lscm_parameterization()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">std::vector&lt;Point2D&gt; vde::mesh::lscm_parameterization </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classvde_1_1mesh_1_1HalfedgeMesh.html">HalfedgeMesh</a> &amp;&#160;</td>
<td class="paramname"><em>mesh</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>LSCMLeast Squares Conformal Maps)参数化 </p>
<p>基于 Lévy et al. 2002 的最小二乘共形映射。通过最小化共形能量 使参数化尽可能保角(角度畸变小),同时允许边界自由。</p>
<p>与 Tutte 的区别:</p><ul>
<li>无需固定边界 → 边界自然展开,畸变更小</li>
<li>需要固定至少 2 个顶点消除刚体自由度(内部处理)</li>
<li>共形性更好,适合纹理映射</li>
<li>不保证无翻转(局部极小可能翻转)</li>
</ul>
<p>能量函数: E(u,v) = Σ_T || ∇(u+iv) ||² · A_T 对每个三角形 T 最小化梯度扰动平方和</p>
<dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">mesh</td><td>输入三角网格 </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>每顶点 UV 坐标(Point2D</dd></dl>
<dl class="section note"><dt>注解</dt><dd>简化实现,不包含完整 Lévy 论文中所有的退化处理 <div class="fragment"><div class="line"><span class="keyword">auto</span> uv = <a class="code" href="group__mesh.html#ga8a58050cdf32fc480b502640c7ff5fa7">lscm_parameterization</a>(mesh);</div>
<div class="line"><span class="comment">// 适合纹理 mapping</span></div>
<div class="ttc" id="agroup__mesh_html_ga8a58050cdf32fc480b502640c7ff5fa7"><div class="ttname"><a href="group__mesh.html#ga8a58050cdf32fc480b502640c7ff5fa7">vde::mesh::lscm_parameterization</a></div><div class="ttdeci">std::vector&lt; Point2D &gt; lscm_parameterization(const HalfedgeMesh &amp;mesh)</div><div class="ttdoc">LSCMLeast Squares Conformal Maps)参数化</div></div>
</div><!-- fragment --> </dd></dl>
<dl class="section see"><dt>参见</dt><dd><a class="el" href="group__mesh.html#ga9068d8d71f80728567dff91785f01255" title="Tutte 参数化(调和参数化)">tutte_parameterization</a> </dd></dl>
</div>
</div>
<a id="ga1dfc79e7134920b11f72724170e1ac2a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga1dfc79e7134920b11f72724170e1ac2a">&#9670;&nbsp;</a></span>marching_cubes()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="structvde_1_1mesh_1_1MCMesh.html">MCMesh</a> vde::mesh::marching_cubes </td>
<td>(</td>
<td class="paramtype">const std::function&lt; double(double, double, double)&gt; &amp;&#160;</td>
<td class="paramname"><em>f</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">double&#160;</td>
<td class="paramname"><em>iso_level</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const Point3D &amp;&#160;</td>
<td class="paramname"><em>bmin</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const Point3D &amp;&#160;</td>
<td class="paramname"><em>bmax</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>resolution</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Marching Cubes 等值面提取 </p>
<p>从标量场 f(x,y,z) 中提取等值面 S = { (x,y,z) | f(x,y,z) = iso_level }。 将包围盒划分为 resolution×resolution×resolution 体素网格, 在每个体素的 8 个角求值 f,查表确定等值面穿越该体素的三角形配置。</p>
<dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">f</td><td>标量场函数 f(x,y,z) → double </td></tr>
<tr><td class="paramname">iso_level</td><td>等值面值(默认 0 </td></tr>
<tr><td class="paramname">bmin</td><td>包围盒最小角 </td></tr>
<tr><td class="paramname">bmax</td><td>包围盒最大角 </td></tr>
<tr><td class="paramname">resolution</td><td>每轴采样分辨率(≥ 1),总网格 = resolution³ 个立方体 </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>返回</dt><dd><a class="el" href="structvde_1_1mesh_1_1MCMesh.html" title="Marching Cubes 输出网格">MCMesh</a> 三角形网格</dd></dl>
<dl class="section note"><dt>注解</dt><dd>使用经典的 256 查表法(Lorensen &amp; Cline 1987 <div class="fragment"><div class="line"><span class="comment">// 提取球面等值面</span></div>
<div class="line"><span class="keyword">auto</span> f = [](<span class="keywordtype">double</span> x,<span class="keywordtype">double</span> y,<span class="keywordtype">double</span> z) {</div>
<div class="line"> <span class="keywordflow">return</span> <a class="code" href="group__mesh.html#gaf8519dd35d3adfc02e5cb5556c9bf93a">sdf_sphere</a>(x,y,z, 0,0,0, 1.0);</div>
<div class="line">};</div>
<div class="line"><span class="keyword">auto</span> mesh = <a class="code" href="group__mesh.html#ga1dfc79e7134920b11f72724170e1ac2a">marching_cubes</a>(f, 0.0,</div>
<div class="line"> {-2,-2,-2}, {2,2,2}, 64);</div>
<div class="ttc" id="agroup__mesh_html_ga1dfc79e7134920b11f72724170e1ac2a"><div class="ttname"><a href="group__mesh.html#ga1dfc79e7134920b11f72724170e1ac2a">vde::mesh::marching_cubes</a></div><div class="ttdeci">MCMesh marching_cubes(const std::function&lt; double(double, double, double)&gt; &amp;f, double iso_level, const Point3D &amp;bmin, const Point3D &amp;bmax, int resolution)</div><div class="ttdoc">Marching Cubes 等值面提取</div></div>
<div class="ttc" id="agroup__mesh_html_gaf8519dd35d3adfc02e5cb5556c9bf93a"><div class="ttname"><a href="group__mesh.html#gaf8519dd35d3adfc02e5cb5556c9bf93a">vde::mesh::sdf_sphere</a></div><div class="ttdeci">double sdf_sphere(double x, double y, double z, double cx, double cy, double cz, double r)</div><div class="ttdoc">SDF 球体函数</div><div class="ttdef"><b>Definition:</b> <a href="marching__cubes_8h_source.html#l00069">marching_cubes.h:69</a></div></div>
</div><!-- fragment --> </dd></dl>
<dl class="section see"><dt>参见</dt><dd><a class="el" href="group__mesh.html#gaf8519dd35d3adfc02e5cb5556c9bf93a" title="SDF 球体函数">sdf_sphere</a> <a class="el" href="group__mesh.html#gac7ff5123d0343063449838aeff11e703" title="SDF 立方体函数(轴对齐,中心在原点)">sdf_box</a> </dd></dl>
</div>
</div>
<a id="ga0c168a5ae3ebc4179829932e0a9fc3c3"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga0c168a5ae3ebc4179829932e0a9fc3c3">&#9670;&nbsp;</a></span>mesh_boolean()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classvde_1_1mesh_1_1HalfedgeMesh.html">HalfedgeMesh</a> vde::mesh::mesh_boolean </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classvde_1_1mesh_1_1HalfedgeMesh.html">HalfedgeMesh</a> &amp;&#160;</td>
<td class="paramname"><em>a</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classvde_1_1mesh_1_1HalfedgeMesh.html">HalfedgeMesh</a> &amp;&#160;</td>
<td class="paramname"><em>b</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__mesh.html#gad8808432c406c456c97e1aed624bf2a7">BooleanOp</a>&#160;</td>
<td class="paramname"><em>op</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>三角网格布尔运算 </p>
<p>对两个封闭三角网格执行 CSGConstructive Solid Geometry)布尔操作。 内部流程:</p><ol type="1">
<li>计算两个网格的三角形-三角形交线</li>
<li>沿交线细分三角形(conforming 三角化)</li>
<li>根据布尔类型对每个子面片做内/外分类</li>
<li>缝合属于结果的部分形成新网格</li>
</ol>
<dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">a</td><td>第一个三角网格(必须为封闭流形) </td></tr>
<tr><td class="paramname">b</td><td>第二个三角网格(必须为封闭流形) </td></tr>
<tr><td class="paramname">op</td><td>布尔运算类型 </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>结果三角网格</dd></dl>
<dl class="section note"><dt>注解</dt><dd>要求输入网格为封闭流形(watertight),否则分类不可靠 <div class="fragment"><div class="line"><span class="keyword">auto</span> result = <a class="code" href="group__mesh.html#ga0c168a5ae3ebc4179829932e0a9fc3c3">mesh_boolean</a>(cube, <a class="code" href="namespacevde_1_1sdf.html#ab544a3ebc4c0844b322b73bbbe4efb3f">sphere</a>, <a class="code" href="group__mesh.html#ggad8808432c406c456c97e1aed624bf2a7a28ed2ac6c29f64a3692c956004b8ff7a">BooleanOp::Difference</a>);</div>
<div class="line"><span class="comment">// result = 立方体减去球体的交集部分</span></div>
<div class="ttc" id="agroup__mesh_html_ga0c168a5ae3ebc4179829932e0a9fc3c3"><div class="ttname"><a href="group__mesh.html#ga0c168a5ae3ebc4179829932e0a9fc3c3">vde::mesh::mesh_boolean</a></div><div class="ttdeci">HalfedgeMesh mesh_boolean(const HalfedgeMesh &amp;a, const HalfedgeMesh &amp;b, BooleanOp op)</div><div class="ttdoc">三角网格布尔运算</div></div>
<div class="ttc" id="agroup__mesh_html_ggad8808432c406c456c97e1aed624bf2a7a28ed2ac6c29f64a3692c956004b8ff7a"><div class="ttname"><a href="group__mesh.html#ggad8808432c406c456c97e1aed624bf2a7a28ed2ac6c29f64a3692c956004b8ff7a">vde::mesh::BooleanOp::Difference</a></div><div class="ttdeci">@ Difference</div><div class="ttdoc">A \ B 差集</div></div>
<div class="ttc" id="anamespacevde_1_1sdf_html_ab544a3ebc4c0844b322b73bbbe4efb3f"><div class="ttname"><a href="namespacevde_1_1sdf.html#ab544a3ebc4c0844b322b73bbbe4efb3f">vde::sdf::sphere</a></div><div class="ttdeci">double sphere(const Point3D &amp;p, double radius)</div><div class="ttdoc">球体的 SDF</div><div class="ttdef"><b>Definition:</b> <a href="sdf__primitives_8h_source.html#l00068">sdf_primitives.h:68</a></div></div>
</div><!-- fragment --> </dd></dl>
</div>
</div>
<a id="ga1b08d4770fb1870f5a50d11981017970"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga1b08d4770fb1870f5a50d11981017970">&#9670;&nbsp;</a></span>mesh_quality_report()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="structvde_1_1mesh_1_1QualityReport.html">QualityReport</a> vde::mesh::mesh_quality_report </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classvde_1_1mesh_1_1HalfedgeMesh.html">HalfedgeMesh</a> &amp;&#160;</td>
<td class="paramname"><em>mesh</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>生成三角网格的完整质量报告 </p>
<p>包含直方图、分级统计及基本统计量。 分级标准(按归一化 Jacobian):</p><ul>
<li>A: [0.9, 1.0] — 优秀</li>
<li>B: [0.7, 0.9) — 良好</li>
<li>C: [0.5, 0.7) — 合格</li>
<li>D: [0.3, 0.5) — 差</li>
<li>F: [0.0, 0.3) — 不合格</li>
</ul>
<dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">mesh</td><td>输入三角网格 </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>返回</dt><dd><a class="el" href="structvde_1_1mesh_1_1QualityReport.html" title="详细质量报告">QualityReport</a> 完整质量报告 </dd></dl>
</div>
</div>
<a id="ga17256fc8a4833aa5702f06c2ffd3b070"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga17256fc8a4833aa5702f06c2ffd3b070">&#9670;&nbsp;</a></span>mesh_quality_report_tet()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="structvde_1_1mesh_1_1QualityReport.html">QualityReport</a> vde::mesh::mesh_quality_report_tet </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classvde_1_1mesh_1_1HalfedgeMesh.html">HalfedgeMesh</a> &amp;&#160;</td>
<td class="paramname"><em>mesh</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>生成四面体网格的完整质量报告 </p>
<p>将表面网格的面解释为四面体单元的边界(面 + 面心 = 虚拟四面体)。</p>
<dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">mesh</td><td>封闭三角网格 </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>返回</dt><dd><a class="el" href="structvde_1_1mesh_1_1QualityReport.html" title="详细质量报告">QualityReport</a> 完整质量报告 </dd></dl>
</div>
</div>
<a id="gac2545d1f554c6ec28ca24627e6824a52"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gac2545d1f554c6ec28ca24627e6824a52">&#9670;&nbsp;</a></span>repair_mesh()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classvde_1_1mesh_1_1HalfedgeMesh.html">HalfedgeMesh</a> vde::mesh::repair_mesh </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classvde_1_1mesh_1_1HalfedgeMesh.html">HalfedgeMesh</a> &amp;&#160;</td>
<td class="paramname"><em>mesh</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structvde_1_1mesh_1_1RepairOptions.html">RepairOptions</a> &amp;&#160;</td>
<td class="paramname"><em>opts</em> = <code>{}</code>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>自动网格修复 </p>
<p>对输入网格执行一系列修复操作,输出水密的流形网格:</p><ul>
<li>fill_holes: 检测边界环并用 fan 三角化填充</li>
<li>remove_duplicates: 空间哈希合并间距 &lt; 1e-8 的重复顶点</li>
<li>fix_orientation: 从最大连通分量开始遍历传播一致的半边朝向</li>
<li>remove_degenerate: 剔除面积 &lt; ε 的退化三角形</li>
</ul>
<dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">mesh</td><td>输入网格(可能有缺陷) </td></tr>
<tr><td class="paramname">opts</td><td>修复选项(默认全部启用) </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>修复后的网格</dd></dl>
<dl class="section note"><dt>注解</dt><dd>修复为启发式算法,不保证 100% 成功;孔洞过大或非流形边可能仍有残留问题 <div class="fragment"><div class="line"><span class="keyword">auto</span> fixed = <a class="code" href="group__mesh.html#gac2545d1f554c6ec28ca24627e6824a52">repair_mesh</a>(broken_mesh); <span class="comment">// 默认全修复</span></div>
<div class="line"> </div>
<div class="line">RepairOptions opts;</div>
<div class="line">opts.fill_holes = <span class="keyword">false</span>; <span class="comment">// 仅做去重 + 定向</span></div>
<div class="line"><span class="keyword">auto</span> cleaned = <a class="code" href="group__mesh.html#gac2545d1f554c6ec28ca24627e6824a52">repair_mesh</a>(mesh, opts);</div>
<div class="ttc" id="agroup__mesh_html_gac2545d1f554c6ec28ca24627e6824a52"><div class="ttname"><a href="group__mesh.html#gac2545d1f554c6ec28ca24627e6824a52">vde::mesh::repair_mesh</a></div><div class="ttdeci">HalfedgeMesh repair_mesh(const HalfedgeMesh &amp;mesh, const RepairOptions &amp;opts={})</div><div class="ttdoc">自动网格修复</div></div>
</div><!-- fragment --> </dd></dl>
</div>
</div>
<a id="gac7ff5123d0343063449838aeff11e703"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gac7ff5123d0343063449838aeff11e703">&#9670;&nbsp;</a></span>sdf_box()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">double vde::mesh::sdf_box </td>
<td>(</td>
<td class="paramtype">double&#160;</td>
<td class="paramname"><em>x</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">double&#160;</td>
<td class="paramname"><em>y</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">double&#160;</td>
<td class="paramname"><em>z</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">double&#160;</td>
<td class="paramname"><em>hx</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">double&#160;</td>
<td class="paramname"><em>hy</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">double&#160;</td>
<td class="paramname"><em>hz</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>SDF 立方体函数(轴对齐,中心在原点) </p>
<dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">x,y,z</td><td>采样点坐标 </td></tr>
<tr><td class="paramname">hx,hy,hz</td><td>半边长 </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>有符号距离 </dd></dl>
<p class="definition">在文件 <a class="el" href="marching__cubes_8h_source.html">marching_cubes.h</a><a class="el" href="marching__cubes_8h_source.html#l00082">82</a> 行定义.</p>
</div>
</div>
<a id="ga962fd7d9b943b8502fde8e59062df761"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga962fd7d9b943b8502fde8e59062df761">&#9670;&nbsp;</a></span>sdf_smooth_subtraction()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">double vde::mesh::sdf_smooth_subtraction </td>
<td>(</td>
<td class="paramtype">double&#160;</td>
<td class="paramname"><em>d1</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">double&#160;</td>
<td class="paramname"><em>d2</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">double&#160;</td>
<td class="paramname"><em>k</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>SDF 平滑差集(Smooth Subtraction </p>
<p>d1 减去 d2,过渡区由 k 控制。</p>
<dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">d1,d2</td><td>两个 SDF 值 </td></tr>
<tr><td class="paramname">k</td><td>平滑宽度(&gt; 0 </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>混合后的 SDF 值 </dd></dl>
<p class="definition">在文件 <a class="el" href="marching__cubes_8h_source.html">marching_cubes.h</a><a class="el" href="marching__cubes_8h_source.html#l00118">118</a> 行定义.</p>
</div>
</div>
<a id="gaf8519dd35d3adfc02e5cb5556c9bf93a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gaf8519dd35d3adfc02e5cb5556c9bf93a">&#9670;&nbsp;</a></span>sdf_sphere()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">double vde::mesh::sdf_sphere </td>
<td>(</td>
<td class="paramtype">double&#160;</td>
<td class="paramname"><em>x</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">double&#160;</td>
<td class="paramname"><em>y</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">double&#160;</td>
<td class="paramname"><em>z</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">double&#160;</td>
<td class="paramname"><em>cx</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">double&#160;</td>
<td class="paramname"><em>cy</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">double&#160;</td>
<td class="paramname"><em>cz</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">double&#160;</td>
<td class="paramname"><em>r</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>SDF 球体函数 </p>
<dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">x,y,z</td><td>采样点坐标 </td></tr>
<tr><td class="paramname">cx,cy,cz</td><td>球心坐标 </td></tr>
<tr><td class="paramname">r</td><td>半径 </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>有符号距离:内部 &lt; 0,表面 = 0,外部 &gt; 0</dd></dl>
<div class="fragment"><div class="line"><span class="keyword">auto</span> sphere_sdf = [](<span class="keywordtype">double</span> x,<span class="keywordtype">double</span> y,<span class="keywordtype">double</span> z) {</div>
<div class="line"> <span class="keywordflow">return</span> <a class="code" href="group__mesh.html#gaf8519dd35d3adfc02e5cb5556c9bf93a">sdf_sphere</a>(x,y,z, 0,0,0, 1.0);</div>
<div class="line">};</div>
</div><!-- fragment -->
<p class="definition">在文件 <a class="el" href="marching__cubes_8h_source.html">marching_cubes.h</a><a class="el" href="marching__cubes_8h_source.html#l00069">69</a> 行定义.</p>
</div>
</div>
<a id="ga16cf72e083686ade908d6ea9258bcd26"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga16cf72e083686ade908d6ea9258bcd26">&#9670;&nbsp;</a></span>simplify_mesh()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classvde_1_1mesh_1_1HalfedgeMesh.html">HalfedgeMesh</a> vde::mesh::simplify_mesh </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classvde_1_1mesh_1_1HalfedgeMesh.html">HalfedgeMesh</a> &amp;&#160;</td>
<td class="paramname"><em>mesh</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structvde_1_1mesh_1_1SimplifyOptions.html">SimplifyOptions</a> &amp;&#160;</td>
<td class="paramname"><em>opts</em> = <code>{}</code>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>QEMQuadric Error Metrics)网格简化 </p>
<p>基于 Garland &amp; Heckbert 1997 的 QEM 算法,通过迭代边塌缩减少三角面数量。 每条边维护一个 4×4 误差二次型 Q = Σ Q_f(面片的顶点-平面距离平方和), 塌缩目标点为 argmin v^T Q v,塌缩代价为该最小值。</p>
<p>算法流程:</p><ol type="1">
<li>为每个顶点计算初始 Q(关联所有邻面的平面二次型之和)</li>
<li>为每条边计算最优塌缩点及代价,插入最小堆</li>
<li>循环弹出最小代价边,执行塌缩,更新受影响边的代价</li>
<li>直到面数达到 target_ratio 或堆为空</li>
</ol>
<dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">mesh</td><td>输入三角网格 </td></tr>
<tr><td class="paramname">opts</td><td>简化选项 </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>简化后的网格</dd></dl>
<dl class="section note"><dt>注解</dt><dd>preserve_boundary 模式下,边界边通过惩罚项(大代价)被保护 <div class="fragment"><div class="line">SimplifyOptions opts;</div>
<div class="line">opts.target_ratio = 0.1; <span class="comment">// 保留 10% 面</span></div>
<div class="line"><span class="keyword">auto</span> lod = <a class="code" href="group__mesh.html#ga16cf72e083686ade908d6ea9258bcd26">simplify_mesh</a>(high_res_mesh, opts);</div>
<div class="ttc" id="agroup__mesh_html_ga16cf72e083686ade908d6ea9258bcd26"><div class="ttname"><a href="group__mesh.html#ga16cf72e083686ade908d6ea9258bcd26">vde::mesh::simplify_mesh</a></div><div class="ttdeci">HalfedgeMesh simplify_mesh(const HalfedgeMesh &amp;mesh, const SimplifyOptions &amp;opts={})</div><div class="ttdoc">QEMQuadric Error Metrics)网格简化</div></div>
</div><!-- fragment --> </dd></dl>
</div>
</div>
<a id="ga74a01dbb67d7fe37fddfd0d62d71e111"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga74a01dbb67d7fe37fddfd0d62d71e111">&#9670;&nbsp;</a></span>smooth_bilateral()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classvde_1_1mesh_1_1HalfedgeMesh.html">HalfedgeMesh</a> vde::mesh::smooth_bilateral </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classvde_1_1mesh_1_1HalfedgeMesh.html">HalfedgeMesh</a> &amp;&#160;</td>
<td class="paramname"><em>mesh</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structvde_1_1mesh_1_1SmoothOptions.html">SmoothOptions</a> &amp;&#160;</td>
<td class="paramname"><em>opts</em> = <code>{}</code>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>双边网格滤波 </p>
<p>基于法向加权的各向异性去噪,保持尖锐边缘和特征:</p><ul>
<li>空间权重:w_c = exp(-d²/(2·σ_c²)),基于顶点间距</li>
<li>法向权重:w_n = exp(-θ²/(2·σ_n²)),基于法向夹角</li>
<li>更新:v ← v + Σ_j w_c(j)·w_n(j)·(v_j - v) / Σ_j w_c(j)·w_n(j)</li>
</ul>
<p>相比于各向同性的拉普拉斯类方法,双边滤波在 CAD/机械零件网格上效果最优。</p>
<dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">mesh</td><td>输入网格 </td></tr>
<tr><td class="paramname">opts</td><td>光顺选项(使用 bilateral_ 前缀字段) </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>光顺后的网格 </dd></dl>
</div>
</div>
<a id="gae5db218bd1a94c461355750e858ff1a7"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gae5db218bd1a94c461355750e858ff1a7">&#9670;&nbsp;</a></span>smooth_hc_laplacian()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classvde_1_1mesh_1_1HalfedgeMesh.html">HalfedgeMesh</a> vde::mesh::smooth_hc_laplacian </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classvde_1_1mesh_1_1HalfedgeMesh.html">HalfedgeMesh</a> &amp;&#160;</td>
<td class="paramname"><em>mesh</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structvde_1_1mesh_1_1SmoothOptions.html">SmoothOptions</a> &amp;&#160;</td>
<td class="paramname"><em>opts</em> = <code>{}</code>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>HC 拉普拉斯光顺(Humphrey's Classes </p>
<p>两遍处理以保持原始形状特征:</p><ol type="1">
<li>前推:标准拉普拉斯光顺,记录位移 b_i = v_i' - v_i</li>
<li>回推:v_i'' = v_i' - (α·b_i + β·avg(neighbor_b))</li>
</ol>
<p>相比标准拉普拉斯显著减轻体积收缩,同时比 Taubin 更好地保持尖锐特征。</p>
<dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">mesh</td><td>输入网格 </td></tr>
<tr><td class="paramname">opts</td><td>光顺选项(使用 hc_alpha 和 hc_beta 字段) </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>光顺后的网格 </dd></dl>
</div>
</div>
<a id="ga8b9c1c97c831fc23bf669abd054abeeb"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga8b9c1c97c831fc23bf669abd054abeeb">&#9670;&nbsp;</a></span>smooth_laplacian()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classvde_1_1mesh_1_1HalfedgeMesh.html">HalfedgeMesh</a> vde::mesh::smooth_laplacian </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classvde_1_1mesh_1_1HalfedgeMesh.html">HalfedgeMesh</a> &amp;&#160;</td>
<td class="paramname"><em>mesh</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>iterations</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">double&#160;</td>
<td class="paramname"><em>lambda</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>标准拉普拉斯光顺 </p>
<p>均匀拉普拉斯:v ← v + λ·(avg(neighbor_positions) - v) 最简单但会引入体积收缩,适用于轻度平滑。</p>
<dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">mesh</td><td>输入网格 </td></tr>
<tr><td class="paramname">iterations</td><td>迭代次数 </td></tr>
<tr><td class="paramname">lambda</td><td>步长系数 (0, 1] </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>光顺后的网格</dd></dl>
<dl class="section note"><dt>注解</dt><dd>迭代过多会导致网格坍塌;对于体积关键的应用优先选 Taubin 或 HC </dd></dl>
<dl class="section see"><dt>参见</dt><dd><a class="el" href="group__mesh.html#gaf3f70299323208ea800e0ce1fc74d6db" title="Taubin λ|μ 光顺(体积保持)">smooth_taubin</a> <a class="el" href="group__mesh.html#gae5db218bd1a94c461355750e858ff1a7" title="HC 拉普拉斯光顺(Humphrey&#39;s Classes">smooth_hc_laplacian</a> </dd></dl>
</div>
</div>
<a id="ga98a34525afcacc2ee0a2fed755531f87"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga98a34525afcacc2ee0a2fed755531f87">&#9670;&nbsp;</a></span>smooth_mesh()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classvde_1_1mesh_1_1HalfedgeMesh.html">HalfedgeMesh</a> vde::mesh::smooth_mesh </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classvde_1_1mesh_1_1HalfedgeMesh.html">HalfedgeMesh</a> &amp;&#160;</td>
<td class="paramname"><em>mesh</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structvde_1_1mesh_1_1SmoothOptions.html">SmoothOptions</a> &amp;&#160;</td>
<td class="paramname"><em>opts</em> = <code>{}</code>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>网格光顺(通用分发器) </p>
<p>根据 opts.method 分派到具体的光顺实现:</p><ul>
<li>Laplacian → <a class="el" href="group__mesh.html#ga8b9c1c97c831fc23bf669abd054abeeb" title="标准拉普拉斯光顺">smooth_laplacian()</a></li>
<li>Taubin → <a class="el" href="group__mesh.html#gaf3f70299323208ea800e0ce1fc74d6db" title="Taubin λ|μ 光顺(体积保持)">smooth_taubin()</a></li>
<li>HCLaplacian → <a class="el" href="group__mesh.html#gae5db218bd1a94c461355750e858ff1a7" title="HC 拉普拉斯光顺(Humphrey&#39;s Classes">smooth_hc_laplacian()</a></li>
<li>Bilateral → <a class="el" href="group__mesh.html#ga74a01dbb67d7fe37fddfd0d62d71e111" title="双边网格滤波">smooth_bilateral()</a></li>
</ul>
<dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">mesh</td><td>输入三角网格 </td></tr>
<tr><td class="paramname">opts</td><td>光顺选项 </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>光顺后的网格(顶点位置更新,拓扑不变)</dd></dl>
<div class="fragment"><div class="line">SmoothOptions opts;</div>
<div class="line">opts.method = <a class="code" href="group__mesh.html#ggab6b25a36fe98ad9dc1a6fc3889565c35a83d3b0844a534014ccbc6102e01193f3">SmoothMethod::Taubin</a>;</div>
<div class="line">opts.iterations = 20;</div>
<div class="line"><span class="keyword">auto</span> smooth = <a class="code" href="group__mesh.html#ga98a34525afcacc2ee0a2fed755531f87">smooth_mesh</a>(noisy_mesh, opts);</div>
<div class="ttc" id="agroup__mesh_html_ga98a34525afcacc2ee0a2fed755531f87"><div class="ttname"><a href="group__mesh.html#ga98a34525afcacc2ee0a2fed755531f87">vde::mesh::smooth_mesh</a></div><div class="ttdeci">HalfedgeMesh smooth_mesh(const HalfedgeMesh &amp;mesh, const SmoothOptions &amp;opts={})</div><div class="ttdoc">网格光顺(通用分发器)</div></div>
<div class="ttc" id="agroup__mesh_html_ggab6b25a36fe98ad9dc1a6fc3889565c35a83d3b0844a534014ccbc6102e01193f3"><div class="ttname"><a href="group__mesh.html#ggab6b25a36fe98ad9dc1a6fc3889565c35a83d3b0844a534014ccbc6102e01193f3">vde::mesh::SmoothMethod::Taubin</a></div><div class="ttdeci">@ Taubin</div><div class="ttdoc">Taubin λ|μ 光顺:先正后负步交替,体积保持</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="gaf3f70299323208ea800e0ce1fc74d6db"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gaf3f70299323208ea800e0ce1fc74d6db">&#9670;&nbsp;</a></span>smooth_taubin()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classvde_1_1mesh_1_1HalfedgeMesh.html">HalfedgeMesh</a> vde::mesh::smooth_taubin </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classvde_1_1mesh_1_1HalfedgeMesh.html">HalfedgeMesh</a> &amp;&#160;</td>
<td class="paramname"><em>mesh</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>iterations</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">double&#160;</td>
<td class="paramname"><em>lambda</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">double&#160;</td>
<td class="paramname"><em>mu</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Taubin λ|μ 光顺(体积保持) </p>
<p>两阶段交替:</p><ol type="1">
<li>正步(收缩滤波):v ← v + λ·L(v)</li>
<li>负步(膨胀滤波):v ← v + μ·L(v),其中 μ &lt; 0 且 |μ| &gt; |λ|</li>
</ol>
<p>传递函数在低频通带增益 ≈ 1,有效去噪同时保持体积。</p>
<dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">mesh</td><td>输入网格 </td></tr>
<tr><td class="paramname">iterations</td><td>完整 λ/μ 循环次数 </td></tr>
<tr><td class="paramname">lambda</td><td>正步系数 (0, 1] </td></tr>
<tr><td class="paramname">mu</td><td>负步系数,需满足 mu &lt; 0 且 |mu| &gt; lambda </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>光顺后的网格</dd></dl>
<dl class="section note"><dt>注解</dt><dd>典型值:λ = 0.5, μ = -0.53;|mu| 过大可能导致不稳定振荡 </dd></dl>
</div>
</div>
<a id="ga757b9f18c66578733038aa4f438ec2a4"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga757b9f18c66578733038aa4f438ec2a4">&#9670;&nbsp;</a></span>tet_scaled_jacobian()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">double vde::mesh::tet_scaled_jacobian </td>
<td>(</td>
<td class="paramtype">const Point3D &amp;&#160;</td>
<td class="paramname"><em>a</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const Point3D &amp;&#160;</td>
<td class="paramname"><em>b</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const Point3D &amp;&#160;</td>
<td class="paramname"><em>c</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const Point3D &amp;&#160;</td>
<td class="paramname"><em>d</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>四面体归一化 Jacobian </p>
<p>计算四面体 (a,b,c,d) 的体积 Jacobian,归一化到 [0, 1]。 值 1 = 正四面体(最优),0 = 退化(共面)。</p>
<p>公式:J = det([b-a, c-a, d-a]) / (归一化因子)</p>
<dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">a,b,c,d</td><td>四面体四个顶点 </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>归一化 Jacobian [0, 1] </dd></dl>
</div>
</div>
<a id="gad1d22c2fdf308f1471636a5111053343"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gad1d22c2fdf308f1471636a5111053343">&#9670;&nbsp;</a></span>tri_scaled_jacobian()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">double vde::mesh::tri_scaled_jacobian </td>
<td>(</td>
<td class="paramtype">const Point3D &amp;&#160;</td>
<td class="paramname"><em>a</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const Point3D &amp;&#160;</td>
<td class="paramname"><em>b</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const Point3D &amp;&#160;</td>
<td class="paramname"><em>c</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>三角形归一化 Jacobian </p>
<p>计算三角形 (a,b,c) 的带符号面积,归一化到 [-1, 1]。 值 1 = 等边三角形(最优),0 = 退化(共线),-1 = 翻转(法向反了)。</p>
<p>公式:J = det([b-a, c-a, n]) / (|b-a|·|c-a|·|b-c|? or area-based?) 实际实现使用面积与理想等边三角形面积之比。</p>
<dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">a,b,c</td><td>三角形三个顶点 </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>归一化 Jacobian [-1, 1] </dd></dl>
</div>
</div>
<a id="ga9068d8d71f80728567dff91785f01255"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga9068d8d71f80728567dff91785f01255">&#9670;&nbsp;</a></span>tutte_parameterization()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">std::vector&lt;Point2D&gt; vde::mesh::tutte_parameterization </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classvde_1_1mesh_1_1HalfedgeMesh.html">HalfedgeMesh</a> &amp;&#160;</td>
<td class="paramname"><em>mesh</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Tutte 参数化(调和参数化) </p>
<p>将边界顶点固定映射到单位圆上,内部顶点通过求解 Laplace 方程 Δu = 0, Δv = 0 得到 UV 坐标。这是最经典、最稳定的网格参数化方法。</p>
<p>算法:</p><ol type="1">
<li>检测网格边界环</li>
<li>将边界顶点按弧长比例映射到单位圆上</li>
<li>对每个内部顶点求解均匀 Laplace(权重 w_ij = 1): v_i = Σ_j v_j / deg(i)</li>
<li>构造稀疏线性系统 LU 求解</li>
</ol>
<p>优点:极稳定,保证无翻转(对凸边界网格) 缺点:边界固定,内部可能扭曲(非共形)</p>
<dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">mesh</td><td>输入三角网格(需含边界) </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>每顶点 UV 坐标(Point2D),顺序与 mesh 顶点一致</dd></dl>
<dl class="section note"><dt>注解</dt><dd>网格必须有边界(开网格);闭曲面需先切割为拓扑圆盘 <div class="fragment"><div class="line"><span class="keyword">auto</span> uv = <a class="code" href="group__mesh.html#ga9068d8d71f80728567dff91785f01255">tutte_parameterization</a>(mesh);</div>
<div class="line"><span class="comment">// uv[i] 为顶点 i 的 (u,v) 坐标,范围大致在 [-1,1]²</span></div>
<div class="ttc" id="agroup__mesh_html_ga9068d8d71f80728567dff91785f01255"><div class="ttname"><a href="group__mesh.html#ga9068d8d71f80728567dff91785f01255">vde::mesh::tutte_parameterization</a></div><div class="ttdeci">std::vector&lt; Point2D &gt; tutte_parameterization(const HalfedgeMesh &amp;mesh)</div><div class="ttdoc">Tutte 参数化(调和参数化)</div></div>
</div><!-- fragment --> </dd></dl>
<dl class="section see"><dt>参见</dt><dd><a class="el" href="group__mesh.html#ga8a58050cdf32fc480b502640c7ff5fa7" title="LSCMLeast Squares Conformal Maps)参数化">lscm_parameterization</a> </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>