<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"> <title>mrpt::math::KDTreeCapable Class Reference</title> <link href="doxygen.css" rel="stylesheet" type="text/css"> <link href="tabs.css" rel="stylesheet" type="text/css"> </head><body> <div align="left"><a href="http://www.mrpt.org/">Main MRPT website</a> > <b>C++ reference</b> </div> <div align="right"> <a href="index.html"><img border="0" src="mrpt_logo.png" alt="MRPT logo"></a> </div> <!-- Generated by Doxygen 1.7.5 --> <script type="text/javascript"> var searchBox = new SearchBox("searchBox", "search",false,'Search'); </script> <div id="navrow1" class="tabs"> <ul class="tablist"> <li><a href="index.html"><span>Main Page</span></a></li> <li><a href="pages.html"><span>Related Pages</span></a></li> <li><a href="modules.html"><span>Modules</span></a></li> <li><a href="namespaces.html"><span>Namespaces</span></a></li> <li class="current"><a href="annotated.html"><span>Classes</span></a></li> <li><a href="files.html"><span>Files</span></a></li> <li> <div id="MSearchBox" class="MSearchBoxInactive"> <div class="left"> <form id="FSearchBox" action="search.php" method="get"> <img id="MSearchSelect" src="search/mag.png" alt=""/> <input type="text" id="MSearchField" name="query" value="Search" size="20" accesskey="S" onfocus="searchBox.OnSearchFieldFocus(true)" onblur="searchBox.OnSearchFieldFocus(false)"/> </form> </div><div class="right"></div> </div> </li> </ul> </div> <div id="navrow2" class="tabs2"> <ul class="tablist"> <li><a href="annotated.html"><span>Class List</span></a></li> <li><a href="classes.html"><span>Class Index</span></a></li> <li><a href="inherits.html"><span>Class Hierarchy</span></a></li> <li><a href="functions.html"><span>Class Members</span></a></li> </ul> </div> <div id="nav-path" class="navpath"> <ul> <li class="navelem"><a class="el" href="namespacemrpt.html">mrpt</a> </li> <li class="navelem"><a class="el" href="namespacemrpt_1_1math.html">math</a> </li> <li class="navelem"><a class="el" href="classmrpt_1_1math_1_1_k_d_tree_capable.html">KDTreeCapable</a> </li> </ul> </div> </div> <div class="header"> <div class="summary"> <a href="#nested-classes">Classes</a> | <a href="#pub-types">Public Types</a> | <a href="#pub-methods">Public Member Functions</a> | <a href="#pub-attribs">Public Attributes</a> | <a href="#pro-methods">Protected Member Functions</a> | <a href="#pri-methods">Private Member Functions</a> | <a href="#pri-attribs">Private Attributes</a> </div> <div class="headertitle"> <div class="title">mrpt::math::KDTreeCapable Class Reference<div class="ingroups"><a class="el" href="group__kdtree__grp.html">KD-Trees</a> | <a class="el" href="group__mrpt__base__grp.html">[mrpt-base]</a></div></div> </div> </div> <div class="contents"> <!-- doxytag: class="mrpt::math::KDTreeCapable" --><hr/><a name="details" id="details"></a><h2>Detailed Description</h2> <div class="textblock"><p>A generic adaptor class for providing Approximate Nearest Neighbors (ANN) (via the nanoflann library) to MRPT classses. </p> <p>This makes use of the CRTP design pattern.</p> <p>Derived classes must be aware of the need to call "kdtree_mark_as_outdated()" when the data points change to mark the cached KD-tree (an "index") as invalid, and also implement the following interface (note that these are not virtual functions due to the usage of CRTP):</p> <div class="fragment"><pre class="fragment"> <span class="comment">// Must return the number of data points</span> <span class="keyword">inline</span> <span class="keywordtype">size_t</span> kdtree_get_point_count()<span class="keyword"> const </span>{ ... } <span class="comment">// Returns the distance between the vector "p1[0:size-1]" and the data point with index "idx_p2" stored in the class:</span> <span class="keyword">inline</span> <span class="keywordtype">float</span> kdtree_distance(<span class="keyword">const</span> <span class="keywordtype">float</span> *p1, <span class="keyword">const</span> <span class="keywordtype">size_t</span> idx_p2,<span class="keywordtype">size_t</span> <a class="code" href="namespacemrpt_1_1math.html#a632ae0aecf78103f87f18f9ac33f7170">size</a>)<span class="keyword"> const </span>{ ... } <span class="comment">// Returns the dim'th component of the idx'th point in the class:</span> <span class="keyword">inline</span> num_t kdtree_get_pt(<span class="keyword">const</span> <span class="keywordtype">size_t</span> idx, <span class="keywordtype">int</span> dim)<span class="keyword"> const </span>{ ... } <span class="comment">// Optional bounding-box computation: return false to default to a standard bbox computation loop.</span> <span class="comment">// Return true if the BBOX was already computed by the class and returned in "bb" so it can be avoided to redo it again.</span> <span class="comment">// Look at bb.size() to find out the expected dimensionality (e.g. 2 or 3 for point clouds)</span> <span class="keyword">template</span> <<span class="keyword">class</span> BBOX> <span class="keywordtype">bool</span> kdtree_get_bbox(BBOX &bb)<span class="keyword"> const</span> <span class="keyword"> </span>{ bb[0].low = ...; bb[0].high = ...; <span class="comment">// "x" limits</span> <span class="keywordflow">return</span> <span class="keyword">true</span>; } </pre></div><p>The KD-tree index will be built on demand only upon call of any of the query methods provided by this class.</p> <p>Notice that there is only ONE internal cached KD-tree, so if a method to query a 2D point is called, then another method for 3D points, then again the 2D method, three KD-trees will be built. So, try to group all the calls for a given dimensionality together or build different class instances for queries of each dimensionality, etc.</p> <dl class="see"><dt><b>See also:</b></dt><dd>See some of the <a class="el" href="classmrpt_1_1math_1_1_k_d_tree_capable.html#a1f2be858dfb40e06cbae68375c98941b" title="CRTP helper method.">derived</a> classes for example implementations. See also the documentation of <a class="el" href="namespacenanoflann.html">nanoflann</a> </dd></dl> </div> <p><code>#include <<a class="el" href="_k_d_tree_capable_8h_source.html">mrpt/math/KDTreeCapable.h</a>></code></p> <div class="dynheader"> Inheritance diagram for mrpt::math::KDTreeCapable:</div> <div class="dyncontent"> <div class="center"><img src="classmrpt_1_1math_1_1_k_d_tree_capable__inherit__graph.png" border="0" usemap="#mrpt_1_1math_1_1_k_d_tree_capable_inherit__map" alt="Inheritance graph"/></div> <map name="mrpt_1_1math_1_1_k_d_tree_capable_inherit__map" id="mrpt_1_1math_1_1_k_d_tree_capable_inherit__map"> <area shape="rect" id="node3" href="classmrpt_1_1math_1_1_k_d_tree_capable.html" title="mrpt::math::KDTreeCapable\< CPointsMap \>" alt="" coords="501,56,784,83"/><area shape="rect" id="node13" href="classmrpt_1_1math_1_1_k_d_tree_capable.html" title="mrpt::math::KDTreeCapable\< CFeatureListKDTree\< FEAT \> \>" alt="" coords="449,107,837,133"/><area shape="rect" id="node17" href="classmrpt_1_1math_1_1_k_d_tree_capable.html" title="mrpt::math::KDTreeCapable\< CFeatureList \>" alt="" coords="500,157,785,184"/><area shape="rect" id="node5" href="classmrpt_1_1slam_1_1_c_points_map.html" title="A cloud of points in 2D or 3D, which can be built from a sequence of laser scans or other sensors..." alt="" coords="915,56,1079,83"/><area shape="rect" id="node7" href="classmrpt_1_1slam_1_1_c_coloured_points_map.html" title="A map of 2D/3D points with individual colours (RGB)." alt="" coords="1159,5,1375,32"/><area shape="rect" id="node9" href="classmrpt_1_1slam_1_1_c_simple_points_map.html" title="A cloud of points in 2D or 3D, which can be built from a sequence of laser scans." alt="" coords="1165,56,1369,83"/><area shape="rect" id="node11" href="classmrpt_1_1slam_1_1_c_weighted_points_map.html" title="A cloud of points in 2D or 3D, which can be built from a sequence of laser scans." alt="" coords="1157,107,1376,133"/><area shape="rect" id="node15" href="classmrpt_1_1vision_1_1_c_feature_list_k_d_tree.html" title="Helper class: KD-tree search class for vector<KeyPoint>: Call mark_as_outdated() to force rebuilding ..." alt="" coords="888,107,1107,133"/><area shape="rect" id="node19" href="classmrpt_1_1vision_1_1_c_feature_list.html" title="A list of visual features, to be used as output by detectors, as input/output by trackers, etc." alt="" coords="911,157,1084,184"/></map> <center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div> <p><a href="classmrpt_1_1math_1_1_k_d_tree_capable-members.html">List of all members.</a></p> <table class="memberdecls"> <tr><td colspan="2"><h2><a name="nested-classes"></a> Classes</h2></td></tr> <tr><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structmrpt_1_1math_1_1_k_d_tree_capable_1_1_t_k_d_tree_data_holder.html">TKDTreeDataHolder</a></td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Internal structure with the KD-tree representation (mainly used to avoid copying pointers with the = operator) <a href="structmrpt_1_1math_1_1_k_d_tree_capable_1_1_t_k_d_tree_data_holder.html#details">More...</a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structmrpt_1_1math_1_1_k_d_tree_capable_1_1_t_k_d_tree_search_params.html">TKDTreeSearchParams</a></td></tr> <tr><td colspan="2"><h2><a name="pub-types"></a> Public Types</h2></td></tr> <tr><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="classmrpt_1_1math_1_1_k_d_tree_capable.html">KDTreeCapable</a>< Derived, <br class="typebreak"/> num_t, metric_t > </td><td class="memItemRight" valign="bottom"><a class="el" href="classmrpt_1_1math_1_1_k_d_tree_capable.html#ae848e2006de4cda4f4a50d0c057d086c">self_t</a></td></tr> <tr><td colspan="2"><h2><a name="pub-methods"></a> Public Member Functions</h2></td></tr> <tr><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classmrpt_1_1math_1_1_k_d_tree_capable.html#a64b7fa73845473d69b4677109826f167">KDTreeCapable</a> ()</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Constructor. <a href="#a64b7fa73845473d69b4677109826f167"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classmrpt_1_1math_1_1_k_d_tree_capable.html#ad811570de62b2a46232e85050b483b42">~KDTreeCapable</a> ()</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Destructor (nothing needed to do here) <a href="#ad811570de62b2a46232e85050b483b42"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">const Derived & </td><td class="memItemRight" valign="bottom"><a class="el" href="classmrpt_1_1math_1_1_k_d_tree_capable.html#a1f2be858dfb40e06cbae68375c98941b">derived</a> () const </td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">CRTP helper method. <a href="#a1f2be858dfb40e06cbae68375c98941b"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">Derived & </td><td class="memItemRight" valign="bottom"><a class="el" href="classmrpt_1_1math_1_1_k_d_tree_capable.html#a0be68a7843dfe5d5dfa5206c06e3d4fb">derived</a> ()</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">CRTP helper method. <a href="#a0be68a7843dfe5d5dfa5206c06e3d4fb"></a><br/></td></tr> <tr><td colspan="2"><div class="groupHeader">Public utility methods to query the KD-tree</div></td></tr> <tr><td class="memItemLeft" align="right" valign="top">size_t </td><td class="memItemRight" valign="bottom"><a class="el" href="classmrpt_1_1math_1_1_k_d_tree_capable.html#ae9c0bb8eae4945085a0b03408adaa180">kdTreeClosestPoint2D</a> (float x0, float y0, float &out_x, float &out_y, float &out_dist_sqr) const </td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">KD Tree-based search for the closest point (only ONE) to some given 2D coordinates. <a href="#ae9c0bb8eae4945085a0b03408adaa180"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">size_t </td><td class="memItemRight" valign="bottom"><a class="el" href="classmrpt_1_1math_1_1_k_d_tree_capable.html#acccf80ebe86d7512a2eabb1f4cd7d5e7">kdTreeClosestPoint2D</a> (float x0, float y0, float &out_dist_sqr) const </td></tr> <tr><td class="memItemLeft" align="right" valign="top">size_t </td><td class="memItemRight" valign="bottom"><a class="el" href="classmrpt_1_1math_1_1_k_d_tree_capable.html#aa931ad90835e719b966cf61c317c6e6d">kdTreeClosestPoint2D</a> (const <a class="el" href="structmrpt_1_1math_1_1_t_point2_d.html">TPoint2D</a> &p0, <a class="el" href="structmrpt_1_1math_1_1_t_point2_d.html">TPoint2D</a> &pOut, float &outDistSqr) const </td></tr> <tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="classmrpt_1_1math_1_1_k_d_tree_capable.html#aa8a35f96809c7677b730f8282c77e1ac">kdTreeClosestPoint2DsqrError</a> (float x0, float y0) const </td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Like kdTreeClosestPoint2D, but just return the square error from some point to its closest neighbor. <a href="#aa8a35f96809c7677b730f8282c77e1ac"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="classmrpt_1_1math_1_1_k_d_tree_capable.html#abee2f8ff656e8eca62d0444021577776">kdTreeClosestPoint2DsqrError</a> (const <a class="el" href="structmrpt_1_1math_1_1_t_point2_d.html">TPoint2D</a> &p0) const </td></tr> <tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classmrpt_1_1math_1_1_k_d_tree_capable.html#a9edfbd2ada1466c02e7bf136c39ca9dd">kdTreeTwoClosestPoint2D</a> (float x0, float y0, float &out_x1, float &out_y1, float &out_x2, float &out_y2, float &out_dist_sqr1, float &out_dist_sqr2) const </td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">KD Tree-based search for the TWO closest point to some given 2D coordinates. <a href="#a9edfbd2ada1466c02e7bf136c39ca9dd"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classmrpt_1_1math_1_1_k_d_tree_capable.html#ad9af4bb0f1547c6718c7a5ef5f3e7591">kdTreeTwoClosestPoint2D</a> (const <a class="el" href="structmrpt_1_1math_1_1_t_point2_d.html">TPoint2D</a> &p0, <a class="el" href="structmrpt_1_1math_1_1_t_point2_d.html">TPoint2D</a> &pOut1, <a class="el" href="structmrpt_1_1math_1_1_t_point2_d.html">TPoint2D</a> &pOut2, float &outDistSqr1, float &outDistSqr2) const </td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classstd_1_1vector.html">std::vector</a>< int > </td><td class="memItemRight" valign="bottom"><a class="el" href="classmrpt_1_1math_1_1_k_d_tree_capable.html#abf55cf62066eeff4c9db446b040c481d">kdTreeNClosestPoint2D</a> (float x0, float y0, size_t knn, <a class="el" href="classstd_1_1vector.html">std::vector</a>< float > &out_x, <a class="el" href="classstd_1_1vector.html">std::vector</a>< float > &out_y, <a class="el" href="classstd_1_1vector.html">std::vector</a>< float > &out_dist_sqr) const </td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">KD Tree-based search for the N closest point to some given 2D coordinates. <a href="#abf55cf62066eeff4c9db446b040c481d"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classstd_1_1vector.html">std::vector</a>< int > </td><td class="memItemRight" valign="bottom"><a class="el" href="classmrpt_1_1math_1_1_k_d_tree_capable.html#a98394b54ad28658bdb397116bcd7a1d7">kdTreeNClosestPoint2D</a> (const <a class="el" href="structmrpt_1_1math_1_1_t_point2_d.html">TPoint2D</a> &p0, size_t N, <a class="el" href="classstd_1_1vector.html">std::vector</a>< <a class="el" href="structmrpt_1_1math_1_1_t_point2_d.html">TPoint2D</a> > &pOut, <a class="el" href="classstd_1_1vector.html">std::vector</a>< float > &outDistSqr) const </td></tr> <tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classmrpt_1_1math_1_1_k_d_tree_capable.html#a17665632b43c9a65530cbc97581128bc">kdTreeNClosestPoint2DIdx</a> (float x0, float y0, size_t knn, <a class="el" href="classstd_1_1vector.html">std::vector</a>< int > &out_idx, <a class="el" href="classstd_1_1vector.html">std::vector</a>< float > &out_dist_sqr) const </td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">KD Tree-based search for the N closest point to some given 2D coordinates and returns their indexes. <a href="#a17665632b43c9a65530cbc97581128bc"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classmrpt_1_1math_1_1_k_d_tree_capable.html#a6d16ab2d09b0e2f59b368ce43f4ba944">kdTreeNClosestPoint2DIdx</a> (const <a class="el" href="structmrpt_1_1math_1_1_t_point2_d.html">TPoint2D</a> &p0, size_t N, <a class="el" href="classstd_1_1vector.html">std::vector</a>< int > &outIdx, <a class="el" href="classstd_1_1vector.html">std::vector</a>< float > &outDistSqr) const </td></tr> <tr><td class="memItemLeft" align="right" valign="top">size_t </td><td class="memItemRight" valign="bottom"><a class="el" href="classmrpt_1_1math_1_1_k_d_tree_capable.html#a89eab3ed58a61ba1dd561552562a1215">kdTreeClosestPoint3D</a> (float x0, float y0, float z0, float &out_x, float &out_y, float &out_z, float &out_dist_sqr) const </td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">KD Tree-based search for the closest point (only ONE) to some given 3D coordinates. <a href="#a89eab3ed58a61ba1dd561552562a1215"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">size_t </td><td class="memItemRight" valign="bottom"><a class="el" href="classmrpt_1_1math_1_1_k_d_tree_capable.html#a44afd69e49d989baa2973ffd7f7037e6">kdTreeClosestPoint3D</a> (float x0, float y0, float z0, float &out_dist_sqr) const </td></tr> <tr><td class="memItemLeft" align="right" valign="top">size_t </td><td class="memItemRight" valign="bottom"><a class="el" href="classmrpt_1_1math_1_1_k_d_tree_capable.html#a2f18fd292f21f156b9ac5ae3503f44aa">kdTreeClosestPoint3D</a> (const <a class="el" href="structmrpt_1_1math_1_1_t_point3_d.html">TPoint3D</a> &p0, <a class="el" href="structmrpt_1_1math_1_1_t_point3_d.html">TPoint3D</a> &pOut, float &outDistSqr) const </td></tr> <tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classmrpt_1_1math_1_1_k_d_tree_capable.html#a9fd5af04995704c55b1a17f4515da803">kdTreeNClosestPoint3D</a> (float x0, float y0, float z0, size_t knn, <a class="el" href="classstd_1_1vector.html">std::vector</a>< float > &out_x, <a class="el" href="classstd_1_1vector.html">std::vector</a>< float > &out_y, <a class="el" href="classstd_1_1vector.html">std::vector</a>< float > &out_z, <a class="el" href="classstd_1_1vector.html">std::vector</a>< float > &out_dist_sqr) const </td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">KD Tree-based search for the N closest points to some given 3D coordinates. <a href="#a9fd5af04995704c55b1a17f4515da803"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classmrpt_1_1math_1_1_k_d_tree_capable.html#a61a35dc755ae1225f6d09e6d81eefb05">kdTreeNClosestPoint3D</a> (const <a class="el" href="structmrpt_1_1math_1_1_t_point3_d.html">TPoint3D</a> &p0, size_t N, <a class="el" href="classstd_1_1vector.html">std::vector</a>< <a class="el" href="structmrpt_1_1math_1_1_t_point3_d.html">TPoint3D</a> > &pOut, <a class="el" href="classstd_1_1vector.html">std::vector</a>< float > &outDistSqr) const </td></tr> <tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classmrpt_1_1math_1_1_k_d_tree_capable.html#a343546d3f23d9c1df671c4d8c5c9eb39">kdTreeNClosestPoint3DIdx</a> (float x0, float y0, float z0, size_t knn, <a class="el" href="classstd_1_1vector.html">std::vector</a>< int > &out_idx, <a class="el" href="classstd_1_1vector.html">std::vector</a>< float > &out_dist_sqr) const </td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">KD Tree-based search for the N closest point to some given 3D coordinates and returns their indexes. <a href="#a343546d3f23d9c1df671c4d8c5c9eb39"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classmrpt_1_1math_1_1_k_d_tree_capable.html#ab6112525867566c872402236781413e7">kdTreeNClosestPoint3DIdx</a> (const <a class="el" href="structmrpt_1_1math_1_1_t_point3_d.html">TPoint3D</a> &p0, size_t N, <a class="el" href="classstd_1_1vector.html">std::vector</a>< int > &outIdx, <a class="el" href="classstd_1_1vector.html">std::vector</a>< float > &outDistSqr) const </td></tr> <tr><td colspan="2"><h2><a name="pub-attribs"></a> Public Attributes</h2></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="structmrpt_1_1math_1_1_k_d_tree_capable_1_1_t_k_d_tree_search_params.html">TKDTreeSearchParams</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classmrpt_1_1math_1_1_k_d_tree_capable.html#a65f5da9a222c2c7b913f7e6242c6c77e">kdtree_search_params</a></td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Parameters to tune the ANN searches. <a href="#a65f5da9a222c2c7b913f7e6242c6c77e"></a><br/></td></tr> <tr><td colspan="2"><h2><a name="pro-methods"></a> Protected Member Functions</h2></td></tr> <tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classmrpt_1_1math_1_1_k_d_tree_capable.html#a257dd22c1a52d1150117195aaf416f16">kdtree_mark_as_outdated</a> () const </td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">To be called by child classes when KD tree data changes. <a href="#a257dd22c1a52d1150117195aaf416f16"></a><br/></td></tr> <tr><td colspan="2"><h2><a name="pri-methods"></a> Private Member Functions</h2></td></tr> <tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classmrpt_1_1math_1_1_k_d_tree_capable.html#ac0bd164a47e9c98506a301d2146b316e">rebuild_kdTree_2D</a> () const </td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Rebuild, if needed the KD-tree for 2D (nDims=2), 3D (nDims=3), ... asking the child class for the data points. <a href="#ac0bd164a47e9c98506a301d2146b316e"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classmrpt_1_1math_1_1_k_d_tree_capable.html#a71540b68861ea0afaea0b0dd24bd7c14">rebuild_kdTree_3D</a> () const </td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Rebuild, if needed the KD-tree for 2D (nDims=2), 3D (nDims=3), ... asking the child class for the data points. <a href="#a71540b68861ea0afaea0b0dd24bd7c14"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classmrpt_1_1math_1_1_k_d_tree_capable.html#a02359aa8c2c687a9195414692d8f7036">rebuild_kdTree_Nd</a> (const size_t nDims) const </td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Rebuild, if needed the KD-tree for 2D (nDims=2), 3D (nDims=3), ... asking the child class for the data points. <a href="#a02359aa8c2c687a9195414692d8f7036"></a><br/></td></tr> <tr><td colspan="2"><h2><a name="pri-attribs"></a> Private Attributes</h2></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="structmrpt_1_1math_1_1_k_d_tree_capable_1_1_t_k_d_tree_data_holder.html">TKDTreeDataHolder</a>< 2 > </td><td class="memItemRight" valign="bottom"><a class="el" href="classmrpt_1_1math_1_1_k_d_tree_capable.html#a3abb2bf223afb15c769598d0ef65bcd9">m_kdtree2d_data</a></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="structmrpt_1_1math_1_1_k_d_tree_capable_1_1_t_k_d_tree_data_holder.html">TKDTreeDataHolder</a>< 3 > </td><td class="memItemRight" valign="bottom"><a class="el" href="classmrpt_1_1math_1_1_k_d_tree_capable.html#a2fe9f0119fbc4ed259f761b4cb42eba6">m_kdtree3d_data</a></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="structmrpt_1_1math_1_1_k_d_tree_capable_1_1_t_k_d_tree_data_holder.html">TKDTreeDataHolder</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classmrpt_1_1math_1_1_k_d_tree_capable.html#a18737e23301e1deae98c33adb52566fc">m_kdtreeNd_data</a></td></tr> <tr><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classmrpt_1_1math_1_1_k_d_tree_capable.html#af3dfc28c75edd8ba3e8ea4b4caced0aa">m_kdtree_is_uptodate</a></td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">whether the KD tree needs to be rebuilt or not. <a href="#af3dfc28c75edd8ba3e8ea4b4caced0aa"></a><br/></td></tr> </table> <hr/><h2>Member Typedef Documentation</h2> <a class="anchor" id="ae848e2006de4cda4f4a50d0c057d086c"></a><!-- doxytag: member="mrpt::math::KDTreeCapable::self_t" ref="ae848e2006de4cda4f4a50d0c057d086c" args="" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">typedef <a class="el" href="classmrpt_1_1math_1_1_k_d_tree_capable.html">KDTreeCapable</a><Derived,num_t,metric_t> <a class="el" href="classmrpt_1_1math_1_1_k_d_tree_capable.html#ae848e2006de4cda4f4a50d0c057d086c">mrpt::math::KDTreeCapable::self_t</a></td> </tr> </table> </div> <div class="memdoc"> <p>Definition at line <a class="el" href="_k_d_tree_capable_8h_source.html#l00090">90</a> of file <a class="el" href="_k_d_tree_capable_8h_source.html">KDTreeCapable.h</a>.</p> </div> </div> <hr/><h2>Constructor & Destructor Documentation</h2> <a class="anchor" id="a64b7fa73845473d69b4677109826f167"></a><!-- doxytag: member="mrpt::math::KDTreeCapable::KDTreeCapable" ref="a64b7fa73845473d69b4677109826f167" args="()" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">mrpt::math::KDTreeCapable::KDTreeCapable </td> <td>(</td> <td class="paramname"></td><td>)</td> <td><code> [inline]</code></td> </tr> </table> </div> <div class="memdoc"> <p>Constructor. </p> <p>Definition at line <a class="el" href="_k_d_tree_capable_8h_source.html#l00094">94</a> of file <a class="el" href="_k_d_tree_capable_8h_source.html">KDTreeCapable.h</a>.</p> </div> </div> <a class="anchor" id="ad811570de62b2a46232e85050b483b42"></a><!-- doxytag: member="mrpt::math::KDTreeCapable::~KDTreeCapable" ref="ad811570de62b2a46232e85050b483b42" args="()" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">mrpt::math::KDTreeCapable::~KDTreeCapable </td> <td>(</td> <td class="paramname"></td><td>)</td> <td><code> [inline]</code></td> </tr> </table> </div> <div class="memdoc"> <p>Destructor (nothing needed to do here) </p> <p>Definition at line <a class="el" href="_k_d_tree_capable_8h_source.html#l00097">97</a> of file <a class="el" href="_k_d_tree_capable_8h_source.html">KDTreeCapable.h</a>.</p> </div> </div> <hr/><h2>Member Function Documentation</h2> <a class="anchor" id="a1f2be858dfb40e06cbae68375c98941b"></a><!-- doxytag: member="mrpt::math::KDTreeCapable::derived" ref="a1f2be858dfb40e06cbae68375c98941b" args="() const " --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">const Derived& mrpt::math::KDTreeCapable::derived </td> <td>(</td> <td class="paramname"></td><td>)</td> <td> const<code> [inline]</code></td> </tr> </table> </div> <div class="memdoc"> <p>CRTP helper method. </p> <p>Definition at line <a class="el" href="_k_d_tree_capable_8h_source.html#l00100">100</a> of file <a class="el" href="_k_d_tree_capable_8h_source.html">KDTreeCapable.h</a>.</p> <p>Referenced by <a class="el" href="_k_d_tree_capable_8h_source.html#l00136">mrpt::math::KDTreeCapable< CFeatureList >::kdTreeClosestPoint2D()</a>, <a class="el" href="_k_d_tree_capable_8h_source.html#l00229">mrpt::math::KDTreeCapable< CFeatureList >::kdTreeTwoClosestPoint2D()</a>, <a class="el" href="_k_d_tree_capable_8h_source.html#l00293">mrpt::math::KDTreeCapable< CFeatureList >::kdTreeNClosestPoint2D()</a>, <a class="el" href="_k_d_tree_capable_8h_source.html#l00394">mrpt::math::KDTreeCapable< CFeatureList >::kdTreeClosestPoint3D()</a>, <a class="el" href="_k_d_tree_capable_8h_source.html#l00480">mrpt::math::KDTreeCapable< CFeatureList >::kdTreeNClosestPoint3D()</a>, <a class="el" href="_k_d_tree_capable_8h_source.html#l00615">mrpt::math::KDTreeCapable< CFeatureList >::rebuild_kdTree_2D()</a>, <a class="el" href="_k_d_tree_capable_8h_source.html#l00640">mrpt::math::KDTreeCapable< CFeatureList >::rebuild_kdTree_3D()</a>, and <a class="el" href="_k_d_tree_capable_8h_source.html#l00665">mrpt::math::KDTreeCapable< CFeatureList >::rebuild_kdTree_Nd()</a>.</p> </div> </div> <a class="anchor" id="a0be68a7843dfe5d5dfa5206c06e3d4fb"></a><!-- doxytag: member="mrpt::math::KDTreeCapable::derived" ref="a0be68a7843dfe5d5dfa5206c06e3d4fb" args="()" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">Derived& mrpt::math::KDTreeCapable::derived </td> <td>(</td> <td class="paramname"></td><td>)</td> <td><code> [inline]</code></td> </tr> </table> </div> <div class="memdoc"> <p>CRTP helper method. </p> <p>Definition at line <a class="el" href="_k_d_tree_capable_8h_source.html#l00102">102</a> of file <a class="el" href="_k_d_tree_capable_8h_source.html">KDTreeCapable.h</a>.</p> </div> </div> <a class="anchor" id="a257dd22c1a52d1150117195aaf416f16"></a><!-- doxytag: member="mrpt::math::KDTreeCapable::kdtree_mark_as_outdated" ref="a257dd22c1a52d1150117195aaf416f16" args="() const " --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void mrpt::math::KDTreeCapable::kdtree_mark_as_outdated </td> <td>(</td> <td class="paramname"></td><td>)</td> <td> const<code> [inline, protected]</code></td> </tr> </table> </div> <div class="memdoc"> <p>To be called by child classes when KD tree data changes. </p> <p>Definition at line <a class="el" href="_k_d_tree_capable_8h_source.html#l00575">575</a> of file <a class="el" href="_k_d_tree_capable_8h_source.html">KDTreeCapable.h</a>.</p> </div> </div> <a class="anchor" id="ae9c0bb8eae4945085a0b03408adaa180"></a><!-- doxytag: member="mrpt::math::KDTreeCapable::kdTreeClosestPoint2D" ref="ae9c0bb8eae4945085a0b03408adaa180" args="(float x0, float y0, float &out_x, float &out_y, float &out_dist_sqr) const " --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">size_t mrpt::math::KDTreeCapable::kdTreeClosestPoint2D </td> <td>(</td> <td class="paramtype">float </td> <td class="paramname"><em>x0</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">float </td> <td class="paramname"><em>y0</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">float & </td> <td class="paramname"><em>out_x</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">float & </td> <td class="paramname"><em>out_y</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">float & </td> <td class="paramname"><em>out_dist_sqr</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td> const<code> [inline]</code></td> </tr> </table> </div> <div class="memdoc"> <p>KD Tree-based search for the closest point (only ONE) to some given 2D coordinates. </p> <p>This method automatically build the "m_kdtree_data" structure when:</p> <ul> <li>It is called for the first time</li> <li>The map has changed</li> <li>The KD-tree was build for 3D.</li> </ul> <dl><dt><b>Parameters:</b></dt><dd> <table class="params"> <tr><td class="paramname">x0</td><td>The X coordinate of the query. </td></tr> <tr><td class="paramname">y0</td><td>The Y coordinate of the query. </td></tr> <tr><td class="paramname">out_x</td><td>The X coordinate of the found closest correspondence. </td></tr> <tr><td class="paramname">out_y</td><td>The Y coordinate of the found closest correspondence. </td></tr> <tr><td class="paramname">out_dist_sqr</td><td>The square distance between the query and the returned point.</td></tr> </table> </dd> </dl> <dl class="return"><dt><b>Returns:</b></dt><dd>The index of the closest point in the map array. </dd></dl> <dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="classmrpt_1_1math_1_1_k_d_tree_capable.html#a89eab3ed58a61ba1dd561552562a1215" title="KD Tree-based search for the closest point (only ONE) to some given 3D coordinates.">kdTreeClosestPoint3D</a>, <a class="el" href="classmrpt_1_1math_1_1_k_d_tree_capable.html#a9edfbd2ada1466c02e7bf136c39ca9dd" title="KD Tree-based search for the TWO closest point to some given 2D coordinates.">kdTreeTwoClosestPoint2D</a> </dd></dl> <p>Definition at line <a class="el" href="_k_d_tree_capable_8h_source.html#l00136">136</a> of file <a class="el" href="_k_d_tree_capable_8h_source.html">KDTreeCapable.h</a>.</p> <p>Referenced by <a class="el" href="_k_d_tree_capable_8h_source.html#l00189">mrpt::math::KDTreeCapable< CFeatureList >::kdTreeClosestPoint2D()</a>, and <a class="el" href="_k_d_tree_capable_8h_source.html#l00199">mrpt::math::KDTreeCapable< CFeatureList >::kdTreeClosestPoint2DsqrError()</a>.</p> </div> </div> <a class="anchor" id="acccf80ebe86d7512a2eabb1f4cd7d5e7"></a><!-- doxytag: member="mrpt::math::KDTreeCapable::kdTreeClosestPoint2D" ref="acccf80ebe86d7512a2eabb1f4cd7d5e7" args="(float x0, float y0, float &out_dist_sqr) const " --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">size_t mrpt::math::KDTreeCapable::kdTreeClosestPoint2D </td> <td>(</td> <td class="paramtype">float </td> <td class="paramname"><em>x0</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">float </td> <td class="paramname"><em>y0</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">float & </td> <td class="paramname"><em>out_dist_sqr</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td> const<code> [inline]</code></td> </tr> </table> </div> <div class="memdoc"> <p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p> <p>Definition at line <a class="el" href="_k_d_tree_capable_8h_source.html#l00166">166</a> of file <a class="el" href="_k_d_tree_capable_8h_source.html">KDTreeCapable.h</a>.</p> </div> </div> <a class="anchor" id="aa931ad90835e719b966cf61c317c6e6d"></a><!-- doxytag: member="mrpt::math::KDTreeCapable::kdTreeClosestPoint2D" ref="aa931ad90835e719b966cf61c317c6e6d" args="(const TPoint2D &p0, TPoint2D &pOut, float &outDistSqr) const " --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">size_t mrpt::math::KDTreeCapable::kdTreeClosestPoint2D </td> <td>(</td> <td class="paramtype">const <a class="el" href="structmrpt_1_1math_1_1_t_point2_d.html">TPoint2D</a> & </td> <td class="paramname"><em>p0</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="structmrpt_1_1math_1_1_t_point2_d.html">TPoint2D</a> & </td> <td class="paramname"><em>pOut</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">float & </td> <td class="paramname"><em>outDistSqr</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td> const<code> [inline]</code></td> </tr> </table> </div> <div class="memdoc"> <p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p> <p>Definition at line <a class="el" href="_k_d_tree_capable_8h_source.html#l00189">189</a> of file <a class="el" href="_k_d_tree_capable_8h_source.html">KDTreeCapable.h</a>.</p> </div> </div> <a class="anchor" id="aa8a35f96809c7677b730f8282c77e1ac"></a><!-- doxytag: member="mrpt::math::KDTreeCapable::kdTreeClosestPoint2DsqrError" ref="aa8a35f96809c7677b730f8282c77e1ac" args="(float x0, float y0) const " --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">float mrpt::math::KDTreeCapable::kdTreeClosestPoint2DsqrError </td> <td>(</td> <td class="paramtype">float </td> <td class="paramname"><em>x0</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">float </td> <td class="paramname"><em>y0</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td> const<code> [inline]</code></td> </tr> </table> </div> <div class="memdoc"> <p>Like kdTreeClosestPoint2D, but just return the square error from some point to its closest neighbor. </p> <p>Definition at line <a class="el" href="_k_d_tree_capable_8h_source.html#l00199">199</a> of file <a class="el" href="_k_d_tree_capable_8h_source.html">KDTreeCapable.h</a>.</p> <p>Referenced by <a class="el" href="_k_d_tree_capable_8h_source.html#l00208">mrpt::math::KDTreeCapable< CFeatureList >::kdTreeClosestPoint2DsqrError()</a>.</p> </div> </div> <a class="anchor" id="abee2f8ff656e8eca62d0444021577776"></a><!-- doxytag: member="mrpt::math::KDTreeCapable::kdTreeClosestPoint2DsqrError" ref="abee2f8ff656e8eca62d0444021577776" args="(const TPoint2D &p0) const " --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">float mrpt::math::KDTreeCapable::kdTreeClosestPoint2DsqrError </td> <td>(</td> <td class="paramtype">const <a class="el" href="structmrpt_1_1math_1_1_t_point2_d.html">TPoint2D</a> & </td> <td class="paramname"><em>p0</em></td><td>)</td> <td> const<code> [inline]</code></td> </tr> </table> </div> <div class="memdoc"> <p>Definition at line <a class="el" href="_k_d_tree_capable_8h_source.html#l00208">208</a> of file <a class="el" href="_k_d_tree_capable_8h_source.html">KDTreeCapable.h</a>.</p> </div> </div> <a class="anchor" id="a89eab3ed58a61ba1dd561552562a1215"></a><!-- doxytag: member="mrpt::math::KDTreeCapable::kdTreeClosestPoint3D" ref="a89eab3ed58a61ba1dd561552562a1215" args="(float x0, float y0, float z0, float &out_x, float &out_y, float &out_z, float &out_dist_sqr) const " --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">size_t mrpt::math::KDTreeCapable::kdTreeClosestPoint3D </td> <td>(</td> <td class="paramtype">float </td> <td class="paramname"><em>x0</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">float </td> <td class="paramname"><em>y0</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">float </td> <td class="paramname"><em>z0</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">float & </td> <td class="paramname"><em>out_x</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">float & </td> <td class="paramname"><em>out_y</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">float & </td> <td class="paramname"><em>out_z</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">float & </td> <td class="paramname"><em>out_dist_sqr</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td> const<code> [inline]</code></td> </tr> </table> </div> <div class="memdoc"> <p>KD Tree-based search for the closest point (only ONE) to some given 3D coordinates. </p> <p>This method automatically build the "m_kdtree_data" structure when:</p> <ul> <li>It is called for the first time</li> <li>The map has changed</li> <li>The KD-tree was build for 2D.</li> </ul> <dl><dt><b>Parameters:</b></dt><dd> <table class="params"> <tr><td class="paramname">x0</td><td>The X coordinate of the query. </td></tr> <tr><td class="paramname">y0</td><td>The Y coordinate of the query. </td></tr> <tr><td class="paramname">z0</td><td>The Z coordinate of the query. </td></tr> <tr><td class="paramname">out_x</td><td>The X coordinate of the found closest correspondence. </td></tr> <tr><td class="paramname">out_y</td><td>The Y coordinate of the found closest correspondence. </td></tr> <tr><td class="paramname">out_z</td><td>The Z coordinate of the found closest correspondence. </td></tr> <tr><td class="paramname">out_dist_sqr</td><td>The square distance between the query and the returned point.</td></tr> </table> </dd> </dl> <dl class="return"><dt><b>Returns:</b></dt><dd>The index of the closest point in the map array. </dd></dl> <dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="classmrpt_1_1math_1_1_k_d_tree_capable.html#ae9c0bb8eae4945085a0b03408adaa180" title="KD Tree-based search for the closest point (only ONE) to some given 2D coordinates.">kdTreeClosestPoint2D</a> </dd></dl> <p>Definition at line <a class="el" href="_k_d_tree_capable_8h_source.html#l00394">394</a> of file <a class="el" href="_k_d_tree_capable_8h_source.html">KDTreeCapable.h</a>.</p> <p>Referenced by <a class="el" href="_k_d_tree_capable_8h_source.html#l00454">mrpt::math::KDTreeCapable< CFeatureList >::kdTreeClosestPoint3D()</a>.</p> </div> </div> <a class="anchor" id="a44afd69e49d989baa2973ffd7f7037e6"></a><!-- doxytag: member="mrpt::math::KDTreeCapable::kdTreeClosestPoint3D" ref="a44afd69e49d989baa2973ffd7f7037e6" args="(float x0, float y0, float z0, float &out_dist_sqr) const " --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">size_t mrpt::math::KDTreeCapable::kdTreeClosestPoint3D </td> <td>(</td> <td class="paramtype">float </td> <td class="paramname"><em>x0</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">float </td> <td class="paramname"><em>y0</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">float </td> <td class="paramname"><em>z0</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">float & </td> <td class="paramname"><em>out_dist_sqr</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td> const<code> [inline]</code></td> </tr> </table> </div> <div class="memdoc"> <p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p> <p>Definition at line <a class="el" href="_k_d_tree_capable_8h_source.html#l00428">428</a> of file <a class="el" href="_k_d_tree_capable_8h_source.html">KDTreeCapable.h</a>.</p> </div> </div> <a class="anchor" id="a2f18fd292f21f156b9ac5ae3503f44aa"></a><!-- doxytag: member="mrpt::math::KDTreeCapable::kdTreeClosestPoint3D" ref="a2f18fd292f21f156b9ac5ae3503f44aa" args="(const TPoint3D &p0, TPoint3D &pOut, float &outDistSqr) const " --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">size_t mrpt::math::KDTreeCapable::kdTreeClosestPoint3D </td> <td>(</td> <td class="paramtype">const <a class="el" href="structmrpt_1_1math_1_1_t_point3_d.html">TPoint3D</a> & </td> <td class="paramname"><em>p0</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="structmrpt_1_1math_1_1_t_point3_d.html">TPoint3D</a> & </td> <td class="paramname"><em>pOut</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">float & </td> <td class="paramname"><em>outDistSqr</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td> const<code> [inline]</code></td> </tr> </table> </div> <div class="memdoc"> <p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p> <p>Definition at line <a class="el" href="_k_d_tree_capable_8h_source.html#l00454">454</a> of file <a class="el" href="_k_d_tree_capable_8h_source.html">KDTreeCapable.h</a>.</p> </div> </div> <a class="anchor" id="abf55cf62066eeff4c9db446b040c481d"></a><!-- doxytag: member="mrpt::math::KDTreeCapable::kdTreeNClosestPoint2D" ref="abf55cf62066eeff4c9db446b040c481d" args="(float x0, float y0, size_t knn, std::vector< float > &out_x, std::vector< float > &out_y, std::vector< float > &out_dist_sqr) const " --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname"><a class="el" href="classstd_1_1vector.html">std::vector</a><int> mrpt::math::KDTreeCapable::kdTreeNClosestPoint2D </td> <td>(</td> <td class="paramtype">float </td> <td class="paramname"><em>x0</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">float </td> <td class="paramname"><em>y0</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">size_t </td> <td class="paramname"><em>knn</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="classstd_1_1vector.html">std::vector</a>< float > & </td> <td class="paramname"><em>out_x</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="classstd_1_1vector.html">std::vector</a>< float > & </td> <td class="paramname"><em>out_y</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="classstd_1_1vector.html">std::vector</a>< float > & </td> <td class="paramname"><em>out_dist_sqr</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td> const<code> [inline]</code></td> </tr> </table> </div> <div class="memdoc"> <p>KD Tree-based search for the N closest point to some given 2D coordinates. </p> <p>This method automatically build the "m_kdtree_data" structure when:</p> <ul> <li>It is called for the first time</li> <li>The map has changed</li> <li>The KD-tree was build for 3D.</li> </ul> <dl><dt><b>Parameters:</b></dt><dd> <table class="params"> <tr><td class="paramname">x0</td><td>The X coordinate of the query. </td></tr> <tr><td class="paramname">y0</td><td>The Y coordinate of the query. </td></tr> <tr><td class="paramname">N</td><td>The number of closest points to search. </td></tr> <tr><td class="paramname">out_x</td><td>The vector containing the X coordinates of the correspondences. </td></tr> <tr><td class="paramname">out_y</td><td>The vector containing the Y coordinates of the correspondences. </td></tr> <tr><td class="paramname">out_dist_sqr</td><td>The vector containing the square distance between the query and the returned points.</td></tr> </table> </dd> </dl> <dl class="return"><dt><b>Returns:</b></dt><dd>The list of indices </dd></dl> <dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="classmrpt_1_1math_1_1_k_d_tree_capable.html#ae9c0bb8eae4945085a0b03408adaa180" title="KD Tree-based search for the closest point (only ONE) to some given 2D coordinates.">kdTreeClosestPoint2D</a> </dd> <dd> <a class="el" href="classmrpt_1_1math_1_1_k_d_tree_capable.html#a9edfbd2ada1466c02e7bf136c39ca9dd" title="KD Tree-based search for the TWO closest point to some given 2D coordinates.">kdTreeTwoClosestPoint2D</a> </dd></dl> <p>Definition at line <a class="el" href="_k_d_tree_capable_8h_source.html#l00293">293</a> of file <a class="el" href="_k_d_tree_capable_8h_source.html">KDTreeCapable.h</a>.</p> <p>Referenced by <a class="el" href="_k_d_tree_capable_8h_source.html#l00326">mrpt::math::KDTreeCapable< CFeatureList >::kdTreeNClosestPoint2D()</a>.</p> </div> </div> <a class="anchor" id="a98394b54ad28658bdb397116bcd7a1d7"></a><!-- doxytag: member="mrpt::math::KDTreeCapable::kdTreeNClosestPoint2D" ref="a98394b54ad28658bdb397116bcd7a1d7" args="(const TPoint2D &p0, size_t N, std::vector< TPoint2D > &pOut, std::vector< float > &outDistSqr) const " --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname"><a class="el" href="classstd_1_1vector.html">std::vector</a><int> mrpt::math::KDTreeCapable::kdTreeNClosestPoint2D </td> <td>(</td> <td class="paramtype">const <a class="el" href="structmrpt_1_1math_1_1_t_point2_d.html">TPoint2D</a> & </td> <td class="paramname"><em>p0</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">size_t </td> <td class="paramname"><em>N</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="classstd_1_1vector.html">std::vector</a>< <a class="el" href="structmrpt_1_1math_1_1_t_point2_d.html">TPoint2D</a> > & </td> <td class="paramname"><em>pOut</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="classstd_1_1vector.html">std::vector</a>< float > & </td> <td class="paramname"><em>outDistSqr</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td> const<code> [inline]</code></td> </tr> </table> </div> <div class="memdoc"> <p>Definition at line <a class="el" href="_k_d_tree_capable_8h_source.html#l00326">326</a> of file <a class="el" href="_k_d_tree_capable_8h_source.html">KDTreeCapable.h</a>.</p> </div> </div> <a class="anchor" id="a17665632b43c9a65530cbc97581128bc"></a><!-- doxytag: member="mrpt::math::KDTreeCapable::kdTreeNClosestPoint2DIdx" ref="a17665632b43c9a65530cbc97581128bc" args="(float x0, float y0, size_t knn, std::vector< int > &out_idx, std::vector< float > &out_dist_sqr) const " --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void mrpt::math::KDTreeCapable::kdTreeNClosestPoint2DIdx </td> <td>(</td> <td class="paramtype">float </td> <td class="paramname"><em>x0</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">float </td> <td class="paramname"><em>y0</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">size_t </td> <td class="paramname"><em>knn</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="classstd_1_1vector.html">std::vector</a>< int > & </td> <td class="paramname"><em>out_idx</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="classstd_1_1vector.html">std::vector</a>< float > & </td> <td class="paramname"><em>out_dist_sqr</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td> const<code> [inline]</code></td> </tr> </table> </div> <div class="memdoc"> <p>KD Tree-based search for the N closest point to some given 2D coordinates and returns their indexes. </p> <p>This method automatically build the "m_kdtree_data" structure when:</p> <ul> <li>It is called for the first time</li> <li>The map has changed</li> <li>The KD-tree was build for 3D.</li> </ul> <dl><dt><b>Parameters:</b></dt><dd> <table class="params"> <tr><td class="paramname">x0</td><td>The X coordinate of the query. </td></tr> <tr><td class="paramname">y0</td><td>The Y coordinate of the query. </td></tr> <tr><td class="paramname">N</td><td>The number of closest points to search. </td></tr> <tr><td class="paramname">out_idx</td><td>The indexes of the found closest correspondence. </td></tr> <tr><td class="paramname">out_dist_sqr</td><td>The square distance between the query and the returned point.</td></tr> </table> </dd> </dl> <dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="classmrpt_1_1math_1_1_k_d_tree_capable.html#ae9c0bb8eae4945085a0b03408adaa180" title="KD Tree-based search for the closest point (only ONE) to some given 2D coordinates.">kdTreeClosestPoint2D</a> </dd></dl> <p>Definition at line <a class="el" href="_k_d_tree_capable_8h_source.html#l00351">351</a> of file <a class="el" href="_k_d_tree_capable_8h_source.html">KDTreeCapable.h</a>.</p> <p>Referenced by <a class="el" href="_k_d_tree_capable_8h_source.html#l00373">mrpt::math::KDTreeCapable< CFeatureList >::kdTreeNClosestPoint2DIdx()</a>.</p> </div> </div> <a class="anchor" id="a6d16ab2d09b0e2f59b368ce43f4ba944"></a><!-- doxytag: member="mrpt::math::KDTreeCapable::kdTreeNClosestPoint2DIdx" ref="a6d16ab2d09b0e2f59b368ce43f4ba944" args="(const TPoint2D &p0, size_t N, std::vector< int > &outIdx, std::vector< float > &outDistSqr) const " --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void mrpt::math::KDTreeCapable::kdTreeNClosestPoint2DIdx </td> <td>(</td> <td class="paramtype">const <a class="el" href="structmrpt_1_1math_1_1_t_point2_d.html">TPoint2D</a> & </td> <td class="paramname"><em>p0</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">size_t </td> <td class="paramname"><em>N</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="classstd_1_1vector.html">std::vector</a>< int > & </td> <td class="paramname"><em>outIdx</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="classstd_1_1vector.html">std::vector</a>< float > & </td> <td class="paramname"><em>outDistSqr</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td> const<code> [inline]</code></td> </tr> </table> </div> <div class="memdoc"> <p>Definition at line <a class="el" href="_k_d_tree_capable_8h_source.html#l00373">373</a> of file <a class="el" href="_k_d_tree_capable_8h_source.html">KDTreeCapable.h</a>.</p> </div> </div> <a class="anchor" id="a9fd5af04995704c55b1a17f4515da803"></a><!-- doxytag: member="mrpt::math::KDTreeCapable::kdTreeNClosestPoint3D" ref="a9fd5af04995704c55b1a17f4515da803" args="(float x0, float y0, float z0, size_t knn, std::vector< float > &out_x, std::vector< float > &out_y, std::vector< float > &out_z, std::vector< float > &out_dist_sqr) const " --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void mrpt::math::KDTreeCapable::kdTreeNClosestPoint3D </td> <td>(</td> <td class="paramtype">float </td> <td class="paramname"><em>x0</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">float </td> <td class="paramname"><em>y0</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">float </td> <td class="paramname"><em>z0</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">size_t </td> <td class="paramname"><em>knn</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="classstd_1_1vector.html">std::vector</a>< float > & </td> <td class="paramname"><em>out_x</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="classstd_1_1vector.html">std::vector</a>< float > & </td> <td class="paramname"><em>out_y</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="classstd_1_1vector.html">std::vector</a>< float > & </td> <td class="paramname"><em>out_z</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="classstd_1_1vector.html">std::vector</a>< float > & </td> <td class="paramname"><em>out_dist_sqr</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td> const<code> [inline]</code></td> </tr> </table> </div> <div class="memdoc"> <p>KD Tree-based search for the N closest points to some given 3D coordinates. </p> <p>This method automatically build the "m_kdtree_data" structure when:</p> <ul> <li>It is called for the first time</li> <li>The map has changed</li> <li>The KD-tree was build for 2D.</li> </ul> <dl><dt><b>Parameters:</b></dt><dd> <table class="params"> <tr><td class="paramname">x0</td><td>The X coordinate of the query. </td></tr> <tr><td class="paramname">y0</td><td>The Y coordinate of the query. </td></tr> <tr><td class="paramname">z0</td><td>The Z coordinate of the query. </td></tr> <tr><td class="paramname">N</td><td>The number of closest points to search. </td></tr> <tr><td class="paramname">out_x</td><td>The vector containing the X coordinates of the correspondences. </td></tr> <tr><td class="paramname">out_y</td><td>The vector containing the Y coordinates of the correspondences. </td></tr> <tr><td class="paramname">out_z</td><td>The vector containing the Z coordinates of the correspondences. </td></tr> <tr><td class="paramname">out_dist_sqr</td><td>The vector containing the square distance between the query and the returned points.</td></tr> </table> </dd> </dl> <dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="classmrpt_1_1math_1_1_k_d_tree_capable.html#abf55cf62066eeff4c9db446b040c481d" title="KD Tree-based search for the N closest point to some given 2D coordinates.">kdTreeNClosestPoint2D</a> </dd></dl> <p>Definition at line <a class="el" href="_k_d_tree_capable_8h_source.html#l00480">480</a> of file <a class="el" href="_k_d_tree_capable_8h_source.html">KDTreeCapable.h</a>.</p> <p>Referenced by <a class="el" href="_k_d_tree_capable_8h_source.html#l00517">mrpt::math::KDTreeCapable< CFeatureList >::kdTreeNClosestPoint3D()</a>.</p> </div> </div> <a class="anchor" id="a61a35dc755ae1225f6d09e6d81eefb05"></a><!-- doxytag: member="mrpt::math::KDTreeCapable::kdTreeNClosestPoint3D" ref="a61a35dc755ae1225f6d09e6d81eefb05" args="(const TPoint3D &p0, size_t N, std::vector< TPoint3D > &pOut, std::vector< float > &outDistSqr) const " --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void mrpt::math::KDTreeCapable::kdTreeNClosestPoint3D </td> <td>(</td> <td class="paramtype">const <a class="el" href="structmrpt_1_1math_1_1_t_point3_d.html">TPoint3D</a> & </td> <td class="paramname"><em>p0</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">size_t </td> <td class="paramname"><em>N</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="classstd_1_1vector.html">std::vector</a>< <a class="el" href="structmrpt_1_1math_1_1_t_point3_d.html">TPoint3D</a> > & </td> <td class="paramname"><em>pOut</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="classstd_1_1vector.html">std::vector</a>< float > & </td> <td class="paramname"><em>outDistSqr</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td> const<code> [inline]</code></td> </tr> </table> </div> <div class="memdoc"> <p>Definition at line <a class="el" href="_k_d_tree_capable_8h_source.html#l00517">517</a> of file <a class="el" href="_k_d_tree_capable_8h_source.html">KDTreeCapable.h</a>.</p> </div> </div> <a class="anchor" id="a343546d3f23d9c1df671c4d8c5c9eb39"></a><!-- doxytag: member="mrpt::math::KDTreeCapable::kdTreeNClosestPoint3DIdx" ref="a343546d3f23d9c1df671c4d8c5c9eb39" args="(float x0, float y0, float z0, size_t knn, std::vector< int > &out_idx, std::vector< float > &out_dist_sqr) const " --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void mrpt::math::KDTreeCapable::kdTreeNClosestPoint3DIdx </td> <td>(</td> <td class="paramtype">float </td> <td class="paramname"><em>x0</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">float </td> <td class="paramname"><em>y0</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">float </td> <td class="paramname"><em>z0</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">size_t </td> <td class="paramname"><em>knn</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="classstd_1_1vector.html">std::vector</a>< int > & </td> <td class="paramname"><em>out_idx</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="classstd_1_1vector.html">std::vector</a>< float > & </td> <td class="paramname"><em>out_dist_sqr</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td> const<code> [inline]</code></td> </tr> </table> </div> <div class="memdoc"> <p>KD Tree-based search for the N closest point to some given 3D coordinates and returns their indexes. </p> <p>This method automatically build the "m_kdtree_data" structure when:</p> <ul> <li>It is called for the first time</li> <li>The map has changed</li> <li>The KD-tree was build for 2D.</li> </ul> <dl><dt><b>Parameters:</b></dt><dd> <table class="params"> <tr><td class="paramname">x0</td><td>The X coordinate of the query. </td></tr> <tr><td class="paramname">y0</td><td>The Y coordinate of the query. </td></tr> <tr><td class="paramname">z0</td><td>The Z coordinate of the query. </td></tr> <tr><td class="paramname">N</td><td>The number of closest points to search. </td></tr> <tr><td class="paramname">out_idx</td><td>The indexes of the found closest correspondence. </td></tr> <tr><td class="paramname">out_dist_sqr</td><td>The square distance between the query and the returned point.</td></tr> </table> </dd> </dl> <dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="classmrpt_1_1math_1_1_k_d_tree_capable.html#ae9c0bb8eae4945085a0b03408adaa180" title="KD Tree-based search for the closest point (only ONE) to some given 2D coordinates.">kdTreeClosestPoint2D</a> </dd></dl> <p>Definition at line <a class="el" href="_k_d_tree_capable_8h_source.html#l00543">543</a> of file <a class="el" href="_k_d_tree_capable_8h_source.html">KDTreeCapable.h</a>.</p> <p>Referenced by <a class="el" href="_k_d_tree_capable_8h_source.html#l00567">mrpt::math::KDTreeCapable< CFeatureList >::kdTreeNClosestPoint3DIdx()</a>.</p> </div> </div> <a class="anchor" id="ab6112525867566c872402236781413e7"></a><!-- doxytag: member="mrpt::math::KDTreeCapable::kdTreeNClosestPoint3DIdx" ref="ab6112525867566c872402236781413e7" args="(const TPoint3D &p0, size_t N, std::vector< int > &outIdx, std::vector< float > &outDistSqr) const " --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void mrpt::math::KDTreeCapable::kdTreeNClosestPoint3DIdx </td> <td>(</td> <td class="paramtype">const <a class="el" href="structmrpt_1_1math_1_1_t_point3_d.html">TPoint3D</a> & </td> <td class="paramname"><em>p0</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">size_t </td> <td class="paramname"><em>N</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="classstd_1_1vector.html">std::vector</a>< int > & </td> <td class="paramname"><em>outIdx</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="classstd_1_1vector.html">std::vector</a>< float > & </td> <td class="paramname"><em>outDistSqr</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td> const<code> [inline]</code></td> </tr> </table> </div> <div class="memdoc"> <p>Definition at line <a class="el" href="_k_d_tree_capable_8h_source.html#l00567">567</a> of file <a class="el" href="_k_d_tree_capable_8h_source.html">KDTreeCapable.h</a>.</p> </div> </div> <a class="anchor" id="a9edfbd2ada1466c02e7bf136c39ca9dd"></a><!-- doxytag: member="mrpt::math::KDTreeCapable::kdTreeTwoClosestPoint2D" ref="a9edfbd2ada1466c02e7bf136c39ca9dd" args="(float x0, float y0, float &out_x1, float &out_y1, float &out_x2, float &out_y2, float &out_dist_sqr1, float &out_dist_sqr2) const " --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void mrpt::math::KDTreeCapable::kdTreeTwoClosestPoint2D </td> <td>(</td> <td class="paramtype">float </td> <td class="paramname"><em>x0</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">float </td> <td class="paramname"><em>y0</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">float & </td> <td class="paramname"><em>out_x1</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">float & </td> <td class="paramname"><em>out_y1</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">float & </td> <td class="paramname"><em>out_x2</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">float & </td> <td class="paramname"><em>out_y2</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">float & </td> <td class="paramname"><em>out_dist_sqr1</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">float & </td> <td class="paramname"><em>out_dist_sqr2</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td> const<code> [inline]</code></td> </tr> </table> </div> <div class="memdoc"> <p>KD Tree-based search for the TWO closest point to some given 2D coordinates. </p> <p>This method automatically build the "m_kdtree_data" structure when:</p> <ul> <li>It is called for the first time</li> <li>The map has changed</li> <li>The KD-tree was build for 3D.</li> </ul> <dl><dt><b>Parameters:</b></dt><dd> <table class="params"> <tr><td class="paramname">x0</td><td>The X coordinate of the query. </td></tr> <tr><td class="paramname">y0</td><td>The Y coordinate of the query. </td></tr> <tr><td class="paramname">out_x1</td><td>The X coordinate of the first correspondence. </td></tr> <tr><td class="paramname">out_y1</td><td>The Y coordinate of the first correspondence. </td></tr> <tr><td class="paramname">out_x2</td><td>The X coordinate of the second correspondence. </td></tr> <tr><td class="paramname">out_y2</td><td>The Y coordinate of the second correspondence. </td></tr> <tr><td class="paramname">out_dist_sqr1</td><td>The square distance between the query and the first returned point. </td></tr> <tr><td class="paramname">out_dist_sqr2</td><td>The square distance between the query and the second returned point.</td></tr> </table> </dd> </dl> <dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="classmrpt_1_1math_1_1_k_d_tree_capable.html#ae9c0bb8eae4945085a0b03408adaa180" title="KD Tree-based search for the closest point (only ONE) to some given 2D coordinates.">kdTreeClosestPoint2D</a> </dd></dl> <p>Definition at line <a class="el" href="_k_d_tree_capable_8h_source.html#l00229">229</a> of file <a class="el" href="_k_d_tree_capable_8h_source.html">KDTreeCapable.h</a>.</p> <p>Referenced by <a class="el" href="_k_d_tree_capable_8h_source.html#l00266">mrpt::math::KDTreeCapable< CFeatureList >::kdTreeTwoClosestPoint2D()</a>.</p> </div> </div> <a class="anchor" id="ad9af4bb0f1547c6718c7a5ef5f3e7591"></a><!-- doxytag: member="mrpt::math::KDTreeCapable::kdTreeTwoClosestPoint2D" ref="ad9af4bb0f1547c6718c7a5ef5f3e7591" args="(const TPoint2D &p0, TPoint2D &pOut1, TPoint2D &pOut2, float &outDistSqr1, float &outDistSqr2) const " --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void mrpt::math::KDTreeCapable::kdTreeTwoClosestPoint2D </td> <td>(</td> <td class="paramtype">const <a class="el" href="structmrpt_1_1math_1_1_t_point2_d.html">TPoint2D</a> & </td> <td class="paramname"><em>p0</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="structmrpt_1_1math_1_1_t_point2_d.html">TPoint2D</a> & </td> <td class="paramname"><em>pOut1</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="structmrpt_1_1math_1_1_t_point2_d.html">TPoint2D</a> & </td> <td class="paramname"><em>pOut2</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">float & </td> <td class="paramname"><em>outDistSqr1</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">float & </td> <td class="paramname"><em>outDistSqr2</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td> const<code> [inline]</code></td> </tr> </table> </div> <div class="memdoc"> <p>Definition at line <a class="el" href="_k_d_tree_capable_8h_source.html#l00266">266</a> of file <a class="el" href="_k_d_tree_capable_8h_source.html">KDTreeCapable.h</a>.</p> </div> </div> <a class="anchor" id="ac0bd164a47e9c98506a301d2146b316e"></a><!-- doxytag: member="mrpt::math::KDTreeCapable::rebuild_kdTree_2D" ref="ac0bd164a47e9c98506a301d2146b316e" args="() const " --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void mrpt::math::KDTreeCapable::rebuild_kdTree_2D </td> <td>(</td> <td class="paramname"></td><td>)</td> <td> const<code> [inline, private]</code></td> </tr> </table> </div> <div class="memdoc"> <p>Rebuild, if needed the KD-tree for 2D (nDims=2), 3D (nDims=3), ... asking the child class for the data points. </p> <p>Definition at line <a class="el" href="_k_d_tree_capable_8h_source.html#l00615">615</a> of file <a class="el" href="_k_d_tree_capable_8h_source.html">KDTreeCapable.h</a>.</p> <p>Referenced by <a class="el" href="_k_d_tree_capable_8h_source.html#l00136">mrpt::math::KDTreeCapable< CFeatureList >::kdTreeClosestPoint2D()</a>, <a class="el" href="_k_d_tree_capable_8h_source.html#l00229">mrpt::math::KDTreeCapable< CFeatureList >::kdTreeTwoClosestPoint2D()</a>, <a class="el" href="_k_d_tree_capable_8h_source.html#l00293">mrpt::math::KDTreeCapable< CFeatureList >::kdTreeNClosestPoint2D()</a>, and <a class="el" href="_k_d_tree_capable_8h_source.html#l00351">mrpt::math::KDTreeCapable< CFeatureList >::kdTreeNClosestPoint2DIdx()</a>.</p> </div> </div> <a class="anchor" id="a71540b68861ea0afaea0b0dd24bd7c14"></a><!-- doxytag: member="mrpt::math::KDTreeCapable::rebuild_kdTree_3D" ref="a71540b68861ea0afaea0b0dd24bd7c14" args="() const " --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void mrpt::math::KDTreeCapable::rebuild_kdTree_3D </td> <td>(</td> <td class="paramname"></td><td>)</td> <td> const<code> [inline, private]</code></td> </tr> </table> </div> <div class="memdoc"> <p>Rebuild, if needed the KD-tree for 2D (nDims=2), 3D (nDims=3), ... asking the child class for the data points. </p> <p>Definition at line <a class="el" href="_k_d_tree_capable_8h_source.html#l00640">640</a> of file <a class="el" href="_k_d_tree_capable_8h_source.html">KDTreeCapable.h</a>.</p> <p>Referenced by <a class="el" href="_k_d_tree_capable_8h_source.html#l00394">mrpt::math::KDTreeCapable< CFeatureList >::kdTreeClosestPoint3D()</a>, <a class="el" href="_k_d_tree_capable_8h_source.html#l00480">mrpt::math::KDTreeCapable< CFeatureList >::kdTreeNClosestPoint3D()</a>, and <a class="el" href="_k_d_tree_capable_8h_source.html#l00543">mrpt::math::KDTreeCapable< CFeatureList >::kdTreeNClosestPoint3DIdx()</a>.</p> </div> </div> <a class="anchor" id="a02359aa8c2c687a9195414692d8f7036"></a><!-- doxytag: member="mrpt::math::KDTreeCapable::rebuild_kdTree_Nd" ref="a02359aa8c2c687a9195414692d8f7036" args="(const size_t nDims) const " --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void mrpt::math::KDTreeCapable::rebuild_kdTree_Nd </td> <td>(</td> <td class="paramtype">const size_t </td> <td class="paramname"><em>nDims</em></td><td>)</td> <td> const<code> [inline, private]</code></td> </tr> </table> </div> <div class="memdoc"> <p>Rebuild, if needed the KD-tree for 2D (nDims=2), 3D (nDims=3), ... asking the child class for the data points. </p> <p>Definition at line <a class="el" href="_k_d_tree_capable_8h_source.html#l00665">665</a> of file <a class="el" href="_k_d_tree_capable_8h_source.html">KDTreeCapable.h</a>.</p> </div> </div> <hr/><h2>Member Data Documentation</h2> <a class="anchor" id="a65f5da9a222c2c7b913f7e6242c6c77e"></a><!-- doxytag: member="mrpt::math::KDTreeCapable::kdtree_search_params" ref="a65f5da9a222c2c7b913f7e6242c6c77e" args="" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname"><a class="el" href="structmrpt_1_1math_1_1_k_d_tree_capable_1_1_t_k_d_tree_search_params.html">TKDTreeSearchParams</a> <a class="el" href="classmrpt_1_1math_1_1_k_d_tree_capable.html#a65f5da9a222c2c7b913f7e6242c6c77e">mrpt::math::KDTreeCapable::kdtree_search_params</a></td> </tr> </table> </div> <div class="memdoc"> <p>Parameters to tune the ANN searches. </p> <p>Definition at line <a class="el" href="_k_d_tree_capable_8h_source.html#l00116">116</a> of file <a class="el" href="_k_d_tree_capable_8h_source.html">KDTreeCapable.h</a>.</p> <p>Referenced by <a class="el" href="_k_d_tree_capable_8h_source.html#l00136">mrpt::math::KDTreeCapable< CFeatureList >::kdTreeClosestPoint2D()</a>, <a class="el" href="_k_d_tree_capable_8h_source.html#l00229">mrpt::math::KDTreeCapable< CFeatureList >::kdTreeTwoClosestPoint2D()</a>, <a class="el" href="_k_d_tree_capable_8h_source.html#l00293">mrpt::math::KDTreeCapable< CFeatureList >::kdTreeNClosestPoint2D()</a>, <a class="el" href="_k_d_tree_capable_8h_source.html#l00351">mrpt::math::KDTreeCapable< CFeatureList >::kdTreeNClosestPoint2DIdx()</a>, <a class="el" href="_k_d_tree_capable_8h_source.html#l00394">mrpt::math::KDTreeCapable< CFeatureList >::kdTreeClosestPoint3D()</a>, <a class="el" href="_k_d_tree_capable_8h_source.html#l00480">mrpt::math::KDTreeCapable< CFeatureList >::kdTreeNClosestPoint3D()</a>, <a class="el" href="_k_d_tree_capable_8h_source.html#l00543">mrpt::math::KDTreeCapable< CFeatureList >::kdTreeNClosestPoint3DIdx()</a>, <a class="el" href="_k_d_tree_capable_8h_source.html#l00615">mrpt::math::KDTreeCapable< CFeatureList >::rebuild_kdTree_2D()</a>, <a class="el" href="_k_d_tree_capable_8h_source.html#l00640">mrpt::math::KDTreeCapable< CFeatureList >::rebuild_kdTree_3D()</a>, and <a class="el" href="_k_d_tree_capable_8h_source.html#l00665">mrpt::math::KDTreeCapable< CFeatureList >::rebuild_kdTree_Nd()</a>.</p> </div> </div> <a class="anchor" id="a3abb2bf223afb15c769598d0ef65bcd9"></a><!-- doxytag: member="mrpt::math::KDTreeCapable::m_kdtree2d_data" ref="a3abb2bf223afb15c769598d0ef65bcd9" args="" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname"><a class="el" href="structmrpt_1_1math_1_1_k_d_tree_capable_1_1_t_k_d_tree_data_holder.html">TKDTreeDataHolder</a><2> <a class="el" href="classmrpt_1_1math_1_1_k_d_tree_capable.html#a3abb2bf223afb15c769598d0ef65bcd9">mrpt::math::KDTreeCapable::m_kdtree2d_data</a><code> [mutable, private]</code></td> </tr> </table> </div> <div class="memdoc"> <p>Definition at line <a class="el" href="_k_d_tree_capable_8h_source.html#l00609">609</a> of file <a class="el" href="_k_d_tree_capable_8h_source.html">KDTreeCapable.h</a>.</p> <p>Referenced by <a class="el" href="_k_d_tree_capable_8h_source.html#l00136">mrpt::math::KDTreeCapable< CFeatureList >::kdTreeClosestPoint2D()</a>, <a class="el" href="_k_d_tree_capable_8h_source.html#l00229">mrpt::math::KDTreeCapable< CFeatureList >::kdTreeTwoClosestPoint2D()</a>, <a class="el" href="_k_d_tree_capable_8h_source.html#l00293">mrpt::math::KDTreeCapable< CFeatureList >::kdTreeNClosestPoint2D()</a>, <a class="el" href="_k_d_tree_capable_8h_source.html#l00351">mrpt::math::KDTreeCapable< CFeatureList >::kdTreeNClosestPoint2DIdx()</a>, <a class="el" href="_k_d_tree_capable_8h_source.html#l00615">mrpt::math::KDTreeCapable< CFeatureList >::rebuild_kdTree_2D()</a>, <a class="el" href="_k_d_tree_capable_8h_source.html#l00640">mrpt::math::KDTreeCapable< CFeatureList >::rebuild_kdTree_3D()</a>, and <a class="el" href="_k_d_tree_capable_8h_source.html#l00665">mrpt::math::KDTreeCapable< CFeatureList >::rebuild_kdTree_Nd()</a>.</p> </div> </div> <a class="anchor" id="a2fe9f0119fbc4ed259f761b4cb42eba6"></a><!-- doxytag: member="mrpt::math::KDTreeCapable::m_kdtree3d_data" ref="a2fe9f0119fbc4ed259f761b4cb42eba6" args="" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname"><a class="el" href="structmrpt_1_1math_1_1_k_d_tree_capable_1_1_t_k_d_tree_data_holder.html">TKDTreeDataHolder</a><3> <a class="el" href="classmrpt_1_1math_1_1_k_d_tree_capable.html#a2fe9f0119fbc4ed259f761b4cb42eba6">mrpt::math::KDTreeCapable::m_kdtree3d_data</a><code> [mutable, private]</code></td> </tr> </table> </div> <div class="memdoc"> <p>Definition at line <a class="el" href="_k_d_tree_capable_8h_source.html#l00610">610</a> of file <a class="el" href="_k_d_tree_capable_8h_source.html">KDTreeCapable.h</a>.</p> <p>Referenced by <a class="el" href="_k_d_tree_capable_8h_source.html#l00394">mrpt::math::KDTreeCapable< CFeatureList >::kdTreeClosestPoint3D()</a>, <a class="el" href="_k_d_tree_capable_8h_source.html#l00480">mrpt::math::KDTreeCapable< CFeatureList >::kdTreeNClosestPoint3D()</a>, <a class="el" href="_k_d_tree_capable_8h_source.html#l00543">mrpt::math::KDTreeCapable< CFeatureList >::kdTreeNClosestPoint3DIdx()</a>, <a class="el" href="_k_d_tree_capable_8h_source.html#l00615">mrpt::math::KDTreeCapable< CFeatureList >::rebuild_kdTree_2D()</a>, <a class="el" href="_k_d_tree_capable_8h_source.html#l00640">mrpt::math::KDTreeCapable< CFeatureList >::rebuild_kdTree_3D()</a>, and <a class="el" href="_k_d_tree_capable_8h_source.html#l00665">mrpt::math::KDTreeCapable< CFeatureList >::rebuild_kdTree_Nd()</a>.</p> </div> </div> <a class="anchor" id="af3dfc28c75edd8ba3e8ea4b4caced0aa"></a><!-- doxytag: member="mrpt::math::KDTreeCapable::m_kdtree_is_uptodate" ref="af3dfc28c75edd8ba3e8ea4b4caced0aa" args="" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">bool <a class="el" href="classmrpt_1_1math_1_1_k_d_tree_capable.html#af3dfc28c75edd8ba3e8ea4b4caced0aa">mrpt::math::KDTreeCapable::m_kdtree_is_uptodate</a><code> [mutable, private]</code></td> </tr> </table> </div> <div class="memdoc"> <p>whether the KD tree needs to be rebuilt or not. </p> <p>Definition at line <a class="el" href="_k_d_tree_capable_8h_source.html#l00612">612</a> of file <a class="el" href="_k_d_tree_capable_8h_source.html">KDTreeCapable.h</a>.</p> <p>Referenced by <a class="el" href="_k_d_tree_capable_8h_source.html#l00575">mrpt::math::KDTreeCapable< CFeatureList >::kdtree_mark_as_outdated()</a>, <a class="el" href="_k_d_tree_capable_8h_source.html#l00615">mrpt::math::KDTreeCapable< CFeatureList >::rebuild_kdTree_2D()</a>, <a class="el" href="_k_d_tree_capable_8h_source.html#l00640">mrpt::math::KDTreeCapable< CFeatureList >::rebuild_kdTree_3D()</a>, and <a class="el" href="_k_d_tree_capable_8h_source.html#l00665">mrpt::math::KDTreeCapable< CFeatureList >::rebuild_kdTree_Nd()</a>.</p> </div> </div> <a class="anchor" id="a18737e23301e1deae98c33adb52566fc"></a><!-- doxytag: member="mrpt::math::KDTreeCapable::m_kdtreeNd_data" ref="a18737e23301e1deae98c33adb52566fc" args="" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname"><a class="el" href="structmrpt_1_1math_1_1_k_d_tree_capable_1_1_t_k_d_tree_data_holder.html">TKDTreeDataHolder</a> <a class="el" href="classmrpt_1_1math_1_1_k_d_tree_capable.html#a18737e23301e1deae98c33adb52566fc">mrpt::math::KDTreeCapable::m_kdtreeNd_data</a><code> [mutable, private]</code></td> </tr> </table> </div> <div class="memdoc"> <p>Definition at line <a class="el" href="_k_d_tree_capable_8h_source.html#l00611">611</a> of file <a class="el" href="_k_d_tree_capable_8h_source.html">KDTreeCapable.h</a>.</p> <p>Referenced by <a class="el" href="_k_d_tree_capable_8h_source.html#l00615">mrpt::math::KDTreeCapable< CFeatureList >::rebuild_kdTree_2D()</a>, <a class="el" href="_k_d_tree_capable_8h_source.html#l00640">mrpt::math::KDTreeCapable< CFeatureList >::rebuild_kdTree_3D()</a>, and <a class="el" href="_k_d_tree_capable_8h_source.html#l00665">mrpt::math::KDTreeCapable< CFeatureList >::rebuild_kdTree_Nd()</a>.</p> </div> </div> </div> <br><hr><br> <table border="0" width="100%"> <tr> <td> Page generated by <a href="http://www.doxygen.org" target="_blank">Doxygen 1.7.5</a> for MRPT 0.9.5 SVN: at Sun Sep 25 17:20:18 UTC 2011</td><td></td> <td width="100"> </td> <td width="150"> </td></tr> </table> </body></html>