Commit c2284a41 authored by Alexander Lapshin's avatar Alexander Lapshin

.

parent 15d98c3b
......@@ -4,16 +4,15 @@
#include "orb_date.h"
OrbBlocksStore::OrbBlocksStore()
{
}
= default;
void OrbBlocksStore::init(
const SInitOrbits& orbits,
const TimeJD* beg,
const TimeJD* end,
bool filter_orbits,
bool min_dist_forced,
bool interpolate)
const bool filter_orbits,
const bool min_dist_forced,
const bool interpolate)
{
SInitOrbits sordet_orbits = orbits;
......@@ -21,8 +20,8 @@ void OrbBlocksStore::init(
return a.GetDate() < b.GetDate();
});
// m_beg_before_filter = beg ? *beg : sordet_orbits.front().GetDate();
// m_end_before_filter = end ? *end : sordet_orbits.back().GetDate();
m_beg_before_filter = beg ? *beg : sordet_orbits.front().GetDate();
m_end_before_filter = end ? *end : sordet_orbits.back().GetDate();
if (filter_orbits) {
sordet_orbits = filter(sordet_orbits);
......@@ -44,9 +43,9 @@ void OrbBlocksStore::init(
const SInitOrbits& orbits,
const TimeJD& beg,
const TimeJD& end,
bool filter_orbits,
bool min_dist_forced,
bool interpolate)
const bool filter_orbits,
const bool min_dist_forced,
const bool interpolate)
{
init(orbits, &beg, &end, filter_orbits, min_dist_forced, interpolate);
}
......@@ -214,9 +213,9 @@ void OrbBlocksStore::calc_min_dist(const SInitOrbit& orb1, const SInitOrbit& orb
XInterpolator ip2(orb2, beg, end);
MinDistEvaluator eval(ip1, ip2, beg);
double step = (int)(std::min(orb1.GetKeplerData().GetPeriod(), orb2.GetKeplerData().GetPeriod()) * 1000 / 20);
const double step = (int)(std::min(orb1.GetKeplerData().GetPeriod(), orb2.GetKeplerData().GetPeriod()) * 1000 / 20);
double time = 0;
double time_end = DaysInterval(beg, end);
const double time_end = DaysInterval(beg, end);
double min = -1;
double time_min = 0;
......@@ -227,7 +226,7 @@ void OrbBlocksStore::calc_min_dist(const SInitOrbit& orb1, const SInitOrbit& orb
exit = true;
}
double dist = eval.calc(time);
const double dist = eval.calc(time);
if (min == -1 || min > dist) {
min = dist;
......@@ -237,10 +236,10 @@ void OrbBlocksStore::calc_min_dist(const SInitOrbit& orb1, const SInitOrbit& orb
time += step / 86400.0;
}
double tol = 60 / 86400.0;
double left = std::max(0.0, time_min - step / 86400.0 / 2.0);
double right = std::min(time_end, time_min + step / 86400.0 / 2.0);
double shift = golden_section_search(eval, left, right, tol);
const double tol = 60 / 86400.0;
const double left = std::max(0.0, time_min - step / 86400.0 / 2.0);
const double right = std::min(time_end, time_min + step / 86400.0 / 2.0);
const double shift = golden_section_search(eval, left, right, tol);
result_jd = ShiftDate(beg, shift * 86400);
result_dist = eval.calc(shift);
......
......@@ -19,14 +19,14 @@ public:
const SInitOrbit& get_orbit(const TimeJD& date) const;
const OrbBlocks& get_blocks() const { return m_blocks; }
OrbBlocks& get_blocks() { return m_blocks; }
//const TimeJD& get_beg_before_filter() const { return m_beg_before_filter; }
//const TimeJD& get_end_before_filter() const { return m_end_before_filter; }
const TimeJD& get_beg_before_filter() const { return m_beg_before_filter; }
const TimeJD& get_end_before_filter() const { return m_end_before_filter; }
void load(const jsonval& parent);
private:
void init_min_dist(const SInitOrbits& orbits, const TimeJD& beg, const TimeJD& end, bool forced);
void calc_min_dist(const SInitOrbit& orb1, const SInitOrbit& orb2, const TimeJD& beg, const TimeJD& end, TimeJD& result_jd, double& result_dist) const;
SInitOrbits filter(const SInitOrbits& orbits) const;
OrbBlocks m_blocks;
//TimeJD m_beg_before_filter;
//TimeJD m_end_before_filter;
TimeJD m_beg_before_filter;
TimeJD m_end_before_filter;
};
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment