Remove invisible line function

This commit is contained in:
Noah L. Schrick 2022-03-09 15:15:22 -06:00
parent 4622be5121
commit d53ee2d03d
9 changed files with 61 additions and 6 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -220,9 +220,8 @@ std::vector<Line> HL::construct_HWprob(){
std::vector<Line> merge(std::vector<Line> lh, std::vector<Line> rh){
std::vector<Line> merged;
std::cout << "Merging a left half of size " << lh.size() << " and a right half of size " << rh.size() << std::endl;
auto litr = lh.begin();
auto ritr = rh.begin();
std::vector<Line>::iterator litr = lh.begin();
std::vector<Line>::iterator ritr = rh.begin();
while(litr != lh.end() && ritr != rh.end()){
Line l1 = *litr;
@ -235,6 +234,8 @@ std::vector<Line> merge(std::vector<Line> lh, std::vector<Line> rh){
if(isec < l1.get_vis_end()){
l1.set_vis_end(isec);
l2.set_vis_start(isec);
*litr = l1;
*ritr = l2;
}
merged.push_back(l1);
//merged.push_back(l2);
@ -263,15 +264,25 @@ std::vector<Line> merge(std::vector<Line> lh, std::vector<Line> rh){
if(isec < l1.get_vis_start()){
l1.set_vis_start(isec);
l2.set_vis_end(isec);
*litr = l1;
*ritr = l2;
}
//merged.push_back(l1);
merged.push_back(l2);
ritr++;
}
}
return merged;
while (litr != lh.end()){
merged.push_back(*litr);
litr++;
}
while (ritr != rh.end()){
merged.push_back(*ritr);
ritr++;
}
//Remove invisible lines
return remove_invis(merged);
}
std::vector<Line> HL::get_lines(){
@ -286,3 +297,38 @@ void HL::set_sol(std::vector<std::pair<int, std::pair<double, double>>> &new_sol
{
sol = new_sol;
}
std::vector<Line> remove_invis(std::vector<Line> &merged){
std::vector<Line> tmp_vis;
tmp_vis.push_back(merged.front());
merged.erase(merged.begin());
tmp_vis.push_back(merged.front());
merged.erase(merged.begin());
int num_vis = 2;
for(Line line : merged){
Line last = tmp_vis.at(num_vis -1);
Line seclast = tmp_vis.at(num_vis -2);
double vis_isec = last.get_isec(seclast);
double merg_isec = line.get_isec(seclast);
while(merg_isec < vis_isec){
tmp_vis.erase(tmp_vis.begin() + (num_vis -1));
num_vis--;
if(num_vis == 1)
break;
last = tmp_vis.at(num_vis -1);
seclast = tmp_vis.at(num_vis -2);
vis_isec = last.get_isec(seclast);
merg_isec = line.get_isec(seclast);
}
tmp_vis.push_back(line);
num_vis++;
}
return tmp_vis;
}

View File

@ -30,4 +30,6 @@ class HL
std::vector<Line> merge(std::vector<Line> lh, std::vector<Line> rh);
void print_sol(std::vector<Line>& lines);
std::vector<Line> remove_invis(std::vector<Line> &merged);

View File

@ -81,3 +81,8 @@ void Line::set_vis_end(double x)
{
vis_end = x;
}
double Line::get_isec(Line &l2)
{
return ((l2.get_ycept() - get_ycept())/(get_slope() - l2.get_slope()));
}

View File

@ -21,6 +21,8 @@ class Line
bool is_vis();
void set_id();
int get_id() const;
double get_isec(Line &l2);
bool operator==(const Line &l2) const;
bool operator<(const Line &l2) const;