Я нахожу ближайшие точки для заданного более миллиона точек, используя библиотеку лямбда-буста.Когда эти миллионы пунктов читаются из текста, это работает хорошо.Но чтобы сократить время компиляции, я сохранил эти данные внутри массива, и я пытаюсь, чтобы код читал их из массива.Хотя ошибки компиляции нет, но результаты неверны с мусором, хранящимся в каждом элементе кортежа.Код:
namespace
{
typedef double coord_t;
typedef boost::tuple<coord_t,coord_t,coord_t,coord_t,coord_t,coord_t> point_t;
Расчет расстояния с использованием библиотеки повышения:
coord_t distance_sq(const point_t& a, const point_t& b)
{
boost::geometry::distance
coord_t x = a.get<0>() - b.get<0>();
coord_t y = a.get<1>() - b.get<1>();
coord_t z = a.get<2>() - b.get<2>();
return x*x + y*y + z*z;
}
Точка ввода, из которой можно найти ближайшие точки из миллионов точек:
double px, py, pz;
px=4; py=4; pz=4;//-0.1958 0.8703 0.09787
point_t point(px, py, pz);
}
Чтение данных из текстового файла:
ifstream f("MiniRotorCraft_02.txt");
while(f)
{
coord_t xa,ya,za,ua,va,wa;
f >> xa >> ya >> za >> ua >> va >> wa;
points.push_back(boost::make_tuple(xa,ya,za,ua,va,wa));//Million points entry into boost tuple
}
Когда я делаю это, это работает очень хорошо.Но я бы хотел, чтобы мой код читался не из текстового файла, а из набора массивов из самого кода.Итак, я написал:
for (unsigned int i = 0; i < B[llp].size(); i++)
{
xa[i]=get<0>(B[llp][i]);
ya[i]=get<1>(B[llp][i]);
za[i]=get<2>(B[llp][i]);
ua[i]=get<3>(B[llp][i]);
va[i]=get<4>(B[llp][i]);
wa[i]=get<5>(B[llp][i]);
}
for (unsigned int i = 0; i < B[llp].size(); i++)
{
coord_t xa[i],ya[i],za[i],ua[i],va[i],wa[i];
//Instead of taking the data from text file I am trying to take from array that are stored in the code.
points.push_back(boost::make_tuple(xa[i],ya[i],za[i],ua[i],va[i],wa[i]));
}
Но это не работает.Он возвращает произвольное значение мусора.Как это можно сделать.Любое предложение должно быть очень полезным.