Eigen::Matrix2Xd HexGridFitting::getDirections()

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;
}