1693 lines
109 KiB
HTML
1693 lines
109 KiB
HTML
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||
<head>
|
||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||
<meta name="generator" content="Doxygen 1.9.1"/>
|
||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||
<title>ViewDesignEngine: 网格模块 (vde::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
|
||
 <span id="projectnumber">3.1.0</span>
|
||
</div>
|
||
<div id="projectbrief">高性能 CAD 计算几何引擎</div>
|
||
</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
</div>
|
||
<!-- end header part -->
|
||
<!-- 制作者 Doxygen 1.9.1 -->
|
||
<script type="text/javascript">
|
||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||
var searchBox = new SearchBox("searchBox", "search",false,'搜索','.html');
|
||
/* @license-end */
|
||
</script>
|
||
<script type="text/javascript" src="menudata.js"></script>
|
||
<script type="text/javascript" src="menu.js"></script>
|
||
<script type="text/javascript">
|
||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||
$(function() {
|
||
initMenu('',true,false,'search.php','搜索');
|
||
$(document).ready(function() { init_search(); });
|
||
});
|
||
/* @license-end */</script>
|
||
<div id="main-nav"></div>
|
||
</div><!-- top -->
|
||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||
<div id="nav-tree">
|
||
<div id="nav-tree-contents">
|
||
<div id="nav-sync" class="sync"></div>
|
||
</div>
|
||
</div>
|
||
<div id="splitbar" style="-moz-user-select:none;"
|
||
class="ui-resizable-handle">
|
||
</div>
|
||
</div>
|
||
<script type="text/javascript">
|
||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||
$(document).ready(function(){initNavTree('group__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> |
|
||
<a href="#enum-members">枚举</a> |
|
||
<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  </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"> </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"> </td></tr>
|
||
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </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"> </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"> </td></tr>
|
||
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </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"> </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"> </td></tr>
|
||
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </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"> </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"> </td></tr>
|
||
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classvde_1_1mesh_1_1HalfedgeMesh.html">vde::mesh::HalfedgeMesh</a></td></tr>
|
||
<tr class="memdesc:"><td class="mdescLeft"> </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"> </td></tr>
|
||
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </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"> </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"> </td></tr>
|
||
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </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"> </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"> </td></tr>
|
||
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </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"> </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"> </td></tr>
|
||
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </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"> </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"> </td></tr>
|
||
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </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"> </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"> </td></tr>
|
||
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </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"> </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"> </td></tr>
|
||
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </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"> </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"> </td></tr>
|
||
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </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"> </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"> </td></tr>
|
||
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </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"> </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"> </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  </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"> </td><td class="mdescRight">布尔运算类型(CSG 组合) <a href="group__mesh.html#gad8808432c406c456c97e1aed624bf2a7">更多...</a><br /></td></tr>
|
||
<tr class="separator:gad8808432c406c456c97e1aed624bf2a7"><td class="memSeparator" colspan="2"> </td></tr>
|
||
<tr class="memitem:gab584f2ea8e883f4c53ad72d8b1f4059c"><td class="memItemLeft" align="right" valign="top">enum class  </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"> </td><td class="mdescRight">单元类型枚举 <a href="group__mesh.html#gab584f2ea8e883f4c53ad72d8b1f4059c">更多...</a><br /></td></tr>
|
||
<tr class="separator:gab584f2ea8e883f4c53ad72d8b1f4059c"><td class="memSeparator" colspan="2"> </td></tr>
|
||
<tr class="memitem:gab6b25a36fe98ad9dc1a6fc3889565c35"><td class="memItemLeft" align="right" valign="top">enum class  </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"> </td><td class="mdescRight">网格光顺方法 <a href="group__mesh.html#gab6b25a36fe98ad9dc1a6fc3889565c35">更多...</a><br /></td></tr>
|
||
<tr class="separator:gab6b25a36fe98ad9dc1a6fc3889565c35"><td class="memSeparator" colspan="2"> </td></tr>
|
||
</table><table class="memberdecls">
|
||
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
|
||
函数</h2></td></tr>
|
||
<tr class="memitem:gafc6a6011d521ce49fc08d5eb0371f53b"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structvde_1_1mesh_1_1TetrahedronMesh.html">TetrahedronMesh</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__mesh.html#gafc6a6011d521ce49fc08d5eb0371f53b">vde::mesh::alpha_shapes</a> (const std::vector< Point3D > &points, double alpha)</td></tr>
|
||
<tr class="memdesc:gafc6a6011d521ce49fc08d5eb0371f53b"><td class="mdescLeft"> </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"> </td></tr>
|
||
<tr class="memitem:ga9cb135f377987dd30cd33b44d728d3cb"><td class="memItemLeft" align="right" valign="top">std::pair< std::vector< Point3D >, std::vector< std::array< int, 3 > > > </td><td class="memItemRight" valign="bottom"><a class="el" href="group__mesh.html#ga9cb135f377987dd30cd33b44d728d3cb">vde::mesh::alpha_shapes_surface</a> (const <a class="el" href="structvde_1_1mesh_1_1TetrahedronMesh.html">TetrahedronMesh</a> &tet_mesh)</td></tr>
|
||
<tr class="memdesc:ga9cb135f377987dd30cd33b44d728d3cb"><td class="mdescLeft"> </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"> </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> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__mesh.html#ga589b3c23a527e157e19bfa7d3091010e">vde::mesh::constrained_delaunay_2d</a> (const std::vector< Point2D > &points, const std::vector< std::pair< int, int >> &constraints)</td></tr>
|
||
<tr class="memdesc:ga589b3c23a527e157e19bfa7d3091010e"><td class="mdescLeft"> </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"> </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> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__mesh.html#gaefe8814fce53875c65a8fb9308944cd1">vde::mesh::delaunay_2d</a> (const std::vector< Point2D > &points)</td></tr>
|
||
<tr class="memdesc:gaefe8814fce53875c65a8fb9308944cd1"><td class="mdescLeft"> </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"> </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> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__mesh.html#gafebfe12ff8349da1c1cc7c8f7245375a">vde::mesh::delaunay_3d</a> (const std::vector< Point3D > &points)</td></tr>
|
||
<tr class="memdesc:gafebfe12ff8349da1c1cc7c8f7245375a"><td class="mdescLeft"> </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"> </td></tr>
|
||
<tr class="memitem:ga3b72be8e64cc183adecc16722c62cad8"><td class="memItemLeft" align="right" valign="top">std::vector< double > </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> &mesh, const std::vector< int > &sources, double t=-1.0)</td></tr>
|
||
<tr class="memdesc:ga3b72be8e64cc183adecc16722c62cad8"><td class="mdescLeft"> </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"> </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> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__mesh.html#ga1dfc79e7134920b11f72724170e1ac2a">vde::mesh::marching_cubes</a> (const std::function< double(double, double, double)> &f, double iso_level, const Point3D &bmin, const Point3D &bmax, int resolution)</td></tr>
|
||
<tr class="memdesc:ga1dfc79e7134920b11f72724170e1ac2a"><td class="mdescLeft"> </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"> </td></tr>
|
||
<tr class="memitem:gaf8519dd35d3adfc02e5cb5556c9bf93a"><td class="memItemLeft" align="right" valign="top">double </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"> </td><td class="mdescRight">SDF 球体函数 <a href="group__mesh.html#gaf8519dd35d3adfc02e5cb5556c9bf93a">更多...</a><br /></td></tr>
|
||
<tr class="separator:gaf8519dd35d3adfc02e5cb5556c9bf93a"><td class="memSeparator" colspan="2"> </td></tr>
|
||
<tr class="memitem:gac7ff5123d0343063449838aeff11e703"><td class="memItemLeft" align="right" valign="top">double </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"> </td><td class="mdescRight">SDF 立方体函数(轴对齐,中心在原点) <a href="group__mesh.html#gac7ff5123d0343063449838aeff11e703">更多...</a><br /></td></tr>
|
||
<tr class="separator:gac7ff5123d0343063449838aeff11e703"><td class="memSeparator" colspan="2"> </td></tr>
|
||
<tr class="memitem:ga962fd7d9b943b8502fde8e59062df761"><td class="memItemLeft" align="right" valign="top">double </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"> </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"> </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> </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> &a, const <a class="el" href="classvde_1_1mesh_1_1HalfedgeMesh.html">HalfedgeMesh</a> &b, <a class="el" href="group__mesh.html#gad8808432c406c456c97e1aed624bf2a7">BooleanOp</a> op)</td></tr>
|
||
<tr class="memdesc:ga0c168a5ae3ebc4179829932e0a9fc3c3"><td class="mdescLeft"> </td><td class="mdescRight">三角网格布尔运算 <a href="group__mesh.html#ga0c168a5ae3ebc4179829932e0a9fc3c3">更多...</a><br /></td></tr>
|
||
<tr class="separator:ga0c168a5ae3ebc4179829932e0a9fc3c3"><td class="memSeparator" colspan="2"> </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> </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> &mesh)</td></tr>
|
||
<tr class="memdesc:gad85a12c525696c7f01cfa1473dbe547a"><td class="mdescLeft"> </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"> </td></tr>
|
||
<tr class="memitem:ga9068d8d71f80728567dff91785f01255"><td class="memItemLeft" align="right" valign="top">std::vector< Point2D > </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> &mesh)</td></tr>
|
||
<tr class="memdesc:ga9068d8d71f80728567dff91785f01255"><td class="mdescLeft"> </td><td class="mdescRight">Tutte 参数化(调和参数化) <a href="group__mesh.html#ga9068d8d71f80728567dff91785f01255">更多...</a><br /></td></tr>
|
||
<tr class="separator:ga9068d8d71f80728567dff91785f01255"><td class="memSeparator" colspan="2"> </td></tr>
|
||
<tr class="memitem:ga8a58050cdf32fc480b502640c7ff5fa7"><td class="memItemLeft" align="right" valign="top">std::vector< Point2D > </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> &mesh)</td></tr>
|
||
<tr class="memdesc:ga8a58050cdf32fc480b502640c7ff5fa7"><td class="mdescLeft"> </td><td class="mdescRight">LSCM(Least Squares Conformal Maps)参数化 <a href="group__mesh.html#ga8a58050cdf32fc480b502640c7ff5fa7">更多...</a><br /></td></tr>
|
||
<tr class="separator:ga8a58050cdf32fc480b502640c7ff5fa7"><td class="memSeparator" colspan="2"> </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> </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> &mesh)</td></tr>
|
||
<tr class="memdesc:ga38aa79a2a2e09c4657531dcc18934e4e"><td class="mdescLeft"> </td><td class="mdescRight">评估三角网格质量 <a href="group__mesh.html#ga38aa79a2a2e09c4657531dcc18934e4e">更多...</a><br /></td></tr>
|
||
<tr class="separator:ga38aa79a2a2e09c4657531dcc18934e4e"><td class="memSeparator" colspan="2"> </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> </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> &mesh)</td></tr>
|
||
<tr class="memdesc:ga6b4eec2fa0e1818ae4e0108e892d5f86"><td class="mdescLeft"> </td><td class="mdescRight">评估三角网格作为四面体边界的质量 <a href="group__mesh.html#ga6b4eec2fa0e1818ae4e0108e892d5f86">更多...</a><br /></td></tr>
|
||
<tr class="separator:ga6b4eec2fa0e1818ae4e0108e892d5f86"><td class="memSeparator" colspan="2"> </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> </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> &mesh, <a class="el" href="group__mesh.html#gab584f2ea8e883f4c53ad72d8b1f4059c">ElementType</a> type)</td></tr>
|
||
<tr class="memdesc:gac1cc5a3b53625ea8b233f7dbf9f009c5"><td class="mdescLeft"> </td><td class="mdescRight">按单元类型分派的网格质量评估 <a href="group__mesh.html#gac1cc5a3b53625ea8b233f7dbf9f009c5">更多...</a><br /></td></tr>
|
||
<tr class="separator:gac1cc5a3b53625ea8b233f7dbf9f009c5"><td class="memSeparator" colspan="2"> </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> </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> &mesh)</td></tr>
|
||
<tr class="memdesc:ga1b08d4770fb1870f5a50d11981017970"><td class="mdescLeft"> </td><td class="mdescRight">生成三角网格的完整质量报告 <a href="group__mesh.html#ga1b08d4770fb1870f5a50d11981017970">更多...</a><br /></td></tr>
|
||
<tr class="separator:ga1b08d4770fb1870f5a50d11981017970"><td class="memSeparator" colspan="2"> </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> </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> &mesh)</td></tr>
|
||
<tr class="memdesc:ga17256fc8a4833aa5702f06c2ffd3b070"><td class="mdescLeft"> </td><td class="mdescRight">生成四面体网格的完整质量报告 <a href="group__mesh.html#ga17256fc8a4833aa5702f06c2ffd3b070">更多...</a><br /></td></tr>
|
||
<tr class="separator:ga17256fc8a4833aa5702f06c2ffd3b070"><td class="memSeparator" colspan="2"> </td></tr>
|
||
<tr class="memitem:gad1d22c2fdf308f1471636a5111053343"><td class="memItemLeft" align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="group__mesh.html#gad1d22c2fdf308f1471636a5111053343">vde::mesh::tri_scaled_jacobian</a> (const Point3D &a, const Point3D &b, const Point3D &c)</td></tr>
|
||
<tr class="memdesc:gad1d22c2fdf308f1471636a5111053343"><td class="mdescLeft"> </td><td class="mdescRight">三角形归一化 Jacobian <a href="group__mesh.html#gad1d22c2fdf308f1471636a5111053343">更多...</a><br /></td></tr>
|
||
<tr class="separator:gad1d22c2fdf308f1471636a5111053343"><td class="memSeparator" colspan="2"> </td></tr>
|
||
<tr class="memitem:ga757b9f18c66578733038aa4f438ec2a4"><td class="memItemLeft" align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="group__mesh.html#ga757b9f18c66578733038aa4f438ec2a4">vde::mesh::tet_scaled_jacobian</a> (const Point3D &a, const Point3D &b, const Point3D &c, const Point3D &d)</td></tr>
|
||
<tr class="memdesc:ga757b9f18c66578733038aa4f438ec2a4"><td class="mdescLeft"> </td><td class="mdescRight">四面体归一化 Jacobian <a href="group__mesh.html#ga757b9f18c66578733038aa4f438ec2a4">更多...</a><br /></td></tr>
|
||
<tr class="separator:ga757b9f18c66578733038aa4f438ec2a4"><td class="memSeparator" colspan="2"> </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> </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> &mesh, const <a class="el" href="structvde_1_1mesh_1_1RepairOptions.html">RepairOptions</a> &opts={})</td></tr>
|
||
<tr class="memdesc:gac2545d1f554c6ec28ca24627e6824a52"><td class="mdescLeft"> </td><td class="mdescRight">自动网格修复 <a href="group__mesh.html#gac2545d1f554c6ec28ca24627e6824a52">更多...</a><br /></td></tr>
|
||
<tr class="separator:gac2545d1f554c6ec28ca24627e6824a52"><td class="memSeparator" colspan="2"> </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> </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> &mesh, const <a class="el" href="structvde_1_1mesh_1_1SimplifyOptions.html">SimplifyOptions</a> &opts={})</td></tr>
|
||
<tr class="memdesc:ga16cf72e083686ade908d6ea9258bcd26"><td class="mdescLeft"> </td><td class="mdescRight">QEM(Quadric Error Metrics)网格简化 <a href="group__mesh.html#ga16cf72e083686ade908d6ea9258bcd26">更多...</a><br /></td></tr>
|
||
<tr class="separator:ga16cf72e083686ade908d6ea9258bcd26"><td class="memSeparator" colspan="2"> </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> </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> &mesh, const <a class="el" href="structvde_1_1mesh_1_1SmoothOptions.html">SmoothOptions</a> &opts={})</td></tr>
|
||
<tr class="memdesc:ga98a34525afcacc2ee0a2fed755531f87"><td class="mdescLeft"> </td><td class="mdescRight">网格光顺(通用分发器) <a href="group__mesh.html#ga98a34525afcacc2ee0a2fed755531f87">更多...</a><br /></td></tr>
|
||
<tr class="separator:ga98a34525afcacc2ee0a2fed755531f87"><td class="memSeparator" colspan="2"> </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> </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> &mesh, int iterations, double lambda)</td></tr>
|
||
<tr class="memdesc:ga8b9c1c97c831fc23bf669abd054abeeb"><td class="mdescLeft"> </td><td class="mdescRight">标准拉普拉斯光顺 <a href="group__mesh.html#ga8b9c1c97c831fc23bf669abd054abeeb">更多...</a><br /></td></tr>
|
||
<tr class="separator:ga8b9c1c97c831fc23bf669abd054abeeb"><td class="memSeparator" colspan="2"> </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> </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> &mesh, int iterations, double lambda, double mu)</td></tr>
|
||
<tr class="memdesc:gaf3f70299323208ea800e0ce1fc74d6db"><td class="mdescLeft"> </td><td class="mdescRight">Taubin λ|μ 光顺(体积保持) <a href="group__mesh.html#gaf3f70299323208ea800e0ce1fc74d6db">更多...</a><br /></td></tr>
|
||
<tr class="separator:gaf3f70299323208ea800e0ce1fc74d6db"><td class="memSeparator" colspan="2"> </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> </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> &mesh, const <a class="el" href="structvde_1_1mesh_1_1SmoothOptions.html">SmoothOptions</a> &opts={})</td></tr>
|
||
<tr class="memdesc:gae5db218bd1a94c461355750e858ff1a7"><td class="mdescLeft"> </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"> </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> </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> &mesh, const <a class="el" href="structvde_1_1mesh_1_1SmoothOptions.html">SmoothOptions</a> &opts={})</td></tr>
|
||
<tr class="memdesc:ga74a01dbb67d7fe37fddfd0d62d71e111"><td class="mdescLeft"> </td><td class="mdescRight">双边网格滤波 <a href="group__mesh.html#ga74a01dbb67d7fe37fddfd0d62d71e111">更多...</a><br /></td></tr>
|
||
<tr class="separator:ga74a01dbb67d7fe37fddfd0d62d71e111"><td class="memSeparator" colspan="2"> </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">◆ </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 </td><td class="fielddoc"><p>A ∪ B 并集 </p>
|
||
</td></tr>
|
||
<tr><td class="fieldname"><a id="ggad8808432c406c456c97e1aed624bf2a7aa06d31c2ee920b4d53e8c9c06d90ba24"></a>Intersection </td><td class="fielddoc"><p>A ∩ B 交集 </p>
|
||
</td></tr>
|
||
<tr><td class="fieldname"><a id="ggad8808432c406c456c97e1aed624bf2a7a28ed2ac6c29f64a3692c956004b8ff7a"></a>Difference </td><td class="fielddoc"><p>A \ B 差集 </p>
|
||
</td></tr>
|
||
<tr><td class="fieldname"><a id="ggad8808432c406c456c97e1aed624bf2a7ab3fff9b7882b88e6b08b2b3090df9de1"></a>SymDiff </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">◆ </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 </td><td class="fielddoc"><p>三角形 </p>
|
||
</td></tr>
|
||
<tr><td class="fieldname"><a id="ggab584f2ea8e883f4c53ad72d8b1f4059cae9017664588010860a92ceb5f8fcb824"></a>Quad </td><td class="fielddoc"><p>四边形(Stub) </p>
|
||
</td></tr>
|
||
<tr><td class="fieldname"><a id="ggab584f2ea8e883f4c53ad72d8b1f4059ca36a04c4c21d4024e5a8cb138fc249d78"></a>Tet </td><td class="fielddoc"><p>四面体 </p>
|
||
</td></tr>
|
||
<tr><td class="fieldname"><a id="ggab584f2ea8e883f4c53ad72d8b1f4059ca92640bd72988395b326c888614f8937a"></a>Hex </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">◆ </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 </td><td class="fielddoc"><p>标准拉普拉斯光顺:v ← v + λ·L(v),快速但会收缩 </p>
|
||
</td></tr>
|
||
<tr><td class="fieldname"><a id="ggab6b25a36fe98ad9dc1a6fc3889565c35a83d3b0844a534014ccbc6102e01193f3"></a>Taubin </td><td class="fielddoc"><p>Taubin λ|μ 光顺:先正后负步交替,体积保持 </p>
|
||
</td></tr>
|
||
<tr><td class="fieldname"><a id="ggab6b25a36fe98ad9dc1a6fc3889565c35a4858637dbc3d21ddae3614fc7affff4f"></a>HCLaplacian </td><td class="fielddoc"><p>HC 拉普拉斯(Humphrey's Classes):推拉两步保持形状/体积 </p>
|
||
</td></tr>
|
||
<tr><td class="fieldname"><a id="ggab6b25a36fe98ad9dc1a6fc3889565c35ae62ecfbae0c6e1d3cb64be0e1e30a46a"></a>Bilateral </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">◆ </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< Point3D > & </td>
|
||
<td class="paramname"><em>points</em>, </td>
|
||
</tr>
|
||
<tr>
|
||
<td class="paramkey"></td>
|
||
<td></td>
|
||
<td class="paramtype">double </td>
|
||
<td class="paramname"><em>alpha</em> </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>中间值:剔除外接球半径 > α 的四面体,保留细节适中的表面</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< std::vector< Point3D >, std::vector< std::array< int, 3 > > > alpha_shapes_surface(const TetrahedronMesh &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< Point3D > &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">◆ </a></span>alpha_shapes_surface()</h2>
|
||
|
||
<div class="memitem">
|
||
<div class="memproto">
|
||
<table class="memname">
|
||
<tr>
|
||
<td class="memname">std::pair<std::vector<Point3D>, std::vector<std::array<int,3> > > vde::mesh::alpha_shapes_surface </td>
|
||
<td>(</td>
|
||
<td class="paramtype">const <a class="el" href="structvde_1_1mesh_1_1TetrahedronMesh.html">TetrahedronMesh</a> & </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">◆ </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> & </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 &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">◆ </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< Point2D > & </td>
|
||
<td class="paramname"><em>points</em>, </td>
|
||
</tr>
|
||
<tr>
|
||
<td class="paramkey"></td>
|
||
<td></td>
|
||
<td class="paramtype">const std::vector< std::pair< int, int >> & </td>
|
||
<td class="paramname"><em>constraints</em> </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< Point2D > &points, const std::vector< std::pair< int, int >> &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">◆ </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< Point2D > & </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< Point2D > &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">◆ </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< Point3D > & </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< Point3D > &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">◆ </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> & </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> </td>
|
||
<td class="paramname"><em>type</em> </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">◆ </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> & </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 > 20°(CFD 模拟要求 > 25°)</li>
|
||
<li>max_angle < 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 < 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 &mesh)</div><div class="ttdoc">评估三角网格质量</div></div>
|
||
</div><!-- fragment -->
|
||
</div>
|
||
</div>
|
||
<a id="ga6b4eec2fa0e1818ae4e0108e892d5f86"></a>
|
||
<h2 class="memtitle"><span class="permalink"><a href="#ga6b4eec2fa0e1818ae4e0108e892d5f86">◆ </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> & </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">◆ </a></span>geodesic_distance()</h2>
|
||
|
||
<div class="memitem">
|
||
<div class="memproto">
|
||
<table class="memname">
|
||
<tr>
|
||
<td class="memname">std::vector<double> vde::mesh::geodesic_distance </td>
|
||
<td>(</td>
|
||
<td class="paramtype">const <a class="el" href="classvde_1_1mesh_1_1HalfedgeMesh.html">HalfedgeMesh</a> & </td>
|
||
<td class="paramname"><em>mesh</em>, </td>
|
||
</tr>
|
||
<tr>
|
||
<td class="paramkey"></td>
|
||
<td></td>
|
||
<td class="paramtype">const std::vector< int > & </td>
|
||
<td class="paramname"><em>sources</em>, </td>
|
||
</tr>
|
||
<tr>
|
||
<td class="paramkey"></td>
|
||
<td></td>
|
||
<td class="paramtype">double </td>
|
||
<td class="paramname"><em>t</em> = <code>-1.0</code> </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>时间步长,< 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< double > geodesic_distance(const HalfedgeMesh &mesh, const std::vector< int > &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">◆ </a></span>lscm_parameterization()</h2>
|
||
|
||
<div class="memitem">
|
||
<div class="memproto">
|
||
<table class="memname">
|
||
<tr>
|
||
<td class="memname">std::vector<Point2D> vde::mesh::lscm_parameterization </td>
|
||
<td>(</td>
|
||
<td class="paramtype">const <a class="el" href="classvde_1_1mesh_1_1HalfedgeMesh.html">HalfedgeMesh</a> & </td>
|
||
<td class="paramname"><em>mesh</em></td><td>)</td>
|
||
<td></td>
|
||
</tr>
|
||
</table>
|
||
</div><div class="memdoc">
|
||
|
||
<p>LSCM(Least 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< Point2D > lscm_parameterization(const HalfedgeMesh &mesh)</div><div class="ttdoc">LSCM(Least 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">◆ </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< double(double, double, double)> & </td>
|
||
<td class="paramname"><em>f</em>, </td>
|
||
</tr>
|
||
<tr>
|
||
<td class="paramkey"></td>
|
||
<td></td>
|
||
<td class="paramtype">double </td>
|
||
<td class="paramname"><em>iso_level</em>, </td>
|
||
</tr>
|
||
<tr>
|
||
<td class="paramkey"></td>
|
||
<td></td>
|
||
<td class="paramtype">const Point3D & </td>
|
||
<td class="paramname"><em>bmin</em>, </td>
|
||
</tr>
|
||
<tr>
|
||
<td class="paramkey"></td>
|
||
<td></td>
|
||
<td class="paramtype">const Point3D & </td>
|
||
<td class="paramname"><em>bmax</em>, </td>
|
||
</tr>
|
||
<tr>
|
||
<td class="paramkey"></td>
|
||
<td></td>
|
||
<td class="paramtype">int </td>
|
||
<td class="paramname"><em>resolution</em> </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 & 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< double(double, double, double)> &f, double iso_level, const Point3D &bmin, const Point3D &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">◆ </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> & </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> & </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> </td>
|
||
<td class="paramname"><em>op</em> </td>
|
||
</tr>
|
||
<tr>
|
||
<td></td>
|
||
<td>)</td>
|
||
<td></td><td></td>
|
||
</tr>
|
||
</table>
|
||
</div><div class="memdoc">
|
||
|
||
<p>三角网格布尔运算 </p>
|
||
<p>对两个封闭三角网格执行 CSG(Constructive 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 &a, const HalfedgeMesh &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 &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">◆ </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> & </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">◆ </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> & </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">◆ </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> & </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> & </td>
|
||
<td class="paramname"><em>opts</em> = <code>{}</code> </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: 空间哈希合并间距 < 1e-8 的重复顶点</li>
|
||
<li>fix_orientation: 从最大连通分量开始遍历传播一致的半边朝向</li>
|
||
<li>remove_degenerate: 剔除面积 < ε 的退化三角形</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 &mesh, const RepairOptions &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">◆ </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 </td>
|
||
<td class="paramname"><em>x</em>, </td>
|
||
</tr>
|
||
<tr>
|
||
<td class="paramkey"></td>
|
||
<td></td>
|
||
<td class="paramtype">double </td>
|
||
<td class="paramname"><em>y</em>, </td>
|
||
</tr>
|
||
<tr>
|
||
<td class="paramkey"></td>
|
||
<td></td>
|
||
<td class="paramtype">double </td>
|
||
<td class="paramname"><em>z</em>, </td>
|
||
</tr>
|
||
<tr>
|
||
<td class="paramkey"></td>
|
||
<td></td>
|
||
<td class="paramtype">double </td>
|
||
<td class="paramname"><em>hx</em>, </td>
|
||
</tr>
|
||
<tr>
|
||
<td class="paramkey"></td>
|
||
<td></td>
|
||
<td class="paramtype">double </td>
|
||
<td class="paramname"><em>hy</em>, </td>
|
||
</tr>
|
||
<tr>
|
||
<td class="paramkey"></td>
|
||
<td></td>
|
||
<td class="paramtype">double </td>
|
||
<td class="paramname"><em>hz</em> </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">◆ </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 </td>
|
||
<td class="paramname"><em>d1</em>, </td>
|
||
</tr>
|
||
<tr>
|
||
<td class="paramkey"></td>
|
||
<td></td>
|
||
<td class="paramtype">double </td>
|
||
<td class="paramname"><em>d2</em>, </td>
|
||
</tr>
|
||
<tr>
|
||
<td class="paramkey"></td>
|
||
<td></td>
|
||
<td class="paramtype">double </td>
|
||
<td class="paramname"><em>k</em> </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>平滑宽度(> 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">◆ </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 </td>
|
||
<td class="paramname"><em>x</em>, </td>
|
||
</tr>
|
||
<tr>
|
||
<td class="paramkey"></td>
|
||
<td></td>
|
||
<td class="paramtype">double </td>
|
||
<td class="paramname"><em>y</em>, </td>
|
||
</tr>
|
||
<tr>
|
||
<td class="paramkey"></td>
|
||
<td></td>
|
||
<td class="paramtype">double </td>
|
||
<td class="paramname"><em>z</em>, </td>
|
||
</tr>
|
||
<tr>
|
||
<td class="paramkey"></td>
|
||
<td></td>
|
||
<td class="paramtype">double </td>
|
||
<td class="paramname"><em>cx</em>, </td>
|
||
</tr>
|
||
<tr>
|
||
<td class="paramkey"></td>
|
||
<td></td>
|
||
<td class="paramtype">double </td>
|
||
<td class="paramname"><em>cy</em>, </td>
|
||
</tr>
|
||
<tr>
|
||
<td class="paramkey"></td>
|
||
<td></td>
|
||
<td class="paramtype">double </td>
|
||
<td class="paramname"><em>cz</em>, </td>
|
||
</tr>
|
||
<tr>
|
||
<td class="paramkey"></td>
|
||
<td></td>
|
||
<td class="paramtype">double </td>
|
||
<td class="paramname"><em>r</em> </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>有符号距离:内部 < 0,表面 = 0,外部 > 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">◆ </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> & </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> & </td>
|
||
<td class="paramname"><em>opts</em> = <code>{}</code> </td>
|
||
</tr>
|
||
<tr>
|
||
<td></td>
|
||
<td>)</td>
|
||
<td></td><td></td>
|
||
</tr>
|
||
</table>
|
||
</div><div class="memdoc">
|
||
|
||
<p>QEM(Quadric Error Metrics)网格简化 </p>
|
||
<p>基于 Garland & 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 &mesh, const SimplifyOptions &opts={})</div><div class="ttdoc">QEM(Quadric Error Metrics)网格简化</div></div>
|
||
</div><!-- fragment --> </dd></dl>
|
||
|
||
</div>
|
||
</div>
|
||
<a id="ga74a01dbb67d7fe37fddfd0d62d71e111"></a>
|
||
<h2 class="memtitle"><span class="permalink"><a href="#ga74a01dbb67d7fe37fddfd0d62d71e111">◆ </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> & </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> & </td>
|
||
<td class="paramname"><em>opts</em> = <code>{}</code> </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">◆ </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> & </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> & </td>
|
||
<td class="paramname"><em>opts</em> = <code>{}</code> </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">◆ </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> & </td>
|
||
<td class="paramname"><em>mesh</em>, </td>
|
||
</tr>
|
||
<tr>
|
||
<td class="paramkey"></td>
|
||
<td></td>
|
||
<td class="paramtype">int </td>
|
||
<td class="paramname"><em>iterations</em>, </td>
|
||
</tr>
|
||
<tr>
|
||
<td class="paramkey"></td>
|
||
<td></td>
|
||
<td class="paramtype">double </td>
|
||
<td class="paramname"><em>lambda</em> </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's Classes)">smooth_hc_laplacian</a> </dd></dl>
|
||
|
||
</div>
|
||
</div>
|
||
<a id="ga98a34525afcacc2ee0a2fed755531f87"></a>
|
||
<h2 class="memtitle"><span class="permalink"><a href="#ga98a34525afcacc2ee0a2fed755531f87">◆ </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> & </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> & </td>
|
||
<td class="paramname"><em>opts</em> = <code>{}</code> </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'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 &mesh, const SmoothOptions &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">◆ </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> & </td>
|
||
<td class="paramname"><em>mesh</em>, </td>
|
||
</tr>
|
||
<tr>
|
||
<td class="paramkey"></td>
|
||
<td></td>
|
||
<td class="paramtype">int </td>
|
||
<td class="paramname"><em>iterations</em>, </td>
|
||
</tr>
|
||
<tr>
|
||
<td class="paramkey"></td>
|
||
<td></td>
|
||
<td class="paramtype">double </td>
|
||
<td class="paramname"><em>lambda</em>, </td>
|
||
</tr>
|
||
<tr>
|
||
<td class="paramkey"></td>
|
||
<td></td>
|
||
<td class="paramtype">double </td>
|
||
<td class="paramname"><em>mu</em> </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),其中 μ < 0 且 |μ| > |λ|</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 < 0 且 |mu| > 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">◆ </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 & </td>
|
||
<td class="paramname"><em>a</em>, </td>
|
||
</tr>
|
||
<tr>
|
||
<td class="paramkey"></td>
|
||
<td></td>
|
||
<td class="paramtype">const Point3D & </td>
|
||
<td class="paramname"><em>b</em>, </td>
|
||
</tr>
|
||
<tr>
|
||
<td class="paramkey"></td>
|
||
<td></td>
|
||
<td class="paramtype">const Point3D & </td>
|
||
<td class="paramname"><em>c</em>, </td>
|
||
</tr>
|
||
<tr>
|
||
<td class="paramkey"></td>
|
||
<td></td>
|
||
<td class="paramtype">const Point3D & </td>
|
||
<td class="paramname"><em>d</em> </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">◆ </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 & </td>
|
||
<td class="paramname"><em>a</em>, </td>
|
||
</tr>
|
||
<tr>
|
||
<td class="paramkey"></td>
|
||
<td></td>
|
||
<td class="paramtype">const Point3D & </td>
|
||
<td class="paramname"><em>b</em>, </td>
|
||
</tr>
|
||
<tr>
|
||
<td class="paramkey"></td>
|
||
<td></td>
|
||
<td class="paramtype">const Point3D & </td>
|
||
<td class="paramname"><em>c</em> </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">◆ </a></span>tutte_parameterization()</h2>
|
||
|
||
<div class="memitem">
|
||
<div class="memproto">
|
||
<table class="memname">
|
||
<tr>
|
||
<td class="memname">std::vector<Point2D> vde::mesh::tutte_parameterization </td>
|
||
<td>(</td>
|
||
<td class="paramtype">const <a class="el" href="classvde_1_1mesh_1_1HalfedgeMesh.html">HalfedgeMesh</a> & </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< Point2D > tutte_parameterization(const HalfedgeMesh &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="LSCM(Least 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>
|