ResultPtr Recognize(PointVector& points, TemplateVector& templates) { Resample(points, NumPoints); RotateToZero(points); ScaleToSquare(points, SquareSize); TranslateToOrigin(points); double b = DBL_MAX; int index = 0; for (size_t i = 0; i < templates.size(); ++i) { double d = DistanceAtBestAngle(points, templates[i], -AngleRange, +AngleRange, AnglePrecision); if (d < b) { b = d; index = i; } } double score = 1.0 - (b / HalfDiagonal); return ResultPtr(new Result(templates[index]->Name, score)); };
ResultPtr NullFactory::createResult() const { return ResultPtr(new NullResult()); }