bool Utility::checkSameClockDir(const cv::Point3d& triPt1, const cv::Point3d& triPt2, const cv::Point3d& triPt3, const cv::Point3d& norm) { // edge 1 of triangle cv::Point3d edge1 = triPt2 - triPt1; // edge 2 of triangle cv::Point3d edge2 = triPt3 - triPt1; // vector normal of triangle cv::Point3d triNormal = edge1 - edge2; // dot product with norm return norm.dot(triNormal) > 0; }
double Utility::getAngle(const cv::Point3d& a, const cv::Point3d& b) { return acos(std::min<double>(1, std::max<double>(-1, a.dot(b) / (cv::norm(a) * cv::norm(b))))); }