36 "Slope below which lines are called horizontal");
38 "Slope above which lines are called vertical");
44 #define NormalizeAngle(A) ((((A) < 0) ? ((A) + 2 * M_PI) : (A)) / (2 * M_PI)) 72 LIST RemainingOutlines;
75 if (Blob !=
nullptr) {
78 RemainingOutlines = Outlines;
84 RemainingOutlines = Outlines;
138 return (MicroFeatures);
144 if (!
PointAt(Current)->Hidden) {
151 while (Last != First);
153 return (MicroFeatures);
MFOUTLINE NextExtremity(MFOUTLINE EdgePoint)
void MarkDirectionChanges(MFOUTLINE Outline)
#define NormalizeAngle(A)
MICROFEATURES ConvertToMicroFeatures(MFOUTLINE Outline, MICROFEATURES MicroFeatures)
void FreeOutlines(LIST Outlines)
#define DegenerateOutline(O)
#define double_VAR(name, val, comment)
float DistanceBetween(FPOINT A, FPOINT B)
void FindDirectionChanges(MFOUTLINE Outline, float MinSlope, float MaxSlope)
LIST push(LIST list, void *element)
MICROFEATURE ExtractMicroFeature(MFOUTLINE Start, MFOUTLINE End)
float NormalizedAngleFrom(FPOINT *Point1, FPOINT *Point2, float FullScale)
double classify_min_slope
MICROFEATURES BlobMicroFeatures(TBLOB *Blob, const DENORM &cn_denorm)
LIST ConvertBlob(TBLOB *blob)
float ComputeOrientation(MFEDGEPT *Start, MFEDGEPT *End)
double classify_max_slope
FEATURE NewFeature(const FEATURE_DESC_STRUCT *FeatureDesc)
void CharNormalizeOutline(MFOUTLINE Outline, const DENORM &cn_denorm)
MICROFEATURE NewMicroFeature()