1351 lines
80 KiB
HTML
1351 lines
80 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: 核心几何模块</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__core.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="#typedef-members">类型定义</a> |
|
||
<a href="#func-members">函数</a> </div>
|
||
<div class="headertitle">
|
||
<div class="title">核心几何模块</div> </div>
|
||
</div><!--header-->
|
||
<div class="contents">
|
||
|
||
<p>点/向量/变换、多边形、凸包、Voronoi、ICP、距离计算
|
||
<a href="#details">更多...</a></p>
|
||
<table class="memberdecls">
|
||
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
|
||
类</h2></td></tr>
|
||
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classvde_1_1core_1_1AABB.html">vde::core::AABB< T ></a></td></tr>
|
||
<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">轴对齐包围盒(AABB) <a href="classvde_1_1core_1_1AABB.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_1core_1_1ICPResult.html">vde::core::ICPResult</a></td></tr>
|
||
<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">ICP(迭代最近点)配准结果 <a href="structvde_1_1core_1_1ICPResult.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_1core_1_1Line3D.html">vde::core::Line3D< T ></a></td></tr>
|
||
<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">三维无限直线 <a href="classvde_1_1core_1_1Line3D.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_1core_1_1Segment3D.html">vde::core::Segment3D< T ></a></td></tr>
|
||
<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">三维线段 <a href="classvde_1_1core_1_1Segment3D.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_1core_1_1Ray3D.html">vde::core::Ray3D< T ></a></td></tr>
|
||
<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">三维射线 <a href="classvde_1_1core_1_1Ray3D.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_1core_1_1Plane.html">vde::core::Plane< T ></a></td></tr>
|
||
<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">三维平面 <a href="classvde_1_1core_1_1Plane.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_1core_1_1Polygon2D.html">vde::core::Polygon2D</a></td></tr>
|
||
<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">二维平面多边形 <a href="classvde_1_1core_1_1Polygon2D.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_1core_1_1Triangle.html">vde::core::Triangle< T ></a></td></tr>
|
||
<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">三维三角形 <a href="classvde_1_1core_1_1Triangle.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_1core_1_1VoronoiCell.html">vde::core::VoronoiCell</a></td></tr>
|
||
<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Voronoi 单元格 <a href="structvde_1_1core_1_1VoronoiCell.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="typedef-members"></a>
|
||
类型定义</h2></td></tr>
|
||
<tr class="memitem:ga1d6b7ffb62cc56245fac3b5939f0df80"><td class="memItemLeft" align="right" valign="top">using </td><td class="memItemRight" valign="bottom"><a class="el" href="group__core.html#ga1d6b7ffb62cc56245fac3b5939f0df80">vde::core::Transform3D</a> = Eigen::Transform< double, 3, Eigen::Affine ></td></tr>
|
||
<tr class="memdesc:ga1d6b7ffb62cc56245fac3b5939f0df80"><td class="mdescLeft"> </td><td class="mdescRight">三维仿射变换类型 <a href="group__core.html#ga1d6b7ffb62cc56245fac3b5939f0df80">更多...</a><br /></td></tr>
|
||
<tr class="separator:ga1d6b7ffb62cc56245fac3b5939f0df80"><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:gaacb80a198879458b0a6e48a9e5a47da2"><td class="memItemLeft" align="right" valign="top">std::vector< <a class="el" href="namespacevde_1_1core.html#a78483c599a40e4f333418667a77e3862">Point2D</a> > </td><td class="memItemRight" valign="bottom"><a class="el" href="group__core.html#gaacb80a198879458b0a6e48a9e5a47da2">vde::core::convex_hull_2d</a> (const std::vector< <a class="el" href="namespacevde_1_1core.html#a78483c599a40e4f333418667a77e3862">Point2D</a> > &points)</td></tr>
|
||
<tr class="memdesc:gaacb80a198879458b0a6e48a9e5a47da2"><td class="mdescLeft"> </td><td class="mdescRight">二维凸包计算(Graham Scan 算法) <a href="group__core.html#gaacb80a198879458b0a6e48a9e5a47da2">更多...</a><br /></td></tr>
|
||
<tr class="separator:gaacb80a198879458b0a6e48a9e5a47da2"><td class="memSeparator" colspan="2"> </td></tr>
|
||
<tr class="memitem:ga4b65dcd970fc3b5de01d5506e326bf46"><td class="memItemLeft" align="right" valign="top">std::vector< std::array< <a class="el" href="namespacevde_1_1core.html#ac6aed70c4b90d13f10217267cd7a1952">Point3D</a>, 3 > > </td><td class="memItemRight" valign="bottom"><a class="el" href="group__core.html#ga4b65dcd970fc3b5de01d5506e326bf46">vde::core::convex_hull_3d</a> (const std::vector< <a class="el" href="namespacevde_1_1core.html#ac6aed70c4b90d13f10217267cd7a1952">Point3D</a> > &points)</td></tr>
|
||
<tr class="memdesc:ga4b65dcd970fc3b5de01d5506e326bf46"><td class="mdescLeft"> </td><td class="mdescRight">三维凸包计算(QuickHull 算法) <a href="group__core.html#ga4b65dcd970fc3b5de01d5506e326bf46">更多...</a><br /></td></tr>
|
||
<tr class="separator:ga4b65dcd970fc3b5de01d5506e326bf46"><td class="memSeparator" colspan="2"> </td></tr>
|
||
<tr class="memitem:ga8378489b455ccc35eb29dcb1a874bbd0"><td class="memItemLeft" align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="group__core.html#ga8378489b455ccc35eb29dcb1a874bbd0">vde::core::distance</a> (const <a class="el" href="namespacevde_1_1core.html#ac6aed70c4b90d13f10217267cd7a1952">Point3D</a> &a, const <a class="el" href="namespacevde_1_1core.html#ac6aed70c4b90d13f10217267cd7a1952">Point3D</a> &b)</td></tr>
|
||
<tr class="memdesc:ga8378489b455ccc35eb29dcb1a874bbd0"><td class="mdescLeft"> </td><td class="mdescRight">两点之间的欧氏距离 <a href="group__core.html#ga8378489b455ccc35eb29dcb1a874bbd0">更多...</a><br /></td></tr>
|
||
<tr class="separator:ga8378489b455ccc35eb29dcb1a874bbd0"><td class="memSeparator" colspan="2"> </td></tr>
|
||
<tr class="memitem:ga1bd9e26be7d281523753d2681837b92e"><td class="memItemLeft" align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="group__core.html#ga1bd9e26be7d281523753d2681837b92e">vde::core::distance</a> (const <a class="el" href="namespacevde_1_1core.html#ac6aed70c4b90d13f10217267cd7a1952">Point3D</a> &p, const <a class="el" href="classvde_1_1core_1_1Line3D.html">Line3D</a>< double > &line)</td></tr>
|
||
<tr class="memdesc:ga1bd9e26be7d281523753d2681837b92e"><td class="mdescLeft"> </td><td class="mdescRight">点到直线的距离 <a href="group__core.html#ga1bd9e26be7d281523753d2681837b92e">更多...</a><br /></td></tr>
|
||
<tr class="separator:ga1bd9e26be7d281523753d2681837b92e"><td class="memSeparator" colspan="2"> </td></tr>
|
||
<tr class="memitem:ga7468571f81e61ca34a4b34f16b33dfab"><td class="memItemLeft" align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="group__core.html#ga7468571f81e61ca34a4b34f16b33dfab">vde::core::distance</a> (const <a class="el" href="namespacevde_1_1core.html#ac6aed70c4b90d13f10217267cd7a1952">Point3D</a> &p, const <a class="el" href="classvde_1_1core_1_1Segment3D.html">Segment3D</a>< double > &seg)</td></tr>
|
||
<tr class="memdesc:ga7468571f81e61ca34a4b34f16b33dfab"><td class="mdescLeft"> </td><td class="mdescRight">点到线段的距离 <a href="group__core.html#ga7468571f81e61ca34a4b34f16b33dfab">更多...</a><br /></td></tr>
|
||
<tr class="separator:ga7468571f81e61ca34a4b34f16b33dfab"><td class="memSeparator" colspan="2"> </td></tr>
|
||
<tr class="memitem:ga4a05820313877ebc46d972465a448e52"><td class="memItemLeft" align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="group__core.html#ga4a05820313877ebc46d972465a448e52">vde::core::distance</a> (const <a class="el" href="namespacevde_1_1core.html#ac6aed70c4b90d13f10217267cd7a1952">Point3D</a> &p, const <a class="el" href="classvde_1_1core_1_1Plane.html">Plane</a>< double > &plane)</td></tr>
|
||
<tr class="memdesc:ga4a05820313877ebc46d972465a448e52"><td class="mdescLeft"> </td><td class="mdescRight">点到平面的距离 <a href="group__core.html#ga4a05820313877ebc46d972465a448e52">更多...</a><br /></td></tr>
|
||
<tr class="separator:ga4a05820313877ebc46d972465a448e52"><td class="memSeparator" colspan="2"> </td></tr>
|
||
<tr class="memitem:ga60c1aaba85c90f7e0f1090a3a8fff099"><td class="memItemLeft" align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="group__core.html#ga60c1aaba85c90f7e0f1090a3a8fff099">vde::core::distance</a> (const <a class="el" href="namespacevde_1_1core.html#ac6aed70c4b90d13f10217267cd7a1952">Point3D</a> &p, const <a class="el" href="classvde_1_1core_1_1Triangle.html">Triangle</a>< double > &tri)</td></tr>
|
||
<tr class="memdesc:ga60c1aaba85c90f7e0f1090a3a8fff099"><td class="mdescLeft"> </td><td class="mdescRight">点到三角形的距离 <a href="group__core.html#ga60c1aaba85c90f7e0f1090a3a8fff099">更多...</a><br /></td></tr>
|
||
<tr class="separator:ga60c1aaba85c90f7e0f1090a3a8fff099"><td class="memSeparator" colspan="2"> </td></tr>
|
||
<tr class="memitem:ga47add037521cc2500a05b3630ade36f4"><td class="memItemLeft" align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="group__core.html#ga47add037521cc2500a05b3630ade36f4">vde::core::distance</a> (const <a class="el" href="namespacevde_1_1core.html#ac6aed70c4b90d13f10217267cd7a1952">Point3D</a> &p, const <a class="el" href="classvde_1_1core_1_1AABB.html">AABB</a>< double > &box)</td></tr>
|
||
<tr class="memdesc:ga47add037521cc2500a05b3630ade36f4"><td class="mdescLeft"> </td><td class="mdescRight">点到包围盒的距离 <a href="group__core.html#ga47add037521cc2500a05b3630ade36f4">更多...</a><br /></td></tr>
|
||
<tr class="separator:ga47add037521cc2500a05b3630ade36f4"><td class="memSeparator" colspan="2"> </td></tr>
|
||
<tr class="memitem:ga1d6b1a31af4a149f94e89235d4159f06"><td class="memItemLeft" align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="group__core.html#ga1d6b1a31af4a149f94e89235d4159f06">vde::core::distance</a> (const <a class="el" href="classvde_1_1core_1_1Segment3D.html">Segment3D</a>< double > &a, const <a class="el" href="classvde_1_1core_1_1Segment3D.html">Segment3D</a>< double > &b)</td></tr>
|
||
<tr class="memdesc:ga1d6b1a31af4a149f94e89235d4159f06"><td class="mdescLeft"> </td><td class="mdescRight">两条线段之间的最短距离 <a href="group__core.html#ga1d6b1a31af4a149f94e89235d4159f06">更多...</a><br /></td></tr>
|
||
<tr class="separator:ga1d6b1a31af4a149f94e89235d4159f06"><td class="memSeparator" colspan="2"> </td></tr>
|
||
<tr class="memitem:ga0f6b23d8527e9527668af106edd4c188"><td class="memItemLeft" align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="group__core.html#ga0f6b23d8527e9527668af106edd4c188">vde::core::distance</a> (const <a class="el" href="classvde_1_1core_1_1Line3D.html">Line3D</a>< double > &a, const <a class="el" href="classvde_1_1core_1_1Line3D.html">Line3D</a>< double > &b)</td></tr>
|
||
<tr class="memdesc:ga0f6b23d8527e9527668af106edd4c188"><td class="mdescLeft"> </td><td class="mdescRight">两条直线之间的最短距离 <a href="group__core.html#ga0f6b23d8527e9527668af106edd4c188">更多...</a><br /></td></tr>
|
||
<tr class="separator:ga0f6b23d8527e9527668af106edd4c188"><td class="memSeparator" colspan="2"> </td></tr>
|
||
<tr class="memitem:ga813b7b5d20316f958b43b4c5a58a4883"><td class="memItemLeft" align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="group__core.html#ga813b7b5d20316f958b43b4c5a58a4883">vde::core::distance</a> (const <a class="el" href="classvde_1_1core_1_1AABB.html">AABB</a>< double > &a, const <a class="el" href="classvde_1_1core_1_1AABB.html">AABB</a>< double > &b)</td></tr>
|
||
<tr class="memdesc:ga813b7b5d20316f958b43b4c5a58a4883"><td class="mdescLeft"> </td><td class="mdescRight">两个包围盒之间的最短距离 <a href="group__core.html#ga813b7b5d20316f958b43b4c5a58a4883">更多...</a><br /></td></tr>
|
||
<tr class="separator:ga813b7b5d20316f958b43b4c5a58a4883"><td class="memSeparator" colspan="2"> </td></tr>
|
||
<tr class="memitem:gaa22348c98076275fa470fb309c495b07"><td class="memItemLeft" align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="group__core.html#gaa22348c98076275fa470fb309c495b07">vde::core::distance</a> (const <a class="el" href="classvde_1_1core_1_1Triangle.html">Triangle</a>< double > &a, const <a class="el" href="classvde_1_1core_1_1Triangle.html">Triangle</a>< double > &b)</td></tr>
|
||
<tr class="memdesc:gaa22348c98076275fa470fb309c495b07"><td class="mdescLeft"> </td><td class="mdescRight">两个三角形之间的最短距离 <a href="group__core.html#gaa22348c98076275fa470fb309c495b07">更多...</a><br /></td></tr>
|
||
<tr class="separator:gaa22348c98076275fa470fb309c495b07"><td class="memSeparator" colspan="2"> </td></tr>
|
||
<tr class="memitem:gadb95bcdf9ce6420abfd95eee4d465bde"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacevde_1_1core.html#ac6aed70c4b90d13f10217267cd7a1952">Point3D</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__core.html#gadb95bcdf9ce6420abfd95eee4d465bde">vde::core::closest_point</a> (const <a class="el" href="namespacevde_1_1core.html#ac6aed70c4b90d13f10217267cd7a1952">Point3D</a> &p, const <a class="el" href="classvde_1_1core_1_1Triangle.html">Triangle</a>< double > &tri)</td></tr>
|
||
<tr class="memdesc:gadb95bcdf9ce6420abfd95eee4d465bde"><td class="mdescLeft"> </td><td class="mdescRight">三角形上距给定点最近的点 <a href="group__core.html#gadb95bcdf9ce6420abfd95eee4d465bde">更多...</a><br /></td></tr>
|
||
<tr class="separator:gadb95bcdf9ce6420abfd95eee4d465bde"><td class="memSeparator" colspan="2"> </td></tr>
|
||
<tr class="memitem:ga1a7cb315df51ac922d9e9d207950ec43"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacevde_1_1core.html#ac6aed70c4b90d13f10217267cd7a1952">Point3D</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__core.html#ga1a7cb315df51ac922d9e9d207950ec43">vde::core::closest_point</a> (const <a class="el" href="namespacevde_1_1core.html#ac6aed70c4b90d13f10217267cd7a1952">Point3D</a> &p, const <a class="el" href="classvde_1_1core_1_1Segment3D.html">Segment3D</a>< double > &seg)</td></tr>
|
||
<tr class="memdesc:ga1a7cb315df51ac922d9e9d207950ec43"><td class="mdescLeft"> </td><td class="mdescRight">线段上距给定点最近的点 <a href="group__core.html#ga1a7cb315df51ac922d9e9d207950ec43">更多...</a><br /></td></tr>
|
||
<tr class="separator:ga1a7cb315df51ac922d9e9d207950ec43"><td class="memSeparator" colspan="2"> </td></tr>
|
||
<tr class="memitem:gad6bb2e0732fc636a0e157af3646e53bc"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacevde_1_1core.html#ac6aed70c4b90d13f10217267cd7a1952">Point3D</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__core.html#gad6bb2e0732fc636a0e157af3646e53bc">vde::core::closest_point</a> (const <a class="el" href="namespacevde_1_1core.html#ac6aed70c4b90d13f10217267cd7a1952">Point3D</a> &p, const <a class="el" href="classvde_1_1core_1_1AABB.html">AABB</a>< double > &box)</td></tr>
|
||
<tr class="memdesc:gad6bb2e0732fc636a0e157af3646e53bc"><td class="mdescLeft"> </td><td class="mdescRight">包围盒上距给定点最近的点 <a href="group__core.html#gad6bb2e0732fc636a0e157af3646e53bc">更多...</a><br /></td></tr>
|
||
<tr class="separator:gad6bb2e0732fc636a0e157af3646e53bc"><td class="memSeparator" colspan="2"> </td></tr>
|
||
<tr class="memitem:ga9ba9a9d242d667d9a257ca5b4bfbaff1"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacevde_1_1core.html#ac6aed70c4b90d13f10217267cd7a1952">Point3D</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__core.html#ga9ba9a9d242d667d9a257ca5b4bfbaff1">vde::core::closest_point</a> (const <a class="el" href="namespacevde_1_1core.html#ac6aed70c4b90d13f10217267cd7a1952">Point3D</a> &p, const <a class="el" href="classvde_1_1core_1_1Plane.html">Plane</a>< double > &plane)</td></tr>
|
||
<tr class="memdesc:ga9ba9a9d242d667d9a257ca5b4bfbaff1"><td class="mdescLeft"> </td><td class="mdescRight">平面上距给定点最近的点(正交投影) <a href="group__core.html#ga9ba9a9d242d667d9a257ca5b4bfbaff1">更多...</a><br /></td></tr>
|
||
<tr class="separator:ga9ba9a9d242d667d9a257ca5b4bfbaff1"><td class="memSeparator" colspan="2"> </td></tr>
|
||
<tr class="memitem:gabaf3dea80baf0c0ef81e5de25841e8e0"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structvde_1_1core_1_1ICPResult.html">ICPResult</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__core.html#gabaf3dea80baf0c0ef81e5de25841e8e0">vde::core::icp_register</a> (const std::vector< <a class="el" href="namespacevde_1_1core.html#ac6aed70c4b90d13f10217267cd7a1952">Point3D</a> > &source, const std::vector< <a class="el" href="namespacevde_1_1core.html#ac6aed70c4b90d13f10217267cd7a1952">Point3D</a> > &target, int max_iter=50, double tolerance=1e-6)</td></tr>
|
||
<tr class="memdesc:gabaf3dea80baf0c0ef81e5de25841e8e0"><td class="mdescLeft"> </td><td class="mdescRight">迭代最近点(ICP)刚体点云配准 <a href="group__core.html#gabaf3dea80baf0c0ef81e5de25841e8e0">更多...</a><br /></td></tr>
|
||
<tr class="separator:gabaf3dea80baf0c0ef81e5de25841e8e0"><td class="memSeparator" colspan="2"> </td></tr>
|
||
<tr class="memitem:gac8fbd42a8dac9187eef97b9a393f948b"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__core.html#ga1d6b7ffb62cc56245fac3b5939f0df80">Transform3D</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__core.html#gac8fbd42a8dac9187eef97b9a393f948b">vde::core::translate</a> (const <a class="el" href="namespacevde_1_1core.html#ab763c018d19e10e91a6c6d6ab2ccc8e0">Vector3D</a> &v)</td></tr>
|
||
<tr class="memdesc:gac8fbd42a8dac9187eef97b9a393f948b"><td class="mdescLeft"> </td><td class="mdescRight">创建平移变换 <a href="group__core.html#gac8fbd42a8dac9187eef97b9a393f948b">更多...</a><br /></td></tr>
|
||
<tr class="separator:gac8fbd42a8dac9187eef97b9a393f948b"><td class="memSeparator" colspan="2"> </td></tr>
|
||
<tr class="memitem:ga938b1dfb9688f3b94b88a219c0e69aec"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__core.html#ga1d6b7ffb62cc56245fac3b5939f0df80">Transform3D</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__core.html#ga938b1dfb9688f3b94b88a219c0e69aec">vde::core::translate</a> (double x, double y, double z)</td></tr>
|
||
<tr class="memdesc:ga938b1dfb9688f3b94b88a219c0e69aec"><td class="mdescLeft"> </td><td class="mdescRight">创建平移变换(分量形式) <a href="group__core.html#ga938b1dfb9688f3b94b88a219c0e69aec">更多...</a><br /></td></tr>
|
||
<tr class="separator:ga938b1dfb9688f3b94b88a219c0e69aec"><td class="memSeparator" colspan="2"> </td></tr>
|
||
<tr class="memitem:gaa8821904ace09771bb66a626ecbdb3fb"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__core.html#ga1d6b7ffb62cc56245fac3b5939f0df80">Transform3D</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__core.html#gaa8821904ace09771bb66a626ecbdb3fb">vde::core::rotate</a> (const <a class="el" href="namespacevde_1_1core.html#ab763c018d19e10e91a6c6d6ab2ccc8e0">Vector3D</a> &axis, double angle_rad)</td></tr>
|
||
<tr class="memdesc:gaa8821904ace09771bb66a626ecbdb3fb"><td class="mdescLeft"> </td><td class="mdescRight">创建旋转变换(轴-角表示) <a href="group__core.html#gaa8821904ace09771bb66a626ecbdb3fb">更多...</a><br /></td></tr>
|
||
<tr class="separator:gaa8821904ace09771bb66a626ecbdb3fb"><td class="memSeparator" colspan="2"> </td></tr>
|
||
<tr class="memitem:ga81af7f4bc18bd5159a2f10d661af320f"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__core.html#ga1d6b7ffb62cc56245fac3b5939f0df80">Transform3D</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__core.html#ga81af7f4bc18bd5159a2f10d661af320f">vde::core::rotate_x</a> (double rad)</td></tr>
|
||
<tr class="memdesc:ga81af7f4bc18bd5159a2f10d661af320f"><td class="mdescLeft"> </td><td class="mdescRight">绕 X 轴旋转 <a href="group__core.html#ga81af7f4bc18bd5159a2f10d661af320f">更多...</a><br /></td></tr>
|
||
<tr class="separator:ga81af7f4bc18bd5159a2f10d661af320f"><td class="memSeparator" colspan="2"> </td></tr>
|
||
<tr class="memitem:gae14e5be60107581d9b2af2fb2b43e711"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__core.html#ga1d6b7ffb62cc56245fac3b5939f0df80">Transform3D</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__core.html#gae14e5be60107581d9b2af2fb2b43e711">vde::core::rotate_y</a> (double rad)</td></tr>
|
||
<tr class="memdesc:gae14e5be60107581d9b2af2fb2b43e711"><td class="mdescLeft"> </td><td class="mdescRight">绕 Y 轴旋转 <a href="group__core.html#gae14e5be60107581d9b2af2fb2b43e711">更多...</a><br /></td></tr>
|
||
<tr class="separator:gae14e5be60107581d9b2af2fb2b43e711"><td class="memSeparator" colspan="2"> </td></tr>
|
||
<tr class="memitem:gaf0b49b7358d2c526619437815b90ff63"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__core.html#ga1d6b7ffb62cc56245fac3b5939f0df80">Transform3D</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__core.html#gaf0b49b7358d2c526619437815b90ff63">vde::core::rotate_z</a> (double rad)</td></tr>
|
||
<tr class="memdesc:gaf0b49b7358d2c526619437815b90ff63"><td class="mdescLeft"> </td><td class="mdescRight">绕 Z 轴旋转 <a href="group__core.html#gaf0b49b7358d2c526619437815b90ff63">更多...</a><br /></td></tr>
|
||
<tr class="separator:gaf0b49b7358d2c526619437815b90ff63"><td class="memSeparator" colspan="2"> </td></tr>
|
||
<tr class="memitem:ga30c7a100ec4944f281dbcd6151a54670"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__core.html#ga1d6b7ffb62cc56245fac3b5939f0df80">Transform3D</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__core.html#ga30c7a100ec4944f281dbcd6151a54670">vde::core::scale</a> (double sx, double sy, double sz)</td></tr>
|
||
<tr class="memdesc:ga30c7a100ec4944f281dbcd6151a54670"><td class="mdescLeft"> </td><td class="mdescRight">创建非均匀缩放变换 <a href="group__core.html#ga30c7a100ec4944f281dbcd6151a54670">更多...</a><br /></td></tr>
|
||
<tr class="separator:ga30c7a100ec4944f281dbcd6151a54670"><td class="memSeparator" colspan="2"> </td></tr>
|
||
<tr class="memitem:ga32b760d38ec52a155d40947b1293b526"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__core.html#ga1d6b7ffb62cc56245fac3b5939f0df80">Transform3D</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__core.html#ga32b760d38ec52a155d40947b1293b526">vde::core::scale</a> (double s)</td></tr>
|
||
<tr class="memdesc:ga32b760d38ec52a155d40947b1293b526"><td class="mdescLeft"> </td><td class="mdescRight">创建均匀缩放变换 <a href="group__core.html#ga32b760d38ec52a155d40947b1293b526">更多...</a><br /></td></tr>
|
||
<tr class="separator:ga32b760d38ec52a155d40947b1293b526"><td class="memSeparator" colspan="2"> </td></tr>
|
||
<tr class="memitem:gaeae68fe001afb374771a43ec52baa2fb"><td class="memItemLeft" align="right" valign="top">std::vector< <a class="el" href="structvde_1_1core_1_1VoronoiCell.html">VoronoiCell</a> > </td><td class="memItemRight" valign="bottom"><a class="el" href="group__core.html#gaeae68fe001afb374771a43ec52baa2fb">vde::core::voronoi_2d</a> (const std::vector< <a class="el" href="namespacevde_1_1core.html#a78483c599a40e4f333418667a77e3862">Point2D</a> > &points)</td></tr>
|
||
<tr class="memdesc:gaeae68fe001afb374771a43ec52baa2fb"><td class="mdescLeft"> </td><td class="mdescRight">二维 Voronoi 图生成(通过 Delaunay 对偶图) <a href="group__core.html#gaeae68fe001afb374771a43ec52baa2fb">更多...</a><br /></td></tr>
|
||
<tr class="separator:gaeae68fe001afb374771a43ec52baa2fb"><td class="memSeparator" colspan="2"> </td></tr>
|
||
</table>
|
||
<a name="details" id="details"></a><h2 class="groupheader">详细描述</h2>
|
||
<p>点/向量/变换、多边形、凸包、Voronoi、ICP、距离计算 </p>
|
||
<p>核心模块提供 VDE 引擎的几何操作 API:</p><ul>
|
||
<li>基础几何体(AABB、直线、射线、线段、平面、三角形、多边形)</li>
|
||
<li>几何计算(距离、最近点、凸包、变换)</li>
|
||
<li>点云配准(ICP)</li>
|
||
<li>Voronoi 图 </li>
|
||
</ul>
|
||
<h2 class="groupheader">类型定义说明</h2>
|
||
<a id="ga1d6b7ffb62cc56245fac3b5939f0df80"></a>
|
||
<h2 class="memtitle"><span class="permalink"><a href="#ga1d6b7ffb62cc56245fac3b5939f0df80">◆ </a></span>Transform3D</h2>
|
||
|
||
<div class="memitem">
|
||
<div class="memproto">
|
||
<table class="memname">
|
||
<tr>
|
||
<td class="memname">using <a class="el" href="group__core.html#ga1d6b7ffb62cc56245fac3b5939f0df80">vde::core::Transform3D</a> = typedef Eigen::Transform<double, 3, Eigen::Affine></td>
|
||
</tr>
|
||
</table>
|
||
</div><div class="memdoc">
|
||
|
||
<p>三维仿射变换类型 </p>
|
||
<p>基于 Eigen::Transform,支持平移、旋转、缩放和它们的组合。 使用 4×4 齐次矩阵表示。 </p>
|
||
|
||
<p class="definition">在文件 <a class="el" href="transform_8h_source.html">transform.h</a> 第 <a class="el" href="transform_8h_source.html#l00015">15</a> 行定义.</p>
|
||
|
||
</div>
|
||
</div>
|
||
<h2 class="groupheader">函数说明</h2>
|
||
<a id="gad6bb2e0732fc636a0e157af3646e53bc"></a>
|
||
<h2 class="memtitle"><span class="permalink"><a href="#gad6bb2e0732fc636a0e157af3646e53bc">◆ </a></span>closest_point() <span class="overload">[1/4]</span></h2>
|
||
|
||
<div class="memitem">
|
||
<div class="memproto">
|
||
<table class="memname">
|
||
<tr>
|
||
<td class="memname"><a class="el" href="namespacevde_1_1core.html#ac6aed70c4b90d13f10217267cd7a1952">Point3D</a> vde::core::closest_point </td>
|
||
<td>(</td>
|
||
<td class="paramtype">const <a class="el" href="namespacevde_1_1core.html#ac6aed70c4b90d13f10217267cd7a1952">Point3D</a> & </td>
|
||
<td class="paramname"><em>p</em>, </td>
|
||
</tr>
|
||
<tr>
|
||
<td class="paramkey"></td>
|
||
<td></td>
|
||
<td class="paramtype">const <a class="el" href="classvde_1_1core_1_1AABB.html">AABB</a>< double > & </td>
|
||
<td class="paramname"><em>box</em> </td>
|
||
</tr>
|
||
<tr>
|
||
<td></td>
|
||
<td>)</td>
|
||
<td></td><td></td>
|
||
</tr>
|
||
</table>
|
||
</div><div class="memdoc">
|
||
|
||
<p>包围盒上距给定点最近的点 </p>
|
||
<p>对每个坐标分量做 clamp 到 [min, max]。</p>
|
||
<dl class="params"><dt>参数</dt><dd>
|
||
<table class="params">
|
||
<tr><td class="paramname">p</td><td>查询点 </td></tr>
|
||
<tr><td class="paramname">box</td><td>包围盒 </td></tr>
|
||
</table>
|
||
</dd>
|
||
</dl>
|
||
<dl class="section return"><dt>返回</dt><dd>包围盒边界上(或内部)距离 p 最近的点 </dd></dl>
|
||
|
||
</div>
|
||
</div>
|
||
<a id="ga9ba9a9d242d667d9a257ca5b4bfbaff1"></a>
|
||
<h2 class="memtitle"><span class="permalink"><a href="#ga9ba9a9d242d667d9a257ca5b4bfbaff1">◆ </a></span>closest_point() <span class="overload">[2/4]</span></h2>
|
||
|
||
<div class="memitem">
|
||
<div class="memproto">
|
||
<table class="memname">
|
||
<tr>
|
||
<td class="memname"><a class="el" href="namespacevde_1_1core.html#ac6aed70c4b90d13f10217267cd7a1952">Point3D</a> vde::core::closest_point </td>
|
||
<td>(</td>
|
||
<td class="paramtype">const <a class="el" href="namespacevde_1_1core.html#ac6aed70c4b90d13f10217267cd7a1952">Point3D</a> & </td>
|
||
<td class="paramname"><em>p</em>, </td>
|
||
</tr>
|
||
<tr>
|
||
<td class="paramkey"></td>
|
||
<td></td>
|
||
<td class="paramtype">const <a class="el" href="classvde_1_1core_1_1Plane.html">Plane</a>< double > & </td>
|
||
<td class="paramname"><em>plane</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">p</td><td>查询点 </td></tr>
|
||
<tr><td class="paramname">plane</td><td>平面 </td></tr>
|
||
</table>
|
||
</dd>
|
||
</dl>
|
||
<dl class="section return"><dt>返回</dt><dd>点 p 在平面上的正交投影</dd></dl>
|
||
<dl class="section see"><dt>参见</dt><dd><a class="el" href="classvde_1_1core_1_1Plane.html#a55f1e4e3b11fbe2f70a95ba0700f3e07" title="点在平面上的正交投影">Plane::project</a> </dd></dl>
|
||
|
||
</div>
|
||
</div>
|
||
<a id="ga1a7cb315df51ac922d9e9d207950ec43"></a>
|
||
<h2 class="memtitle"><span class="permalink"><a href="#ga1a7cb315df51ac922d9e9d207950ec43">◆ </a></span>closest_point() <span class="overload">[3/4]</span></h2>
|
||
|
||
<div class="memitem">
|
||
<div class="memproto">
|
||
<table class="memname">
|
||
<tr>
|
||
<td class="memname"><a class="el" href="namespacevde_1_1core.html#ac6aed70c4b90d13f10217267cd7a1952">Point3D</a> vde::core::closest_point </td>
|
||
<td>(</td>
|
||
<td class="paramtype">const <a class="el" href="namespacevde_1_1core.html#ac6aed70c4b90d13f10217267cd7a1952">Point3D</a> & </td>
|
||
<td class="paramname"><em>p</em>, </td>
|
||
</tr>
|
||
<tr>
|
||
<td class="paramkey"></td>
|
||
<td></td>
|
||
<td class="paramtype">const <a class="el" href="classvde_1_1core_1_1Segment3D.html">Segment3D</a>< double > & </td>
|
||
<td class="paramname"><em>seg</em> </td>
|
||
</tr>
|
||
<tr>
|
||
<td></td>
|
||
<td>)</td>
|
||
<td></td><td></td>
|
||
</tr>
|
||
</table>
|
||
</div><div class="memdoc">
|
||
|
||
<p>线段上距给定点最近的点 </p>
|
||
<p>通过参数 t = clamp(投影, 0, 1) 实现。</p>
|
||
<dl class="params"><dt>参数</dt><dd>
|
||
<table class="params">
|
||
<tr><td class="paramname">p</td><td>查询点 </td></tr>
|
||
<tr><td class="paramname">seg</td><td>线段 </td></tr>
|
||
</table>
|
||
</dd>
|
||
</dl>
|
||
<dl class="section return"><dt>返回</dt><dd>线段上距离 p 最近的点(可能为端点) </dd></dl>
|
||
|
||
</div>
|
||
</div>
|
||
<a id="gadb95bcdf9ce6420abfd95eee4d465bde"></a>
|
||
<h2 class="memtitle"><span class="permalink"><a href="#gadb95bcdf9ce6420abfd95eee4d465bde">◆ </a></span>closest_point() <span class="overload">[4/4]</span></h2>
|
||
|
||
<div class="memitem">
|
||
<div class="memproto">
|
||
<table class="memname">
|
||
<tr>
|
||
<td class="memname"><a class="el" href="namespacevde_1_1core.html#ac6aed70c4b90d13f10217267cd7a1952">Point3D</a> vde::core::closest_point </td>
|
||
<td>(</td>
|
||
<td class="paramtype">const <a class="el" href="namespacevde_1_1core.html#ac6aed70c4b90d13f10217267cd7a1952">Point3D</a> & </td>
|
||
<td class="paramname"><em>p</em>, </td>
|
||
</tr>
|
||
<tr>
|
||
<td class="paramkey"></td>
|
||
<td></td>
|
||
<td class="paramtype">const <a class="el" href="classvde_1_1core_1_1Triangle.html">Triangle</a>< double > & </td>
|
||
<td class="paramname"><em>tri</em> </td>
|
||
</tr>
|
||
<tr>
|
||
<td></td>
|
||
<td>)</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">p</td><td>查询点 </td></tr>
|
||
<tr><td class="paramname">tri</td><td>三角形 </td></tr>
|
||
</table>
|
||
</dd>
|
||
</dl>
|
||
<dl class="section return"><dt>返回</dt><dd>三角形上距离 p 最近的点 </dd></dl>
|
||
|
||
</div>
|
||
</div>
|
||
<a id="gaacb80a198879458b0a6e48a9e5a47da2"></a>
|
||
<h2 class="memtitle"><span class="permalink"><a href="#gaacb80a198879458b0a6e48a9e5a47da2">◆ </a></span>convex_hull_2d()</h2>
|
||
|
||
<div class="memitem">
|
||
<div class="memproto">
|
||
<table class="memname">
|
||
<tr>
|
||
<td class="memname">std::vector<<a class="el" href="namespacevde_1_1core.html#a78483c599a40e4f333418667a77e3862">Point2D</a>> vde::core::convex_hull_2d </td>
|
||
<td>(</td>
|
||
<td class="paramtype">const std::vector< <a class="el" href="namespacevde_1_1core.html#a78483c599a40e4f333418667a77e3862">Point2D</a> > & </td>
|
||
<td class="paramname"><em>points</em></td><td>)</td>
|
||
<td></td>
|
||
</tr>
|
||
</table>
|
||
</div><div class="memdoc">
|
||
|
||
<p>二维凸包计算(Graham Scan 算法) </p>
|
||
<p>使用 Graham 扫描算法计算点集的凸包,时间复杂度 O(n log n)。 以极角排序点为预处理,然后用栈维护凸包边界。</p>
|
||
<dl class="params"><dt>参数</dt><dd>
|
||
<table class="params">
|
||
<tr><td class="paramname">points</td><td>输入点集(至少 3 个不共线点) </td></tr>
|
||
</table>
|
||
</dd>
|
||
</dl>
|
||
<dl class="section return"><dt>返回</dt><dd>凸包顶点序列(逆时针排列),不含共线的中间点</dd></dl>
|
||
<dl class="section note"><dt>注解</dt><dd>自动过滤共线点,返回严格的凸包顶点 </dd>
|
||
<dd>
|
||
若所有点共线,返回两个端点</dd></dl>
|
||
<div class="fragment"><div class="line">std::vector<Point2D> pts = {{0,0}, {1,0}, {1,1}, {0,1}, {0.5,0.5}};</div>
|
||
<div class="line"><span class="keyword">auto</span> hull = <a class="code" href="group__core.html#gaacb80a198879458b0a6e48a9e5a47da2">convex_hull_2d</a>(pts);</div>
|
||
<div class="line"><span class="comment">// hull = [(0,0), (1,0), (1,1), (0,1)]</span></div>
|
||
<div class="ttc" id="agroup__core_html_gaacb80a198879458b0a6e48a9e5a47da2"><div class="ttname"><a href="group__core.html#gaacb80a198879458b0a6e48a9e5a47da2">vde::core::convex_hull_2d</a></div><div class="ttdeci">std::vector< Point2D > convex_hull_2d(const std::vector< Point2D > &points)</div><div class="ttdoc">二维凸包计算(Graham Scan 算法)</div></div>
|
||
</div><!-- fragment --><dl class="section see"><dt>参见</dt><dd><a class="el" href="group__core.html#ga4b65dcd970fc3b5de01d5506e326bf46" title="三维凸包计算(QuickHull 算法)">convex_hull_3d</a>, <a class="el" href="classvde_1_1core_1_1Polygon2D.html#a8eeac89881bb9b231e2c8cad55a5729c" title="Andrew's Monotone Chain 二维凸包">Polygon2D::convex_hull_2d</a> </dd></dl>
|
||
|
||
</div>
|
||
</div>
|
||
<a id="ga4b65dcd970fc3b5de01d5506e326bf46"></a>
|
||
<h2 class="memtitle"><span class="permalink"><a href="#ga4b65dcd970fc3b5de01d5506e326bf46">◆ </a></span>convex_hull_3d()</h2>
|
||
|
||
<div class="memitem">
|
||
<div class="memproto">
|
||
<table class="memname">
|
||
<tr>
|
||
<td class="memname">std::vector<std::array<<a class="el" href="namespacevde_1_1core.html#ac6aed70c4b90d13f10217267cd7a1952">Point3D</a>, 3> > vde::core::convex_hull_3d </td>
|
||
<td>(</td>
|
||
<td class="paramtype">const std::vector< <a class="el" href="namespacevde_1_1core.html#ac6aed70c4b90d13f10217267cd7a1952">Point3D</a> > & </td>
|
||
<td class="paramname"><em>points</em></td><td>)</td>
|
||
<td></td>
|
||
</tr>
|
||
</table>
|
||
</div><div class="memdoc">
|
||
|
||
<p>三维凸包计算(QuickHull 算法) </p>
|
||
<p>使用 QuickHull 算法计算三维点集的凸包。 先构造初始四面体,然后递归地将外部点添加到凸包上。 平均复杂度 O(n log n),最坏情况 O(n²)。</p>
|
||
<dl class="params"><dt>参数</dt><dd>
|
||
<table class="params">
|
||
<tr><td class="paramname">points</td><td>输入点集(至少 4 个不共面点) </td></tr>
|
||
</table>
|
||
</dd>
|
||
</dl>
|
||
<dl class="section return"><dt>返回</dt><dd>凸包三角形列表,每个三角形三顶点按逆时针排列(从外部观察)</dd></dl>
|
||
<dl class="section note"><dt>注解</dt><dd>返回的三角形法线方向朝外 </dd>
|
||
<dd>
|
||
共面/退化点被自动丢弃</dd></dl>
|
||
<div class="fragment"><div class="line">std::vector<Point3D> pts = 3D 点云;</div>
|
||
<div class="line"><span class="keyword">auto</span> hull_tris = <a class="code" href="group__core.html#ga4b65dcd970fc3b5de01d5506e326bf46">convex_hull_3d</a>(pts);</div>
|
||
<div class="line"><span class="keywordflow">for</span> (<span class="keyword">auto</span>& tri : hull_tris) {</div>
|
||
<div class="line"> <span class="comment">// tri = {p0, p1, p2} — CCW when viewed from outside</span></div>
|
||
<div class="line">}</div>
|
||
<div class="ttc" id="agroup__core_html_ga4b65dcd970fc3b5de01d5506e326bf46"><div class="ttname"><a href="group__core.html#ga4b65dcd970fc3b5de01d5506e326bf46">vde::core::convex_hull_3d</a></div><div class="ttdeci">std::vector< std::array< Point3D, 3 > > convex_hull_3d(const std::vector< Point3D > &points)</div><div class="ttdoc">三维凸包计算(QuickHull 算法)</div></div>
|
||
</div><!-- fragment --><dl class="section see"><dt>参见</dt><dd><a class="el" href="group__core.html#gaacb80a198879458b0a6e48a9e5a47da2" title="二维凸包计算(Graham Scan 算法)">convex_hull_2d</a> </dd></dl>
|
||
|
||
</div>
|
||
</div>
|
||
<a id="ga813b7b5d20316f958b43b4c5a58a4883"></a>
|
||
<h2 class="memtitle"><span class="permalink"><a href="#ga813b7b5d20316f958b43b4c5a58a4883">◆ </a></span>distance() <span class="overload">[1/10]</span></h2>
|
||
|
||
<div class="memitem">
|
||
<div class="memproto">
|
||
<table class="memname">
|
||
<tr>
|
||
<td class="memname">double vde::core::distance </td>
|
||
<td>(</td>
|
||
<td class="paramtype">const <a class="el" href="classvde_1_1core_1_1AABB.html">AABB</a>< double > & </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_1core_1_1AABB.html">AABB</a>< double > & </td>
|
||
<td class="paramname"><em>b</em> </td>
|
||
</tr>
|
||
<tr>
|
||
<td></td>
|
||
<td>)</td>
|
||
<td></td><td></td>
|
||
</tr>
|
||
</table>
|
||
</div><div class="memdoc">
|
||
|
||
<p>两个包围盒之间的最短距离 </p>
|
||
<p>若相交则返回 0。</p>
|
||
<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>
|
||
</table>
|
||
</dd>
|
||
</dl>
|
||
<dl class="section return"><dt>返回</dt><dd>最短距离 </dd></dl>
|
||
|
||
</div>
|
||
</div>
|
||
<a id="ga0f6b23d8527e9527668af106edd4c188"></a>
|
||
<h2 class="memtitle"><span class="permalink"><a href="#ga0f6b23d8527e9527668af106edd4c188">◆ </a></span>distance() <span class="overload">[2/10]</span></h2>
|
||
|
||
<div class="memitem">
|
||
<div class="memproto">
|
||
<table class="memname">
|
||
<tr>
|
||
<td class="memname">double vde::core::distance </td>
|
||
<td>(</td>
|
||
<td class="paramtype">const <a class="el" href="classvde_1_1core_1_1Line3D.html">Line3D</a>< double > & </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_1core_1_1Line3D.html">Line3D</a>< double > & </td>
|
||
<td class="paramname"><em>b</em> </td>
|
||
</tr>
|
||
<tr>
|
||
<td></td>
|
||
<td>)</td>
|
||
<td></td><td></td>
|
||
</tr>
|
||
</table>
|
||
</div><div class="memdoc">
|
||
|
||
<p>两条直线之间的最短距离 </p>
|
||
<p>若相交则为 0;若平行则返回任意垂线段长度;若异面则返回公垂线长度。</p>
|
||
<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>
|
||
</table>
|
||
</dd>
|
||
</dl>
|
||
<dl class="section return"><dt>返回</dt><dd>最短距离 </dd></dl>
|
||
|
||
</div>
|
||
</div>
|
||
<a id="ga8378489b455ccc35eb29dcb1a874bbd0"></a>
|
||
<h2 class="memtitle"><span class="permalink"><a href="#ga8378489b455ccc35eb29dcb1a874bbd0">◆ </a></span>distance() <span class="overload">[3/10]</span></h2>
|
||
|
||
<div class="memitem">
|
||
<div class="memproto">
|
||
<table class="memname">
|
||
<tr>
|
||
<td class="memname">double vde::core::distance </td>
|
||
<td>(</td>
|
||
<td class="paramtype">const <a class="el" href="namespacevde_1_1core.html#ac6aed70c4b90d13f10217267cd7a1952">Point3D</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="namespacevde_1_1core.html#ac6aed70c4b90d13f10217267cd7a1952">Point3D</a> & </td>
|
||
<td class="paramname"><em>b</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">a</td><td>第一个点 </td></tr>
|
||
<tr><td class="paramname">b</td><td>第二个点 </td></tr>
|
||
</table>
|
||
</dd>
|
||
</dl>
|
||
<dl class="section return"><dt>返回</dt><dd>||b - a||</dd></dl>
|
||
<div class="fragment"><div class="line"><span class="keywordtype">double</span> d = <a class="code" href="group__core.html#ga8378489b455ccc35eb29dcb1a874bbd0">distance</a>(<a class="code" href="namespacevde_1_1core.html#ac6aed70c4b90d13f10217267cd7a1952">Point3D</a>(0,0,0), <a class="code" href="namespacevde_1_1core.html#ac6aed70c4b90d13f10217267cd7a1952">Point3D</a>(3,4,0)); <span class="comment">// d == 5.0</span></div>
|
||
<div class="ttc" id="agroup__core_html_ga8378489b455ccc35eb29dcb1a874bbd0"><div class="ttname"><a href="group__core.html#ga8378489b455ccc35eb29dcb1a874bbd0">vde::core::distance</a></div><div class="ttdeci">double distance(const Point3D &a, const Point3D &b)</div><div class="ttdoc">两点之间的欧氏距离</div></div>
|
||
<div class="ttc" id="anamespacevde_1_1core_html_ac6aed70c4b90d13f10217267cd7a1952"><div class="ttname"><a href="namespacevde_1_1core.html#ac6aed70c4b90d13f10217267cd7a1952">vde::core::Point3D</a></div><div class="ttdeci">foundation::Point3D Point3D</div><div class="ttdoc">双精度三维点(重新导出)</div><div class="ttdef"><b>Definition:</b> <a href="point_8h_source.html#l00031">point.h:31</a></div></div>
|
||
</div><!-- fragment -->
|
||
</div>
|
||
</div>
|
||
<a id="ga47add037521cc2500a05b3630ade36f4"></a>
|
||
<h2 class="memtitle"><span class="permalink"><a href="#ga47add037521cc2500a05b3630ade36f4">◆ </a></span>distance() <span class="overload">[4/10]</span></h2>
|
||
|
||
<div class="memitem">
|
||
<div class="memproto">
|
||
<table class="memname">
|
||
<tr>
|
||
<td class="memname">double vde::core::distance </td>
|
||
<td>(</td>
|
||
<td class="paramtype">const <a class="el" href="namespacevde_1_1core.html#ac6aed70c4b90d13f10217267cd7a1952">Point3D</a> & </td>
|
||
<td class="paramname"><em>p</em>, </td>
|
||
</tr>
|
||
<tr>
|
||
<td class="paramkey"></td>
|
||
<td></td>
|
||
<td class="paramtype">const <a class="el" href="classvde_1_1core_1_1AABB.html">AABB</a>< double > & </td>
|
||
<td class="paramname"><em>box</em> </td>
|
||
</tr>
|
||
<tr>
|
||
<td></td>
|
||
<td>)</td>
|
||
<td></td><td></td>
|
||
</tr>
|
||
</table>
|
||
</div><div class="memdoc">
|
||
|
||
<p>点到包围盒的距离 </p>
|
||
<p>若点在包围盒内,返回 0;否则返回到最近面的距离。</p>
|
||
<dl class="params"><dt>参数</dt><dd>
|
||
<table class="params">
|
||
<tr><td class="paramname">p</td><td>测试点 </td></tr>
|
||
<tr><td class="paramname">box</td><td>包围盒 </td></tr>
|
||
</table>
|
||
</dd>
|
||
</dl>
|
||
<dl class="section return"><dt>返回</dt><dd>最短距离(内部点返回 0) </dd></dl>
|
||
|
||
</div>
|
||
</div>
|
||
<a id="ga1bd9e26be7d281523753d2681837b92e"></a>
|
||
<h2 class="memtitle"><span class="permalink"><a href="#ga1bd9e26be7d281523753d2681837b92e">◆ </a></span>distance() <span class="overload">[5/10]</span></h2>
|
||
|
||
<div class="memitem">
|
||
<div class="memproto">
|
||
<table class="memname">
|
||
<tr>
|
||
<td class="memname">double vde::core::distance </td>
|
||
<td>(</td>
|
||
<td class="paramtype">const <a class="el" href="namespacevde_1_1core.html#ac6aed70c4b90d13f10217267cd7a1952">Point3D</a> & </td>
|
||
<td class="paramname"><em>p</em>, </td>
|
||
</tr>
|
||
<tr>
|
||
<td class="paramkey"></td>
|
||
<td></td>
|
||
<td class="paramtype">const <a class="el" href="classvde_1_1core_1_1Line3D.html">Line3D</a>< double > & </td>
|
||
<td class="paramname"><em>line</em> </td>
|
||
</tr>
|
||
<tr>
|
||
<td></td>
|
||
<td>)</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">p</td><td>测试点 </td></tr>
|
||
<tr><td class="paramname">line</td><td>直线 </td></tr>
|
||
</table>
|
||
</dd>
|
||
</dl>
|
||
<dl class="section return"><dt>返回</dt><dd>垂直距离 </dd></dl>
|
||
|
||
</div>
|
||
</div>
|
||
<a id="ga4a05820313877ebc46d972465a448e52"></a>
|
||
<h2 class="memtitle"><span class="permalink"><a href="#ga4a05820313877ebc46d972465a448e52">◆ </a></span>distance() <span class="overload">[6/10]</span></h2>
|
||
|
||
<div class="memitem">
|
||
<div class="memproto">
|
||
<table class="memname">
|
||
<tr>
|
||
<td class="memname">double vde::core::distance </td>
|
||
<td>(</td>
|
||
<td class="paramtype">const <a class="el" href="namespacevde_1_1core.html#ac6aed70c4b90d13f10217267cd7a1952">Point3D</a> & </td>
|
||
<td class="paramname"><em>p</em>, </td>
|
||
</tr>
|
||
<tr>
|
||
<td class="paramkey"></td>
|
||
<td></td>
|
||
<td class="paramtype">const <a class="el" href="classvde_1_1core_1_1Plane.html">Plane</a>< double > & </td>
|
||
<td class="paramname"><em>plane</em> </td>
|
||
</tr>
|
||
<tr>
|
||
<td></td>
|
||
<td>)</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">p</td><td>测试点 </td></tr>
|
||
<tr><td class="paramname">plane</td><td>平面 </td></tr>
|
||
</table>
|
||
</dd>
|
||
</dl>
|
||
<dl class="section return"><dt>返回</dt><dd>绝对垂直距离</dd></dl>
|
||
<dl class="section see"><dt>参见</dt><dd><a class="el" href="classvde_1_1core_1_1Plane.html#a504b11de876d56076272afd0b6d60d8d" title="有向点到平面距离">Plane::signed_distance</a> </dd></dl>
|
||
|
||
</div>
|
||
</div>
|
||
<a id="ga7468571f81e61ca34a4b34f16b33dfab"></a>
|
||
<h2 class="memtitle"><span class="permalink"><a href="#ga7468571f81e61ca34a4b34f16b33dfab">◆ </a></span>distance() <span class="overload">[7/10]</span></h2>
|
||
|
||
<div class="memitem">
|
||
<div class="memproto">
|
||
<table class="memname">
|
||
<tr>
|
||
<td class="memname">double vde::core::distance </td>
|
||
<td>(</td>
|
||
<td class="paramtype">const <a class="el" href="namespacevde_1_1core.html#ac6aed70c4b90d13f10217267cd7a1952">Point3D</a> & </td>
|
||
<td class="paramname"><em>p</em>, </td>
|
||
</tr>
|
||
<tr>
|
||
<td class="paramkey"></td>
|
||
<td></td>
|
||
<td class="paramtype">const <a class="el" href="classvde_1_1core_1_1Segment3D.html">Segment3D</a>< double > & </td>
|
||
<td class="paramname"><em>seg</em> </td>
|
||
</tr>
|
||
<tr>
|
||
<td></td>
|
||
<td>)</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">p</td><td>测试点 </td></tr>
|
||
<tr><td class="paramname">seg</td><td>线段 </td></tr>
|
||
</table>
|
||
</dd>
|
||
</dl>
|
||
<dl class="section return"><dt>返回</dt><dd>最短距离 </dd></dl>
|
||
|
||
</div>
|
||
</div>
|
||
<a id="ga60c1aaba85c90f7e0f1090a3a8fff099"></a>
|
||
<h2 class="memtitle"><span class="permalink"><a href="#ga60c1aaba85c90f7e0f1090a3a8fff099">◆ </a></span>distance() <span class="overload">[8/10]</span></h2>
|
||
|
||
<div class="memitem">
|
||
<div class="memproto">
|
||
<table class="memname">
|
||
<tr>
|
||
<td class="memname">double vde::core::distance </td>
|
||
<td>(</td>
|
||
<td class="paramtype">const <a class="el" href="namespacevde_1_1core.html#ac6aed70c4b90d13f10217267cd7a1952">Point3D</a> & </td>
|
||
<td class="paramname"><em>p</em>, </td>
|
||
</tr>
|
||
<tr>
|
||
<td class="paramkey"></td>
|
||
<td></td>
|
||
<td class="paramtype">const <a class="el" href="classvde_1_1core_1_1Triangle.html">Triangle</a>< double > & </td>
|
||
<td class="paramname"><em>tri</em> </td>
|
||
</tr>
|
||
<tr>
|
||
<td></td>
|
||
<td>)</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">p</td><td>测试点 </td></tr>
|
||
<tr><td class="paramname">tri</td><td>三角形 </td></tr>
|
||
</table>
|
||
</dd>
|
||
</dl>
|
||
<dl class="section return"><dt>返回</dt><dd>最短距离 </dd></dl>
|
||
|
||
</div>
|
||
</div>
|
||
<a id="ga1d6b1a31af4a149f94e89235d4159f06"></a>
|
||
<h2 class="memtitle"><span class="permalink"><a href="#ga1d6b1a31af4a149f94e89235d4159f06">◆ </a></span>distance() <span class="overload">[9/10]</span></h2>
|
||
|
||
<div class="memitem">
|
||
<div class="memproto">
|
||
<table class="memname">
|
||
<tr>
|
||
<td class="memname">double vde::core::distance </td>
|
||
<td>(</td>
|
||
<td class="paramtype">const <a class="el" href="classvde_1_1core_1_1Segment3D.html">Segment3D</a>< double > & </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_1core_1_1Segment3D.html">Segment3D</a>< double > & </td>
|
||
<td class="paramname"><em>b</em> </td>
|
||
</tr>
|
||
<tr>
|
||
<td></td>
|
||
<td>)</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">a</td><td>第一条线段 </td></tr>
|
||
<tr><td class="paramname">b</td><td>第二条线段 </td></tr>
|
||
</table>
|
||
</dd>
|
||
</dl>
|
||
<dl class="section return"><dt>返回</dt><dd>最短距离(若相交则为 0) </dd></dl>
|
||
|
||
</div>
|
||
</div>
|
||
<a id="gaa22348c98076275fa470fb309c495b07"></a>
|
||
<h2 class="memtitle"><span class="permalink"><a href="#gaa22348c98076275fa470fb309c495b07">◆ </a></span>distance() <span class="overload">[10/10]</span></h2>
|
||
|
||
<div class="memitem">
|
||
<div class="memproto">
|
||
<table class="memname">
|
||
<tr>
|
||
<td class="memname">double vde::core::distance </td>
|
||
<td>(</td>
|
||
<td class="paramtype">const <a class="el" href="classvde_1_1core_1_1Triangle.html">Triangle</a>< double > & </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_1core_1_1Triangle.html">Triangle</a>< double > & </td>
|
||
<td class="paramname"><em>b</em> </td>
|
||
</tr>
|
||
<tr>
|
||
<td></td>
|
||
<td>)</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">a</td><td>第一个三角形 </td></tr>
|
||
<tr><td class="paramname">b</td><td>第二个三角形 </td></tr>
|
||
</table>
|
||
</dd>
|
||
</dl>
|
||
<dl class="section return"><dt>返回</dt><dd>最短距离(若相交则为 0) </dd></dl>
|
||
|
||
</div>
|
||
</div>
|
||
<a id="gabaf3dea80baf0c0ef81e5de25841e8e0"></a>
|
||
<h2 class="memtitle"><span class="permalink"><a href="#gabaf3dea80baf0c0ef81e5de25841e8e0">◆ </a></span>icp_register()</h2>
|
||
|
||
<div class="memitem">
|
||
<div class="memproto">
|
||
<table class="memname">
|
||
<tr>
|
||
<td class="memname"><a class="el" href="structvde_1_1core_1_1ICPResult.html">ICPResult</a> vde::core::icp_register </td>
|
||
<td>(</td>
|
||
<td class="paramtype">const std::vector< <a class="el" href="namespacevde_1_1core.html#ac6aed70c4b90d13f10217267cd7a1952">Point3D</a> > & </td>
|
||
<td class="paramname"><em>source</em>, </td>
|
||
</tr>
|
||
<tr>
|
||
<td class="paramkey"></td>
|
||
<td></td>
|
||
<td class="paramtype">const std::vector< <a class="el" href="namespacevde_1_1core.html#ac6aed70c4b90d13f10217267cd7a1952">Point3D</a> > & </td>
|
||
<td class="paramname"><em>target</em>, </td>
|
||
</tr>
|
||
<tr>
|
||
<td class="paramkey"></td>
|
||
<td></td>
|
||
<td class="paramtype">int </td>
|
||
<td class="paramname"><em>max_iter</em> = <code>50</code>, </td>
|
||
</tr>
|
||
<tr>
|
||
<td class="paramkey"></td>
|
||
<td></td>
|
||
<td class="paramtype">double </td>
|
||
<td class="paramname"><em>tolerance</em> = <code>1e-6</code> </td>
|
||
</tr>
|
||
<tr>
|
||
<td></td>
|
||
<td>)</td>
|
||
<td></td><td></td>
|
||
</tr>
|
||
</table>
|
||
</div><div class="memdoc">
|
||
|
||
<p>迭代最近点(ICP)刚体点云配准 </p>
|
||
<p>使用标准 ICP 算法将 source 点云配准到 target 点云。 每步迭代:</p><ol type="1">
|
||
<li>对每个 source 点找 target 中的最近邻</li>
|
||
<li>用 SVD 求解最优刚体变换</li>
|
||
<li>应用变换,检查收敛</li>
|
||
</ol>
|
||
<dl class="params"><dt>参数</dt><dd>
|
||
<table class="params">
|
||
<tr><td class="paramname">source</td><td>源点云(将被移动) </td></tr>
|
||
<tr><td class="paramname">target</td><td>目标点云(固定参考) </td></tr>
|
||
<tr><td class="paramname">max_iter</td><td>最大迭代次数(默认 50) </td></tr>
|
||
<tr><td class="paramname">tolerance</td><td>收敛容差:相邻两次 RMS 变化的阈值(默认 1e-6) </td></tr>
|
||
</table>
|
||
</dd>
|
||
</dl>
|
||
<dl class="section return"><dt>返回</dt><dd>配准结果,包含最终变换和误差</dd></dl>
|
||
<dl class="section note"><dt>注解</dt><dd>source 和 target 点数可以不同 </dd>
|
||
<dd>
|
||
初始对齐越好,收敛越快;若初始偏差太大,可能收敛到局部最优</dd></dl>
|
||
<div class="fragment"><div class="line">std::vector<Point3D> src = <span class="comment">// ...;</span></div>
|
||
<div class="line">std::vector<Point3D> tgt = <span class="comment">// ...;</span></div>
|
||
<div class="line"><span class="keyword">auto</span> result = <a class="code" href="group__core.html#gabaf3dea80baf0c0ef81e5de25841e8e0">icp_register</a>(src, tgt, 100, 1e-8);</div>
|
||
<div class="line"><span class="keywordflow">if</span> (result.converged) {</div>
|
||
<div class="line"> std::cout << <span class="stringliteral">"RMS error: "</span> << result.rms_error << <span class="stringliteral">"\n"</span>;</div>
|
||
<div class="line"> <span class="comment">// 应用变换</span></div>
|
||
<div class="line"> <span class="keywordflow">for</span> (<span class="keyword">auto</span>& p : src) p = result.transform * p;</div>
|
||
<div class="line">}</div>
|
||
<div class="ttc" id="agroup__core_html_gabaf3dea80baf0c0ef81e5de25841e8e0"><div class="ttname"><a href="group__core.html#gabaf3dea80baf0c0ef81e5de25841e8e0">vde::core::icp_register</a></div><div class="ttdeci">ICPResult icp_register(const std::vector< Point3D > &source, const std::vector< Point3D > &target, int max_iter=50, double tolerance=1e-6)</div><div class="ttdoc">迭代最近点(ICP)刚体点云配准</div></div>
|
||
</div><!-- fragment -->
|
||
</div>
|
||
</div>
|
||
<a id="gaa8821904ace09771bb66a626ecbdb3fb"></a>
|
||
<h2 class="memtitle"><span class="permalink"><a href="#gaa8821904ace09771bb66a626ecbdb3fb">◆ </a></span>rotate()</h2>
|
||
|
||
<div class="memitem">
|
||
<div class="memproto">
|
||
<table class="mlabels">
|
||
<tr>
|
||
<td class="mlabels-left">
|
||
<table class="memname">
|
||
<tr>
|
||
<td class="memname"><a class="el" href="group__core.html#ga1d6b7ffb62cc56245fac3b5939f0df80">Transform3D</a> vde::core::rotate </td>
|
||
<td>(</td>
|
||
<td class="paramtype">const <a class="el" href="namespacevde_1_1core.html#ab763c018d19e10e91a6c6d6ab2ccc8e0">Vector3D</a> & </td>
|
||
<td class="paramname"><em>axis</em>, </td>
|
||
</tr>
|
||
<tr>
|
||
<td class="paramkey"></td>
|
||
<td></td>
|
||
<td class="paramtype">double </td>
|
||
<td class="paramname"><em>angle_rad</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>创建旋转变换(轴-角表示) </p>
|
||
<dl class="params"><dt>参数</dt><dd>
|
||
<table class="params">
|
||
<tr><td class="paramname">axis</td><td>旋转轴(自动归一化) </td></tr>
|
||
<tr><td class="paramname">angle_rad</td><td>旋转角度(弧度) </td></tr>
|
||
</table>
|
||
</dd>
|
||
</dl>
|
||
<dl class="section return"><dt>返回</dt><dd>旋转变换矩阵</dd></dl>
|
||
<div class="fragment"><div class="line"><span class="comment">// 绕 Z 轴旋转 90°</span></div>
|
||
<div class="line"><span class="keyword">auto</span> R = <a class="code" href="group__core.html#gaa8821904ace09771bb66a626ecbdb3fb">rotate</a>(Vector3D::UnitZ(), M_PI / 2);</div>
|
||
<div class="ttc" id="agroup__core_html_gaa8821904ace09771bb66a626ecbdb3fb"><div class="ttname"><a href="group__core.html#gaa8821904ace09771bb66a626ecbdb3fb">vde::core::rotate</a></div><div class="ttdeci">Transform3D rotate(const Vector3D &axis, double angle_rad)</div><div class="ttdoc">创建旋转变换(轴-角表示)</div><div class="ttdef"><b>Definition:</b> <a href="transform_8h_source.html#l00062">transform.h:62</a></div></div>
|
||
</div><!-- fragment -->
|
||
<p class="definition">在文件 <a class="el" href="transform_8h_source.html">transform.h</a> 第 <a class="el" href="transform_8h_source.html#l00062">62</a> 行定义.</p>
|
||
|
||
<p class="reference">被这些函数引用 <a class="el" href="transform_8h_source.html#l00074">vde::core::rotate_x()</a>, <a class="el" href="transform_8h_source.html#l00084">vde::core::rotate_y()</a> , 以及 <a class="el" href="transform_8h_source.html#l00094">vde::core::rotate_z()</a>.</p>
|
||
|
||
</div>
|
||
</div>
|
||
<a id="ga81af7f4bc18bd5159a2f10d661af320f"></a>
|
||
<h2 class="memtitle"><span class="permalink"><a href="#ga81af7f4bc18bd5159a2f10d661af320f">◆ </a></span>rotate_x()</h2>
|
||
|
||
<div class="memitem">
|
||
<div class="memproto">
|
||
<table class="mlabels">
|
||
<tr>
|
||
<td class="mlabels-left">
|
||
<table class="memname">
|
||
<tr>
|
||
<td class="memname"><a class="el" href="group__core.html#ga1d6b7ffb62cc56245fac3b5939f0df80">Transform3D</a> vde::core::rotate_x </td>
|
||
<td>(</td>
|
||
<td class="paramtype">double </td>
|
||
<td class="paramname"><em>rad</em></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>绕 X 轴旋转 </p>
|
||
<dl class="params"><dt>参数</dt><dd>
|
||
<table class="params">
|
||
<tr><td class="paramname">rad</td><td>旋转角度(弧度) </td></tr>
|
||
</table>
|
||
</dd>
|
||
</dl>
|
||
<dl class="section return"><dt>返回</dt><dd>旋转变换矩阵 </dd></dl>
|
||
|
||
<p class="definition">在文件 <a class="el" href="transform_8h_source.html">transform.h</a> 第 <a class="el" href="transform_8h_source.html#l00074">74</a> 行定义.</p>
|
||
|
||
<p class="reference">引用了 <a class="el" href="transform_8h_source.html#l00062">vde::core::rotate()</a>.</p>
|
||
|
||
</div>
|
||
</div>
|
||
<a id="gae14e5be60107581d9b2af2fb2b43e711"></a>
|
||
<h2 class="memtitle"><span class="permalink"><a href="#gae14e5be60107581d9b2af2fb2b43e711">◆ </a></span>rotate_y()</h2>
|
||
|
||
<div class="memitem">
|
||
<div class="memproto">
|
||
<table class="mlabels">
|
||
<tr>
|
||
<td class="mlabels-left">
|
||
<table class="memname">
|
||
<tr>
|
||
<td class="memname"><a class="el" href="group__core.html#ga1d6b7ffb62cc56245fac3b5939f0df80">Transform3D</a> vde::core::rotate_y </td>
|
||
<td>(</td>
|
||
<td class="paramtype">double </td>
|
||
<td class="paramname"><em>rad</em></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>绕 Y 轴旋转 </p>
|
||
<dl class="params"><dt>参数</dt><dd>
|
||
<table class="params">
|
||
<tr><td class="paramname">rad</td><td>旋转角度(弧度) </td></tr>
|
||
</table>
|
||
</dd>
|
||
</dl>
|
||
<dl class="section return"><dt>返回</dt><dd>旋转变换矩阵 </dd></dl>
|
||
|
||
<p class="definition">在文件 <a class="el" href="transform_8h_source.html">transform.h</a> 第 <a class="el" href="transform_8h_source.html#l00084">84</a> 行定义.</p>
|
||
|
||
<p class="reference">引用了 <a class="el" href="transform_8h_source.html#l00062">vde::core::rotate()</a>.</p>
|
||
|
||
</div>
|
||
</div>
|
||
<a id="gaf0b49b7358d2c526619437815b90ff63"></a>
|
||
<h2 class="memtitle"><span class="permalink"><a href="#gaf0b49b7358d2c526619437815b90ff63">◆ </a></span>rotate_z()</h2>
|
||
|
||
<div class="memitem">
|
||
<div class="memproto">
|
||
<table class="mlabels">
|
||
<tr>
|
||
<td class="mlabels-left">
|
||
<table class="memname">
|
||
<tr>
|
||
<td class="memname"><a class="el" href="group__core.html#ga1d6b7ffb62cc56245fac3b5939f0df80">Transform3D</a> vde::core::rotate_z </td>
|
||
<td>(</td>
|
||
<td class="paramtype">double </td>
|
||
<td class="paramname"><em>rad</em></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>绕 Z 轴旋转 </p>
|
||
<dl class="params"><dt>参数</dt><dd>
|
||
<table class="params">
|
||
<tr><td class="paramname">rad</td><td>旋转角度(弧度) </td></tr>
|
||
</table>
|
||
</dd>
|
||
</dl>
|
||
<dl class="section return"><dt>返回</dt><dd>旋转变换矩阵 </dd></dl>
|
||
|
||
<p class="definition">在文件 <a class="el" href="transform_8h_source.html">transform.h</a> 第 <a class="el" href="transform_8h_source.html#l00094">94</a> 行定义.</p>
|
||
|
||
<p class="reference">引用了 <a class="el" href="transform_8h_source.html#l00062">vde::core::rotate()</a>.</p>
|
||
|
||
</div>
|
||
</div>
|
||
<a id="ga32b760d38ec52a155d40947b1293b526"></a>
|
||
<h2 class="memtitle"><span class="permalink"><a href="#ga32b760d38ec52a155d40947b1293b526">◆ </a></span>scale() <span class="overload">[1/2]</span></h2>
|
||
|
||
<div class="memitem">
|
||
<div class="memproto">
|
||
<table class="mlabels">
|
||
<tr>
|
||
<td class="mlabels-left">
|
||
<table class="memname">
|
||
<tr>
|
||
<td class="memname"><a class="el" href="group__core.html#ga1d6b7ffb62cc56245fac3b5939f0df80">Transform3D</a> vde::core::scale </td>
|
||
<td>(</td>
|
||
<td class="paramtype">double </td>
|
||
<td class="paramname"><em>s</em></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>创建均匀缩放变换 </p>
|
||
<dl class="params"><dt>参数</dt><dd>
|
||
<table class="params">
|
||
<tr><td class="paramname">s</td><td>各方向统一的缩放因子 </td></tr>
|
||
</table>
|
||
</dd>
|
||
</dl>
|
||
<dl class="section return"><dt>返回</dt><dd>缩放变换矩阵 </dd></dl>
|
||
|
||
<p class="definition">在文件 <a class="el" href="transform_8h_source.html">transform.h</a> 第 <a class="el" href="transform_8h_source.html#l00120">120</a> 行定义.</p>
|
||
|
||
<p class="reference">引用了 <a class="el" href="transform_8h_source.html#l00108">vde::core::scale()</a>.</p>
|
||
|
||
</div>
|
||
</div>
|
||
<a id="ga30c7a100ec4944f281dbcd6151a54670"></a>
|
||
<h2 class="memtitle"><span class="permalink"><a href="#ga30c7a100ec4944f281dbcd6151a54670">◆ </a></span>scale() <span class="overload">[2/2]</span></h2>
|
||
|
||
<div class="memitem">
|
||
<div class="memproto">
|
||
<table class="mlabels">
|
||
<tr>
|
||
<td class="mlabels-left">
|
||
<table class="memname">
|
||
<tr>
|
||
<td class="memname"><a class="el" href="group__core.html#ga1d6b7ffb62cc56245fac3b5939f0df80">Transform3D</a> vde::core::scale </td>
|
||
<td>(</td>
|
||
<td class="paramtype">double </td>
|
||
<td class="paramname"><em>sx</em>, </td>
|
||
</tr>
|
||
<tr>
|
||
<td class="paramkey"></td>
|
||
<td></td>
|
||
<td class="paramtype">double </td>
|
||
<td class="paramname"><em>sy</em>, </td>
|
||
</tr>
|
||
<tr>
|
||
<td class="paramkey"></td>
|
||
<td></td>
|
||
<td class="paramtype">double </td>
|
||
<td class="paramname"><em>sz</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>创建非均匀缩放变换 </p>
|
||
<dl class="params"><dt>参数</dt><dd>
|
||
<table class="params">
|
||
<tr><td class="paramname">sx</td><td>X 方向缩放因子 </td></tr>
|
||
<tr><td class="paramname">sy</td><td>Y 方向缩放因子 </td></tr>
|
||
<tr><td class="paramname">sz</td><td>Z 方向缩放因子 </td></tr>
|
||
</table>
|
||
</dd>
|
||
</dl>
|
||
<dl class="section return"><dt>返回</dt><dd>缩放变换矩阵</dd></dl>
|
||
<dl class="section note"><dt>注解</dt><dd>非均匀缩放可能导致法线方向不准确;使用场景中应考虑法线变换 = (M^{-1})^T </dd></dl>
|
||
|
||
<p class="definition">在文件 <a class="el" href="transform_8h_source.html">transform.h</a> 第 <a class="el" href="transform_8h_source.html#l00108">108</a> 行定义.</p>
|
||
|
||
<p class="reference">被这些函数引用 <a class="el" href="transform_8h_source.html#l00120">vde::core::scale()</a>.</p>
|
||
|
||
</div>
|
||
</div>
|
||
<a id="gac8fbd42a8dac9187eef97b9a393f948b"></a>
|
||
<h2 class="memtitle"><span class="permalink"><a href="#gac8fbd42a8dac9187eef97b9a393f948b">◆ </a></span>translate() <span class="overload">[1/2]</span></h2>
|
||
|
||
<div class="memitem">
|
||
<div class="memproto">
|
||
<table class="mlabels">
|
||
<tr>
|
||
<td class="mlabels-left">
|
||
<table class="memname">
|
||
<tr>
|
||
<td class="memname"><a class="el" href="group__core.html#ga1d6b7ffb62cc56245fac3b5939f0df80">Transform3D</a> vde::core::translate </td>
|
||
<td>(</td>
|
||
<td class="paramtype">const <a class="el" href="namespacevde_1_1core.html#ab763c018d19e10e91a6c6d6ab2ccc8e0">Vector3D</a> & </td>
|
||
<td class="paramname"><em>v</em></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>创建平移变换 </p>
|
||
<dl class="params"><dt>参数</dt><dd>
|
||
<table class="params">
|
||
<tr><td class="paramname">v</td><td>平移向量 </td></tr>
|
||
</table>
|
||
</dd>
|
||
</dl>
|
||
<dl class="section return"><dt>返回</dt><dd>平移变换矩阵</dd></dl>
|
||
<div class="fragment"><div class="line"><span class="keyword">auto</span> T = <a class="code" href="group__core.html#gac8fbd42a8dac9187eef97b9a393f948b">translate</a>(<a class="code" href="namespacevde_1_1core.html#ab763c018d19e10e91a6c6d6ab2ccc8e0">Vector3D</a>(1, 2, 3));</div>
|
||
<div class="line"><a class="code" href="namespacevde_1_1core.html#ac6aed70c4b90d13f10217267cd7a1952">Point3D</a> p2 = T * <a class="code" href="namespacevde_1_1core.html#ac6aed70c4b90d13f10217267cd7a1952">Point3D</a>(0,0,0); <span class="comment">// p2 == (1,2,3)</span></div>
|
||
<div class="ttc" id="agroup__core_html_gac8fbd42a8dac9187eef97b9a393f948b"><div class="ttname"><a href="group__core.html#gac8fbd42a8dac9187eef97b9a393f948b">vde::core::translate</a></div><div class="ttdeci">Transform3D translate(const Vector3D &v)</div><div class="ttdoc">创建平移变换</div><div class="ttdef"><b>Definition:</b> <a href="transform_8h_source.html#l00030">transform.h:30</a></div></div>
|
||
<div class="ttc" id="anamespacevde_1_1core_html_ab763c018d19e10e91a6c6d6ab2ccc8e0"><div class="ttname"><a href="namespacevde_1_1core.html#ab763c018d19e10e91a6c6d6ab2ccc8e0">vde::core::Vector3D</a></div><div class="ttdeci">foundation::Vector3D Vector3D</div><div class="ttdoc">双精度三维向量(重新导出)</div><div class="ttdef"><b>Definition:</b> <a href="point_8h_source.html#l00049">point.h:49</a></div></div>
|
||
</div><!-- fragment -->
|
||
<p class="definition">在文件 <a class="el" href="transform_8h_source.html">transform.h</a> 第 <a class="el" href="transform_8h_source.html#l00030">30</a> 行定义.</p>
|
||
|
||
<p class="reference">被这些函数引用 <a class="el" href="transform_8h_source.html#l00044">vde::core::translate()</a>.</p>
|
||
|
||
</div>
|
||
</div>
|
||
<a id="ga938b1dfb9688f3b94b88a219c0e69aec"></a>
|
||
<h2 class="memtitle"><span class="permalink"><a href="#ga938b1dfb9688f3b94b88a219c0e69aec">◆ </a></span>translate() <span class="overload">[2/2]</span></h2>
|
||
|
||
<div class="memitem">
|
||
<div class="memproto">
|
||
<table class="mlabels">
|
||
<tr>
|
||
<td class="mlabels-left">
|
||
<table class="memname">
|
||
<tr>
|
||
<td class="memname"><a class="el" href="group__core.html#ga1d6b7ffb62cc56245fac3b5939f0df80">Transform3D</a> vde::core::translate </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></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>创建平移变换(分量形式) </p>
|
||
<dl class="params"><dt>参数</dt><dd>
|
||
<table class="params">
|
||
<tr><td class="paramname">x</td><td>X 方向位移 </td></tr>
|
||
<tr><td class="paramname">y</td><td>Y 方向位移 </td></tr>
|
||
<tr><td class="paramname">z</td><td>Z 方向位移 </td></tr>
|
||
</table>
|
||
</dd>
|
||
</dl>
|
||
<dl class="section return"><dt>返回</dt><dd>平移变换矩阵 </dd></dl>
|
||
|
||
<p class="definition">在文件 <a class="el" href="transform_8h_source.html">transform.h</a> 第 <a class="el" href="transform_8h_source.html#l00044">44</a> 行定义.</p>
|
||
|
||
<p class="reference">引用了 <a class="el" href="transform_8h_source.html#l00030">vde::core::translate()</a>.</p>
|
||
|
||
</div>
|
||
</div>
|
||
<a id="gaeae68fe001afb374771a43ec52baa2fb"></a>
|
||
<h2 class="memtitle"><span class="permalink"><a href="#gaeae68fe001afb374771a43ec52baa2fb">◆ </a></span>voronoi_2d()</h2>
|
||
|
||
<div class="memitem">
|
||
<div class="memproto">
|
||
<table class="memname">
|
||
<tr>
|
||
<td class="memname">std::vector<<a class="el" href="structvde_1_1core_1_1VoronoiCell.html">VoronoiCell</a>> vde::core::voronoi_2d </td>
|
||
<td>(</td>
|
||
<td class="paramtype">const std::vector< <a class="el" href="namespacevde_1_1core.html#a78483c599a40e4f333418667a77e3862">Point2D</a> > & </td>
|
||
<td class="paramname"><em>points</em></td><td>)</td>
|
||
<td></td>
|
||
</tr>
|
||
</table>
|
||
</div><div class="memdoc">
|
||
|
||
<p>二维 Voronoi 图生成(通过 Delaunay 对偶图) </p>
|
||
<p>从输入点集的 Delaunay 三角剖分构造其对偶 Voronoi 图。 每个输入点对应一个 VoronoiCell。</p>
|
||
<dl class="params"><dt>参数</dt><dd>
|
||
<table class="params">
|
||
<tr><td class="paramname">points</td><td>输入点集(站点) </td></tr>
|
||
</table>
|
||
</dd>
|
||
</dl>
|
||
<dl class="section return"><dt>返回</dt><dd>每个站点对应的 <a class="el" href="structvde_1_1core_1_1VoronoiCell.html" title="Voronoi 单元格">VoronoiCell</a> 列表(顺序与输入一致)</dd></dl>
|
||
<dl class="section note"><dt>注解</dt><dd>对于凸包边界上的站点,对应的 Voronoi 单元格无界,顶点不完全闭合 </dd>
|
||
<dd>
|
||
内部使用 Delaunay 三角剖分作为中间步骤</dd></dl>
|
||
<div class="fragment"><div class="line">std::vector<Point2D> sites = {{0,0}, {1,0}, {0,1}, {1,1}};</div>
|
||
<div class="line"><span class="keyword">auto</span> cells = <a class="code" href="group__core.html#gaeae68fe001afb374771a43ec52baa2fb">voronoi_2d</a>(sites);</div>
|
||
<div class="line"><span class="keywordflow">for</span> (<span class="keyword">auto</span>& cell : cells) {</div>
|
||
<div class="line"> std::cout << <span class="stringliteral">"Site: "</span> << cell.site.transpose() << <span class="stringliteral">"\n"</span>;</div>
|
||
<div class="line"> std::cout << <span class="stringliteral">" Vertices: "</span> << cell.vertices.size() << <span class="stringliteral">"\n"</span>;</div>
|
||
<div class="line">}</div>
|
||
<div class="ttc" id="agroup__core_html_gaeae68fe001afb374771a43ec52baa2fb"><div class="ttname"><a href="group__core.html#gaeae68fe001afb374771a43ec52baa2fb">vde::core::voronoi_2d</a></div><div class="ttdeci">std::vector< VoronoiCell > voronoi_2d(const std::vector< Point2D > &points)</div><div class="ttdoc">二维 Voronoi 图生成(通过 Delaunay 对偶图)</div></div>
|
||
</div><!-- fragment -->
|
||
</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>
|