@@ -66,56 +66,19 @@ pcl::SamplingSurfaceNormal<PointT>::applyFilter (PointCloud &output)
66
66
template <typename PointT> void
67
67
pcl::SamplingSurfaceNormal<PointT>::findXYZMaxMin (const PointCloud& cloud, Vector& max_vec, Vector& min_vec)
68
68
{
69
- float maxval = cloud[0 ].x ;
70
- float minval = cloud[0 ].x ;
71
-
72
- for (std::size_t i = 0 ; i < cloud.points .size (); i++)
73
- {
74
- if (cloud[i].x > maxval)
75
- {
76
- maxval = cloud[i].x ;
77
- }
78
- if (cloud[i].x < minval)
79
- {
80
- minval = cloud[i].x ;
81
- }
82
- }
83
- max_vec (0 ) = maxval;
84
- min_vec (0 ) = minval;
85
-
86
- maxval = cloud[0 ].y ;
87
- minval = cloud[0 ].y ;
88
-
89
- for (std::size_t i = 0 ; i < cloud.points .size (); i++)
90
- {
91
- if (cloud[i].y > maxval)
92
- {
93
- maxval = cloud[i].y ;
94
- }
95
- if (cloud[i].y < minval)
96
- {
97
- minval = cloud[i].y ;
98
- }
69
+ // 4f to ease vectorization
70
+ Eigen::Array4f min_array =
71
+ Eigen::Array4f::Constant (std::numeric_limits<float >::max ());
72
+ Eigen::Array4f max_array =
73
+ Eigen::Array4f::Constant (std::numeric_limits<float >::lowest ());
74
+
75
+ for (const auto & point : cloud) {
76
+ min_array = min_array.min (point.getArray4fMap ());
77
+ max_array = max_array.max (point.getArray4fMap ());
99
78
}
100
- max_vec (1 ) = maxval;
101
- min_vec (1 ) = minval;
102
-
103
- maxval = cloud[0 ].z ;
104
- minval = cloud[0 ].z ;
105
79
106
- for (std::size_t i = 0 ; i < cloud.points .size (); i++)
107
- {
108
- if (cloud[i].z > maxval)
109
- {
110
- maxval = cloud[i].z ;
111
- }
112
- if (cloud[i].z < minval)
113
- {
114
- minval = cloud[i].z ;
115
- }
116
- }
117
- max_vec (2 ) = maxval;
118
- min_vec (2 ) = minval;
80
+ max_vec = max_array.head <3 >();
81
+ min_vec = min_array.head <3 >();
119
82
}
120
83
121
84
// /////////////////////////////////////////////////////////////////////////////
0 commit comments