37 "Slope below which lines are called horizontal");
39 "Slope above which lines are called vertical");
45 #define NormalizeAngle(A) ( (((A)<0)?((A)+2*PI):(A)) / (2*PI) ) 78 LIST RemainingOutlines;
84 RemainingOutlines = Outlines;
90 RemainingOutlines = Outlines;
132 if ((Orientation < 0) || (Orientation >= 1))
134 return (Orientation);
158 return (MicroFeatures);
164 if (!
PointAt(Current)->Hidden) {
166 if (NewFeature !=
NULL)
167 MicroFeatures =
push (MicroFeatures, NewFeature);
171 while (Last != First);
173 return (MicroFeatures);
#define NormalizeAngle(A)
void FindDirectionChanges(MFOUTLINE Outline, FLOAT32 MinSlope, FLOAT32 MaxSlope)
#define double_VAR(name, val, comment)
double classify_max_slope
void MarkDirectionChanges(MFOUTLINE Outline)
LIST push(LIST list, void *element)
LIST ConvertBlob(TBLOB *blob)
#define DegenerateOutline(O)
double classify_min_slope
FLOAT32 ComputeOrientation(MFEDGEPT *Start, MFEDGEPT *End)
FLOAT32 DistanceBetween(FPOINT A, FPOINT B)
void CharNormalizeOutline(MFOUTLINE Outline, const DENORM &cn_denorm)
MICROFEATURES BlobMicroFeatures(TBLOB *Blob, const DENORM &cn_denorm)
MICROFEATURES ConvertToMicroFeatures(MFOUTLINE Outline, MICROFEATURES MicroFeatures)
FLOAT32 NormalizedAngleFrom(FPOINT *Point1, FPOINT *Point2, FLOAT32 FullScale)
void FreeOutlines(LIST Outlines)
FEATURE NewFeature(const FEATURE_DESC_STRUCT *FeatureDesc)
MFOUTLINE NextExtremity(MFOUTLINE EdgePoint)
MICROFEATURE NewMicroFeature()
MICROFEATURE ExtractMicroFeature(MFOUTLINE Start, MFOUTLINE End)