in IsometricPatternMatcher/HexGridFitting.cpp [757:773]
Eigen::Matrix2Xd HexGridFitting::getDirections(int startIndx) {
Eigen::VectorXi neighbourIndx;
neighboursIdxInArea(transferDots_, transferDots_.col(startIndx),
spacing_ + perPointSearchRadius_, neighbourIndx);
Eigen::Matrix2Xd result;
result.resize(2, IsometricGridDot::kNumNeighbours);
result.col(0) =
transferDots_.col(neighbourIndx(1)) -
transferDots_.col(startIndx); // neighbourIndx(0) is the point itself
const double cos60 = 0.50;
const double sin60 = sqrt(3.0) / 2.0;
for (int i = 0; i < 5; ++i) {
result(0, i + 1) = result(0, i) * cos60 + result(1, i) * sin60;
result(1, i + 1) = result(1, i) * cos60 - result(0, i) * sin60;
}
return result;
}