00001
00019 #ifndef PROTOS_H
00020 #define PROTOS_H
00021
00022
00023
00024
00025 #include "bitvec.h"
00026 #include "cutil.h"
00027
00028
00029
00030
00031
00036 typedef BIT_VECTOR *CONFIGS;
00037
00044 typedef struct
00045 {
00046 FLOAT32 A;
00047 FLOAT32 B;
00048 FLOAT32 C;
00049 FLOAT32 X;
00050 FLOAT32 Y;
00051 FLOAT32 Angle;
00052 FLOAT32 Length;
00053 } PROTO_STRUCT;
00054
00059 typedef PROTO_STRUCT *PROTO;
00060
00065 typedef struct
00066 {
00067 INT16 NumProtos;
00068 INT16 MaxNumProtos;
00069 PROTO Prototypes;
00070 INT16 NumConfigs;
00071 INT16 MaxNumConfigs;
00072 CONFIGS Configurations;
00073 } CLASS_STRUCT;
00074
00079 typedef CLASS_STRUCT *CLASS_TYPE;
00084 typedef CLASS_STRUCT *CLASSES;
00085
00086
00087
00088
00089 #define NUMBER_OF_CLASSES 256
00090 #define Y_OFFSET -40.0
00091 #define FEATURE_SCALE 100.0
00092
00093
00094
00095
00096 extern CLASS_STRUCT TrainingData[];
00097
00098
00099
00100
00104 #define AddProtoToConfig(Pid,Config) \
00105 (SET_BIT (Config, Pid))
00106
00110 #define RemoveProtoFromConfig(Pid,Config) \
00111 (reset_bit (Config, Pid))
00112
00116 #define ClassOfChar(Char) \
00117 ((TrainingData [Char].NumProtos) ? \
00118 (& TrainingData [Char]) : \
00119 NO_CLASS)
00120
00126 #define ProtoIn(Class,Pid) \
00127 (& (Class)->Prototypes [Pid])
00128
00134 #define ConfigIn(Class,Cid) \
00135 ((Class)->Configurations [Cid])
00136
00142 #define NumProtosIn(Class) \
00143 ((Class)->NumProtos)
00144
00150 #define NumConfigsIn(Class) \
00151 ((Class)->NumConfigs)
00152
00160 #define CoefficientA(Proto) \
00161 ((Proto)->A)
00162
00170 #define CoefficientB(Proto) \
00171 ((Proto)->B)
00172
00180 #define CoefficientC(Proto) \
00181 ((Proto)->C)
00182
00188 #define ProtoAngle(Proto) \
00189 ((Proto)->Angle)
00190
00196 #define ProtoX(Proto) \
00197 ((Proto)->X)
00198
00204 #define ProtoY(Proto) \
00205 ((Proto)->Y)
00206
00212 #define ProtoLength(Proto) \
00213 ((Proto)->Length)
00214
00220 #define PrintProto(Proto) \
00221 (cprintf ("X=%4.2f, Y=%4.2f, Angle=%4.2f", \
00222 ProtoX (Proto), \
00223 ProtoY (Proto), \
00224 ProtoLength (Proto), \
00225 ProtoAngle (Proto))) \
00226
00227
00233 #define PrintProtoLine(Proto) \
00234 (cprintf ("A=%4.2f, B=%4.2f, C=%4.2f", \
00235 CoefficientA (Proto), \
00236 CoefficientB (Proto), \
00237 CoefficientC (Proto))) \
00238
00239
00240
00241
00242 int AddConfigToClass(CLASS_TYPE Class);
00243
00244 int AddProtoToClass(CLASS_TYPE Class);
00245
00246 FLOAT32 ClassConfigLength(CLASS_TYPE Class, BIT_VECTOR Config);
00247
00248 FLOAT32 ClassProtoLength(CLASS_TYPE Class);
00249
00250 void CopyProto(PROTO Src, PROTO Dest);
00251
00252 void FillABC(PROTO Proto);
00253
00254 void FreeClass(CLASS_TYPE Class);
00255
00256 void FreeClassFields(CLASS_TYPE Class);
00257
00258 void InitPrototypes();
00259
00260 CLASS_TYPE NewClass(int NumProtos, int NumConfigs);
00261
00262 void PrintProtos(CLASS_TYPE Class);
00263
00264 void ReadClassFile();
00265
00266 void ReadClassFromFile(FILE *File, char ClassChar);
00267
00268 void ReadConfigs(register FILE *File, CLASS_TYPE Class);
00269
00270 void ReadProtos(register FILE *File, CLASS_TYPE Class);
00271
00272 int SplitProto(CLASS_TYPE Class, int OldPid);
00273
00274 void WriteOldConfigFile(FILE *File, CLASS_TYPE Class);
00275
00276 void WriteOldProtoFile(FILE *File, CLASS_TYPE Class);
00277
00278
00279
00280
00281
00282
00283
00284
00285
00286
00287
00288
00289
00290
00291
00292
00293
00294
00295
00296
00297
00298
00299
00300
00301
00302
00303
00304
00305
00306
00307
00308
00309
00310
00311
00312
00313
00314
00315
00316
00317
00318
00319
00320
00321
00322
00323
00324
00325
00326
00327
00328
00329
00330
00331
00332
00333
00334
00335
00336
00337
00338
00339
00340
00341
00342
00343
00344
00345
00346
00347
00348
00349
00350
00351 #endif