00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 #include <cstddef>
00031 #include <cmath>
00032 #include <vector>
00033
00034 #include <gtest/gtest.h>
00035
00036 #include <mcl_3dl/chunked_kdtree.h>
00037
00038 TEST(ChunkedKdtree, RadiusSearch)
00039 {
00040 pcl::PointCloud<pcl::PointXYZ> pc;
00041 pc.push_back(pcl::PointXYZ(0.5, 0.5, 0.5));
00042 pc.push_back(pcl::PointXYZ(0.8, 0.0, 0.0));
00043 pc.push_back(pcl::PointXYZ(1.3, 0.0, 0.0));
00044 pc.push_back(pcl::PointXYZ(0.0, 0.2, 0.0));
00045 pc.push_back(pcl::PointXYZ(0.0, -0.3, 0.0));
00046
00047 mcl_3dl::ChunkedKdtree<pcl::PointXYZ> kdtree(1.0, 0.3);
00048 kdtree.setInputCloud(pc.makeShared());
00049
00050 std::vector<int> id;
00051 std::vector<float> dist;
00052
00053 kdtree.radiusSearch(
00054 pcl::PointXYZ(0.5, 0.5, 0.5),
00055 0.3, id, dist, 1);
00056 ASSERT_EQ(id.size(), 1u);
00057 ASSERT_EQ(id[0], 0);
00058
00059 kdtree.radiusSearch(
00060 pcl::PointXYZ(0.5, 0.4, 0.5),
00061 0.3, id, dist, 1);
00062 ASSERT_EQ(id.size(), 1u);
00063 ASSERT_EQ(id[0], 0);
00064
00065 kdtree.radiusSearch(
00066 pcl::PointXYZ(1.05, 0.0, 0.0),
00067 0.3, id, dist, 1);
00068 ASSERT_EQ(id.size(), 1u);
00069 ASSERT_EQ(id[0], 1);
00070
00071 kdtree.radiusSearch(
00072 pcl::PointXYZ(1.1, 0.0, 0.0),
00073 0.3, id, dist, 1);
00074 ASSERT_EQ(id.size(), 1u);
00075 ASSERT_EQ(id[0], 2);
00076
00077 kdtree.radiusSearch(
00078 pcl::PointXYZ(0.0, -0.05, 0.0),
00079 0.3, id, dist, 1);
00080 ASSERT_EQ(id.size(), 1u);
00081 ASSERT_EQ(id[0], 3);
00082
00083 kdtree.radiusSearch(
00084 pcl::PointXYZ(0.0, -0.15, 0.0),
00085 0.3, id, dist, 1);
00086 ASSERT_EQ(id.size(), 1u);
00087 ASSERT_EQ(id[0], 4);
00088 }
00089
00090 int main(int argc, char** argv)
00091 {
00092 testing::InitGoogleTest(&argc, argv);
00093
00094 return RUN_ALL_TESTS();
00095 }