所以我目前正在使用一个数据文件来保存不同兔子的数据,其中兔子的给定数字是文件中每一行的第一个条目。文件中的其他数据如下:看兔子的时间,兔子在院子里的位置角度(半径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>