Skip to content

Instantly share code, notes, and snippets.

@eplawless
Created October 1, 2011 20:51
Show Gist options
  • Save eplawless/1256645 to your computer and use it in GitHub Desktop.
Save eplawless/1256645 to your computer and use it in GitHub Desktop.
0x stuff
template <typename uint_t>
uint_t
PointKDTreeImplImpl<uint_t>::partitionAroundMedian(
uint_t idxBegin,
uint_t idxEnd,
KDTreeAxis axis)
{
uint_t halfSize = (idxEnd - idxBegin) / 2;
uint_t idxMedian = idxBegin + halfSize;
auto itGlobalBegin = begin(m_arrPoints);
auto itBegin = itGlobalBegin + static_cast<size_t>(idxBegin);
auto itMedian = itGlobalBegin + static_cast<size_t>(idxMedian);
auto itEnd = itGlobalBegin + static_cast<size_t>(idxEnd);
nth_element(itBegin, itMedian, itEnd,
[=](const V3x& lhs, const V3x& rhs) -> bool {
return lhs[axis] < rhs[axis];
});
return idxMedian;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment