#pragma once
#ifndef __RELFING_H__
#define __RELFING_H__
#include "RelDot.h"
#include "AbsDot.h"
#include "AbsFing.h"
#include <list>
#define _USE_MATH_DEFINES
#include <cmath>
using namespace std;
//класс для хранения _относительных_ параметров точки
typedef list< CRelDot> listCRelDot;
//Шаблон для хранения пары значений {first, second}
template < class data_t1, class data_t2> struct CPair
{
data_t1 first;
data_t2 second;
CPair( data_t1 _f, data_t2 _s)
{
first = _f;
second = _s;
}
} ;
typedef CPair< CAbsDot, CAbsDot> CPairAbsDot;
typedef CPair< listCRelDot* , listCRelDot* > CPairSur;
//результат сравнения отпечатков
struct CCompareFing
{
double val; //уровень схожести отпечатков
short cDot; //количество совпавших точек
short nfng; //номер отпечатка
CString name; //файл отпечатка
list< CPairAbsDot> dots; //first - совпавшие точки на отпечатке в базе
//second - совпавшие точки на открытом отпечатке
list< CPairSur> surdots;
//окружения на одинаковых отпечатках должны быть одинаковыми,
//на этом основано сравнение "роз"
} ;
//Описание отпечатка в _относительных_ параметрах
class CRelFing: public list< listCRelDot>
{
private :
inline double GetS( const CPoint A, const CPoint B) ; //растояние между точками
double GetAlpha( const CPoint A, const CPoint B) ; //Направлени из точки А в В [-pi,pi)
public :
CRelFing( ) { } ;
~CRelFing( ) { } ;
CRelFing * Convert( CAbsFing & fng) ; //конвертировать абсолютные параметры к относительным
CCompareFing Compare( CRelFing & fng) ; //сравнить отпечатки
} ;
#endif
I3ByYWdtYSBvbmNlCgojaWZuZGVmIF9fUkVMRklOR19IX18KI2RlZmluZSBfX1JFTEZJTkdfSF9fCgojaW5jbHVkZSAiUmVsRG90LmgiCiNpbmNsdWRlICJBYnNEb3QuaCIKI2luY2x1ZGUgIkFic0ZpbmcuaCIKI2luY2x1ZGUgPGxpc3Q+CgojZGVmaW5lIF9VU0VfTUFUSF9ERUZJTkVTCiNpbmNsdWRlIDxjbWF0aD4KCgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKLy/QutC70LDRgdGBINC00LvRjyDRhdGA0LDQvdC10L3QuNGPIF/QvtGC0L3QvtGB0LjRgtC10LvRjNC90YvRhV8g0L/QsNGA0LDQvNC10YLRgNC+0LIg0YLQvtGH0LrQuAp0eXBlZGVmIGxpc3Q8Q1JlbERvdD4gbGlzdENSZWxEb3Q7CgovL9Co0LDQsdC70L7QvSDQtNC70Y8g0YXRgNCw0L3QtdC90LjRjyDQv9Cw0YDRiyDQt9C90LDRh9C10L3QuNC5IHtmaXJzdCwgc2Vjb25kfQp0ZW1wbGF0ZSA8Y2xhc3MgZGF0YV90MSwgY2xhc3MgZGF0YV90Mj4gc3RydWN0IENQYWlyCnsKCWRhdGFfdDEgZmlyc3Q7CglkYXRhX3QyIHNlY29uZDsKCglDUGFpcihkYXRhX3QxIF9mLCBkYXRhX3QyIF9zKQoJewoJCWZpcnN0ID0gX2Y7IAoJCXNlY29uZCA9IF9zOwoJfQp9OwoKdHlwZWRlZiBDUGFpcjxDQWJzRG90LCBDQWJzRG90PiBDUGFpckFic0RvdDsKdHlwZWRlZiBDUGFpcjxsaXN0Q1JlbERvdCosIGxpc3RDUmVsRG90Kj4gQ1BhaXJTdXI7CgovL9GA0LXQt9GD0LvRjNGC0LDRgiDRgdGA0LDQstC90LXQvdC40Y8g0L7RgtC/0LXRh9Cw0YLQutC+0LIKc3RydWN0IENDb21wYXJlRmluZwp7Cglkb3VibGUgdmFsOwkJCS8v0YPRgNC+0LLQtdC90Ywg0YHRhdC+0LbQtdGB0YLQuCDQvtGC0L/QtdGH0LDRgtC60L7QsgoJc2hvcnQgY0RvdDsJCQkvL9C60L7Qu9C40YfQtdGB0YLQstC+INGB0L7QstC/0LDQstGI0LjRhSDRgtC+0YfQtdC6CglzaG9ydCBuZm5nOwkJCS8v0L3QvtC80LXRgCDQvtGC0L/QtdGH0LDRgtC60LAKCUNTdHJpbmcgbmFtZTsJCS8v0YTQsNC50Lsg0L7RgtC/0LXRh9Cw0YLQutCwCglsaXN0PENQYWlyQWJzRG90PiBkb3RzOwkJLy9maXJzdCAtINGB0L7QstC/0LDQstGI0LjQtSDRgtC+0YfQutC4INC90LAg0L7RgtC/0LXRh9Cw0YLQutC1INCyINCx0LDQt9C1CgkvL3NlY29uZCAtINGB0L7QstC/0LDQstGI0LjQtSDRgtC+0YfQutC4INC90LAg0L7RgtC60YDRi9GC0L7QvCDQvtGC0L/QtdGH0LDRgtC60LUKCWxpc3Q8Q1BhaXJTdXI+IHN1cmRvdHM7CgkvL9C+0LrRgNGD0LbQtdC90LjRjyDQvdCwINC+0LTQuNC90LDQutC+0LLRi9GFINC+0YLQv9C10YfQsNGC0LrQsNGFINC00L7Qu9C20L3RiyDQsdGL0YLRjCDQvtC00LjQvdCw0LrQvtCy0YvQvNC4LAoJLy/QvdCwINGN0YLQvtC8INC+0YHQvdC+0LLQsNC90L4g0YHRgNCw0LLQvdC10L3QuNC1ICLRgNC+0LciCn07CgovL9Ce0L/QuNGB0LDQvdC40LUg0L7RgtC/0LXRh9Cw0YLQutCwINCyIF/QvtGC0L3QvtGB0LjRgtC10LvRjNC90YvRhV8g0L/QsNGA0LDQvNC10YLRgNCw0YUKY2xhc3MgQ1JlbEZpbmc6IHB1YmxpYyBsaXN0PGxpc3RDUmVsRG90Pgp7CnByaXZhdGU6CglpbmxpbmUgZG91YmxlIEdldFMoY29uc3QgQ1BvaW50IEEsIGNvbnN0IENQb2ludCBCKTsJCS8v0YDQsNGB0YLQvtGP0L3QuNC1INC80LXQttC00YMg0YLQvtGH0LrQsNC80LgKCWRvdWJsZSBHZXRBbHBoYShjb25zdCBDUG9pbnQgQSwgY29uc3QgQ1BvaW50IEIpOwkJLy/QndCw0L/RgNCw0LLQu9C10L3QuCDQuNC3INGC0L7Rh9C60Lgg0JAg0LIg0JIgWy1waSxwaSkKcHVibGljOgoJQ1JlbEZpbmcoKXt9OwoJfkNSZWxGaW5nKCl7fTsKCUNSZWxGaW5nICpDb252ZXJ0KENBYnNGaW5nICZmbmcpOwkJLy/QutC+0L3QstC10YDRgtC40YDQvtCy0LDRgtGMINCw0LHRgdC+0LvRjtGC0L3Ri9C1INC/0LDRgNCw0LzQtdGC0YDRiyDQuiDQvtGC0L3QvtGB0LjRgtC10LvRjNC90YvQvAoJQ0NvbXBhcmVGaW5nIENvbXBhcmUoQ1JlbEZpbmcgJmZuZyk7CS8v0YHRgNCw0LLQvdC40YLRjCDQvtGC0L/QtdGH0LDRgtC60LgKfTsKCiNlbmRpZg==