码迷,mamicode.com
首页 > 其他好文 > 详细

KdTree

时间:2019-06-12 16:42:02      阅读:84      评论:0      收藏:0      [点我收藏+]

标签:图片   size   img   gif   null   arc   cli   show   技术   

技术图片
 1 #include <pcl/point_cloud.h>
 2 #include <pcl/kdtree/kdtree_flann.h>
 3 
 4 #include <iostream>
 5 #include <vector>
 6 #include <ctime>
 7 
 8 int
 9 main (int argc, char** argv)
10 {
11   srand (time (NULL));
12 
13   pcl::PointCloud<pcl::PointXYZ>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZ>);
14 
15   // Generate pointcloud data
16   cloud->width = 1000;
17   cloud->height = 1;
18   cloud->points.resize (cloud->width * cloud->height);
19 
20   for (size_t i = 0; i < cloud->points.size (); ++i)
21   {
22     cloud->points[i].x = 1024.0f * rand () / (RAND_MAX + 1.0f);
23     cloud->points[i].y = 1024.0f * rand () / (RAND_MAX + 1.0f);
24     cloud->points[i].z = 1024.0f * rand () / (RAND_MAX + 1.0f);
25   }
26 
27   pcl::KdTreeFLANN<pcl::PointXYZ> kdtree;
28 
29   kdtree.setInputCloud (cloud);
30 
31   pcl::PointXYZ searchPoint;
32 
33   searchPoint.x = 1024.0f * rand () / (RAND_MAX + 1.0f);
34   searchPoint.y = 1024.0f * rand () / (RAND_MAX + 1.0f);
35   searchPoint.z = 1024.0f * rand () / (RAND_MAX + 1.0f);
36 
37   // K nearest neighbor search
38 
39   int K = 10;
40 
41   std::vector<int> pointIdxNKNSearch(K);
42   std::vector<float> pointNKNSquaredDistance(K);
43 
44   std::cout << "K nearest neighbor search at (" << searchPoint.x 
45             << " " << searchPoint.y 
46             << " " << searchPoint.z
47             << ") with K=" << K << std::endl;
48 
49   if ( kdtree.nearestKSearch (searchPoint, K, pointIdxNKNSearch, pointNKNSquaredDistance) > 0 )
50   {
51     for (size_t i = 0; i < pointIdxNKNSearch.size (); ++i)
52       std::cout << "    "  <<   cloud->points[ pointIdxNKNSearch[i] ].x 
53                 << " " << cloud->points[ pointIdxNKNSearch[i] ].y 
54                 << " " << cloud->points[ pointIdxNKNSearch[i] ].z 
55                 << " (squared distance: " << pointNKNSquaredDistance[i] << ")" << std::endl;
56   }
57 
58   // Neighbors within radius search
59 
60   std::vector<int> pointIdxRadiusSearch;
61   std::vector<float> pointRadiusSquaredDistance;
62 
63   float radius = 256.0f * rand () / (RAND_MAX + 1.0f);
64 
65   std::cout << "Neighbors within radius search at (" << searchPoint.x 
66             << " " << searchPoint.y 
67             << " " << searchPoint.z
68             << ") with radius=" << radius << std::endl;
69 
70 
71   if ( kdtree.radiusSearch (searchPoint, radius, pointIdxRadiusSearch, pointRadiusSquaredDistance) > 0 )
72   {
73     for (size_t i = 0; i < pointIdxRadiusSearch.size (); ++i)
74       std::cout << "    "  <<   cloud->points[ pointIdxRadiusSearch[i] ].x 
75                 << " " << cloud->points[ pointIdxRadiusSearch[i] ].y 
76                 << " " << cloud->points[ pointIdxRadiusSearch[i] ].z 
77                 << " (squared distance: " << pointRadiusSquaredDistance[i] << ")" << std::endl;
78   }
79 
80 
81   return 0;
82 }
View Code

 

KdTree

标签:图片   size   img   gif   null   arc   cli   show   技术   

原文地址:https://www.cnblogs.com/larry-xia/p/11010402.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!