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> merge(std::vector<Line> lh, std::vector<Line> rh){
|
||||||
std::vector<Line> merged;
|
std::vector<Line> merged;
|
||||||
|
|
||||||
std::cout << "Merging a left half of size " << lh.size() << " and a right half of size " << rh.size() << std::endl;
|
std::vector<Line>::iterator litr = lh.begin();
|
||||||
auto litr = lh.begin();
|
std::vector<Line>::iterator ritr = rh.begin();
|
||||||
auto ritr = rh.begin();
|
|
||||||
|
|
||||||
while(litr != lh.end() && ritr != rh.end()){
|
while(litr != lh.end() && ritr != rh.end()){
|
||||||
Line l1 = *litr;
|
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()){
|
if(isec < l1.get_vis_end()){
|
||||||
l1.set_vis_end(isec);
|
l1.set_vis_end(isec);
|
||||||
l2.set_vis_start(isec);
|
l2.set_vis_start(isec);
|
||||||
|
*litr = l1;
|
||||||
|
*ritr = l2;
|
||||||
}
|
}
|
||||||
merged.push_back(l1);
|
merged.push_back(l1);
|
||||||
//merged.push_back(l2);
|
//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()){
|
if(isec < l1.get_vis_start()){
|
||||||
l1.set_vis_start(isec);
|
l1.set_vis_start(isec);
|
||||||
l2.set_vis_end(isec);
|
l2.set_vis_end(isec);
|
||||||
|
*litr = l1;
|
||||||
|
*ritr = l2;
|
||||||
}
|
}
|
||||||
|
|
||||||
//merged.push_back(l1);
|
|
||||||
merged.push_back(l2);
|
merged.push_back(l2);
|
||||||
ritr++;
|
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(){
|
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;
|
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);
|
std::vector<Line> merge(std::vector<Line> lh, std::vector<Line> rh);
|
||||||
void print_sol(std::vector<Line>& lines);
|
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;
|
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();
|
bool is_vis();
|
||||||
void set_id();
|
void set_id();
|
||||||
int get_id() const;
|
int get_id() const;
|
||||||
|
double get_isec(Line &l2);
|
||||||
|
|
||||||
|
|
||||||
bool operator==(const Line &l2) const;
|
bool operator==(const Line &l2) const;
|
||||||
bool operator<(const Line &l2) const;
|
bool operator<(const Line &l2) const;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user