1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
|
#include "dm_Steps.h"
#include "dm_Tracks.h"
#include "dm_Data.h"
void binary_search(ifstream myfile, string line, dm_Track current_track, dm_Track key_vec, dm_Step current_step, dm_Data data_base, float key, float x_pos, float y_pos, float z_pos)
{
while (myfile.good())
{
getline(myfile, line);
if (line == "end")
break;
else if (line == "")
{
int high = (int) current_track.m_track.size();
int low = 0;
double midpoint;
while (low <= high)
{
midpoint = low + (high - low)/2 -1;
setprecision(0); midpoint;
if (key == current_track.m_track.at(midpoint).m_energy)
{
for(int i = midpoint; i < current_track.m_track.size(); i++)
key_vec.m_track.push_back(current_track.m_track.at(i));
x_pos = key_vec.m_track.at(0).m_xpos;
y_pos = key_vec.m_track.at(0).m_ypos;
z_pos = key_vec.m_track.at(0).m_zpos;
for(int j = 0; j < key_vec.m_track.size(); j++)
{
key_vec.m_track.at(j).m_xpos = key_vec.m_track.at(j).m_xpos - x_pos;
key_vec.m_track.at(j).m_ypos = key_vec.m_track.at(j).m_ypos - y_pos;
key_vec.m_track.at(j).m_zpos = key_vec.m_track.at(j).m_zpos - z_pos;
}
break;
}
else if (low == high)
{
if (current_track.m_track.at(midpoint).m_energy > key)
midpoint = midpoint + 1;
for(int i = midpoint; i < current_track.m_track.size(); i++)
key_vec.m_track.push_back(current_track.m_track.at(i));
x_pos = key_vec.m_track.at(0).m_xpos;
y_pos = key_vec.m_track.at(0).m_ypos;
z_pos = key_vec.m_track.at(0).m_zpos;
for(int j = 0; j < key_vec.m_track.size(); j++)
{
key_vec.m_track.at(j).m_xpos = key_vec.m_track.at(j).m_xpos - x_pos;
key_vec.m_track.at(j).m_ypos = key_vec.m_track.at(j).m_ypos - y_pos;
key_vec.m_track.at(j).m_zpos = key_vec.m_track.at(j).m_zpos - z_pos;
}
break;
}
else if (key > current_track.m_track.at(midpoint).m_energy)
{high = midpoint;}
else
{low = midpoint + 2;}
}
data_base.m_data.push_back(key_vec);
key_vec = dm_Track();
current_track.m_track.clear();
}
else
{
current_step = dm_Step();
sscanf(line.c_str(),"%f %f %f %f %f %f", &(current_step.m_energy), &(current_step.m_energy_loss), &(current_step.m_step_length), &(current_step.m_xpos), &(current_step.m_ypos), &(current_step.m_zpos));
current_track.m_track.push_back(current_step);
}
}
}
|