wangzhengquan
2020-06-16 795d03c9525af48b1d5bbb8b79c3834df891463f
algorithm/IndirectAlg.c
@@ -19,6 +19,10 @@
    time_t firstInvalTime;
    //上次逆行的时间
    time_t lastInvalTime;
     //第一次正确行的时间
    time_t firstValTime;
    //上次逆=正确行的时间
    time_t lastValTime;
    //上一次出现的坐标
    Point lastCoordinate;
    // Status(std::string _id, time_t ftime, time_t ltime, Point coordinate): 
@@ -89,8 +93,12 @@
     
}
/**
 * for debug
 */
void IndirectAlg::printRecord(int tag, Record &record) {
     printf("%d  %ld : {%f, %f}\n", tag, record.timestamp, record.coordinate.x, record.coordinate.y);
   // printf("%d  %ld : {%f, %f}\n", tag, record.timestamp, record.coordinate.x, record.coordinate.y);
}
/**
@@ -117,6 +125,8 @@
                .lastTime = record.timestamp,
                .firstInvalTime = 0,
                .lastInvalTime = 0,
                .firstValTime = 0,
                .lastValTime = 0,
                .lastCoordinate = record.coordinate});
            statusMap.insert({record.id, status});
@@ -141,13 +151,16 @@
        if(status->firstInvalTime ==0) {
            //第一次发生逆行
            status->firstInvalTime = status->lastInvalTime = record.timestamp;
//printf("%第一次发生逆行的时间=%ld\n", status->firstInvalTime);
            printRecord(4, record);
            return false;
            
        } else {
            status->lastInvalTime = record.timestamp;
//printf("%后续发生逆行的时间=%ld\n", status->lastInvalTime);
            //逆行时间超过keeptime
            if (status->lastInvalTime - status-> firstInvalTime > keepTime) {
            if (status->lastInvalTime - status-> firstInvalTime >= keepTime) {
                status->firstValTime = status->lastValTime = 0;
                printRecord(5, record);
                return true;
            } 
@@ -155,8 +168,19 @@
            return false;
        }
    } else {
        printRecord(7, record);
        status->firstInvalTime = status->lastInvalTime = 0;
        if(status->firstValTime ==0) {
            status->firstValTime = status->lastValTime = record.timestamp;
            printRecord(7, record);
        } else {
            status->lastValTime = record.timestamp;
             //逆行时间超过keeptime
            if (status->lastValTime - status-> firstValTime >= keepTime) {
                status->firstInvalTime = status->lastInvalTime = 0;
                printRecord(8, record);
            }
        }
        return false;
    }