Remove invisible line function
This commit is contained in:
parent
4622be5121
commit
d53ee2d03d
Binary file not shown.
Binary file not shown.
BIN
build/libHLlib.a
BIN
build/libHLlib.a
Binary file not shown.
Binary file not shown.
BIN
build/main
BIN
build/main
Binary file not shown.
@ -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;
|
||||
}
|
||||
|
||||
@ -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);
|
||||
|
||||
|
||||
|
||||
@ -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()));
|
||||
}
|
||||
|
||||
@ -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;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user