发现数据集之间的时差

时间:2017-10-09 22:41:55

标签: c++ function file conditional std

所以我目前正在使用一个数据文件来保存不同兔子的数据,其中兔子的给定数字是文件中每一行的第一个条目。文件中的其他数据如下:看兔子的时间,兔子在院子里的位置角度(半径360度左右),以及兔子与相机的距离。该文件显示在此处:

8 001218 82.4 7.6
8 001233 76.2 9.9
8 001259 120.4 12.1
8 001305 120.4 12.6
12 013618 217 1.2
12 013714 64 1.1
12 013802 64 1.1
12 013942 33.8 13.4
2 042688 306 3.9
3 052222 5.6 8.9
3 052700 272.2 12.1
17 235516 42.0 7.6
17 235922 18.2 7.6
17 000118 36.4 7.6
17 000226 291.3 7.6

所以我目前能够输出每个兔子的数量,时间(适当的hh:mm:ss格式),以及院子里兔子的(x,y)坐标。我的代码在这里:

#include <iostream>
#include <cmath>
#include <iomanip>
#include <fstream>
#include <cstdlib>

using namespace std;

int hours(int time_hhmmss)
{
    return time_hhmmss/10000;
}

int minutes(int time_hhmmss)
{
    return (time_hhmmss % 10000) / 100;
}

int seconds(int time_hhmmss)
{
    return time_hhmmss % 100;
}

double x_coordinate(double heading, double distance)
{
    return distance*cos(heading * M_PI / 180);
}

double y_coordinate(double heading, double distance)
{
    return distance*sin(heading * M_PI / 180);  
}

int get_duration(int start_hours, int start_minutes, int start_seconds, 
         int end_hours, int end_minutes, int end_seconds)
{   
    int change_in_hours = (end_hours - start_hours) * 3600;
    int change_in_minutes = (end_minutes - start_minutes) * 60;
    int change_in_seconds = end_seconds - start_seconds;

    return change_in_hours + change_in_minutes + change_in_seconds;
}

int main()
{
    ifstream fin("wascally_wabbits.txt");
    ofstream fout("wabbit_data.txt");

    if (!fin)
    {
        cout << "Unable to find the file..." << endl;
        return EXIT_FAILURE;
    }

    int rabbitNumber = 0, int rabbitNumber = 0, count = 0, hour1 = 0, hour2 
    = 0, minute1 = 0, 
    minute2 = 0, second1 = 0, second2 = 0;;

    while (fin >> rabbitNumber)
{   
    count += 1;

    fout << rabbitNumber << " "; 

    int time = 0;
    fin >> time;

    int hour = hours(time);
    int minute = minutes(time);
    int second = seconds(time);

    fout << hour << ":" << minute << ":" << second << " ";

    double heading = 0, distance = 0;
    fin >> heading >> distance;

    double x = x_coordinate(heading, distance);
    double y = y_coordinate(heading, distance);

    fout << fixed << setprecision(2) << "( " << x << " , " << y << " )";

    if (count += 1)
    {
        int hour1 = hour;
        int minute1 = minute;
        int second1 = second;
    }

    if (count += 2)
    {
        int hour2 = hour;
        int minute2 = minute;
        int second2 = second;

        int duration = get_duration(hour1, minute1, second1, hour2, minute2, second2);

        fout << " " << duration << endl;

        hour1 = 0, minute1 = 0, second1 = 0, hour2 = 0, minute2 = 0, second2 = 0, count = 0;
    }
}

    return EXIT_SUCCESS;
}

我认为我的所有功能都按正常顺序工作,但我很难获得持续时间。

持续时间本质上是特定兔子的数据条目之间的时差(例如兔子8),所以如果我的时间是00:12:18而下一个是00:12:33,我会得到15秒作为时差。

我有点工作,我的输出文件是这样的:

8 0:12:18 ( 1.01 , 7.53 ) 738
8 0:12:33 ( 2.36 , 9.61 ) 753
8 0:12:59 ( -6.12 , 10.44 ) 779
8 0:13:5 ( -6.38 , 10.87 ) 785
12 1:36:18 ( -0.96 , -0.72 ) 5778
12 1:37:14 ( 0.48 , 0.99 ) 5834
12 1:38:2 ( 0.48 , 0.99 ) 5882
12 1:39:42 ( 11.14 , 7.45 ) 5982
2 4:26:88 ( 2.29 , -3.16 ) 16048
3 5:22:22 ( 8.86 , 0.87 ) 19342
3 5:27:0 ( 0.46 , -12.09 ) 19620
17 23:55:16 ( 5.65 , 5.09 ) 86116
17 23:59:22 ( 7.22 , 2.37 ) 86362
17 0:1:18 ( 6.12 , 4.51 ) 78
17 0:2:26 ( 2.76 , -7.08 ) 146

在这个文件输出中我基本上看到时间差是下一个减去前一个,所以从第一行起我会得到753 - 738 = 15秒(这样至少是正确的时差)。

然而,我正在努力确保第一个条目(对于兔子8,兔子12等)为0,并且它输出正确的时差值。

我不是在找你回答我的问题,但我已经考虑了好几个小时了,如果有人知道它如何更好地工作,我会无处可去。 / p>

0 个答案:

没有答案