diff --git a/build/CMakeFiles/HLlib.dir/compiler_depend.internal b/build/CMakeFiles/HLlib.dir/compiler_depend.internal index 8022423..db37b2e 100644 --- a/build/CMakeFiles/HLlib.dir/compiler_depend.internal +++ b/build/CMakeFiles/HLlib.dir/compiler_depend.internal @@ -222,13 +222,35 @@ CMakeFiles/HLlib.dir/src/HiddenLines.cpp.o /usr/include/c++/11.2.0/tr1/riemann_zeta.tcc /usr/include/c++/11.2.0/utility /usr/include/c++/11.2.0/bits/stl_relops.h + /usr/include/c++/11.2.0/algorithm + /usr/include/c++/11.2.0/bits/stl_algo.h + /usr/include/c++/11.2.0/bits/algorithmfwd.h + /usr/include/c++/11.2.0/bits/stl_heap.h + /usr/include/c++/11.2.0/bits/stl_tempbuf.h + /usr/include/c++/11.2.0/bits/uniform_int_dist.h + /usr/include/c++/11.2.0/pstl/glue_algorithm_defs.h + /usr/include/c++/11.2.0/functional + /usr/include/c++/11.2.0/tuple + /usr/include/c++/11.2.0/array + /usr/include/c++/11.2.0/bits/uses_allocator.h + /usr/include/c++/11.2.0/bits/invoke.h + /usr/include/c++/11.2.0/bits/refwrap.h + /usr/include/c++/11.2.0/bits/std_function.h + /usr/include/c++/11.2.0/unordered_map + /usr/include/c++/11.2.0/ext/aligned_buffer.h + /usr/include/c++/11.2.0/bits/hashtable.h + /usr/include/c++/11.2.0/bits/hashtable_policy.h + /usr/include/c++/11.2.0/bits/node_handle.h + /usr/include/c++/11.2.0/bits/unordered_map.h + /usr/include/c++/11.2.0/bits/erase_if.h + /usr/include/c++/11.2.0/pstl/execution_defs.h /home/noah/Documents/School/CS-7353_Analysis-of-Algorithms/HW/HW4/src/HiddenLines.h /usr/include/c++/11.2.0/set /usr/include/c++/11.2.0/bits/stl_tree.h - /usr/include/c++/11.2.0/ext/aligned_buffer.h - /usr/include/c++/11.2.0/bits/node_handle.h /usr/include/c++/11.2.0/bits/stl_set.h /usr/include/c++/11.2.0/bits/stl_multiset.h - /usr/include/c++/11.2.0/bits/erase_if.h + /usr/include/c++/11.2.0/map + /usr/include/c++/11.2.0/bits/stl_map.h + /usr/include/c++/11.2.0/bits/stl_multimap.h /home/noah/Documents/School/CS-7353_Analysis-of-Algorithms/HW/HW4/src/Line.h diff --git a/build/CMakeFiles/HLlib.dir/compiler_depend.make b/build/CMakeFiles/HLlib.dir/compiler_depend.make index ff7e373..a22de86 100644 --- a/build/CMakeFiles/HLlib.dir/compiler_depend.make +++ b/build/CMakeFiles/HLlib.dir/compiler_depend.make @@ -221,19 +221,57 @@ CMakeFiles/HLlib.dir/src/HiddenLines.cpp.o: ../src/HiddenLines.cpp \ /usr/include/c++/11.2.0/tr1/riemann_zeta.tcc \ /usr/include/c++/11.2.0/utility \ /usr/include/c++/11.2.0/bits/stl_relops.h \ + /usr/include/c++/11.2.0/algorithm \ + /usr/include/c++/11.2.0/bits/stl_algo.h \ + /usr/include/c++/11.2.0/bits/algorithmfwd.h \ + /usr/include/c++/11.2.0/bits/stl_heap.h \ + /usr/include/c++/11.2.0/bits/stl_tempbuf.h \ + /usr/include/c++/11.2.0/bits/uniform_int_dist.h \ + /usr/include/c++/11.2.0/pstl/glue_algorithm_defs.h \ + /usr/include/c++/11.2.0/functional \ + /usr/include/c++/11.2.0/tuple \ + /usr/include/c++/11.2.0/array \ + /usr/include/c++/11.2.0/bits/uses_allocator.h \ + /usr/include/c++/11.2.0/bits/invoke.h \ + /usr/include/c++/11.2.0/bits/refwrap.h \ + /usr/include/c++/11.2.0/bits/std_function.h \ + /usr/include/c++/11.2.0/unordered_map \ + /usr/include/c++/11.2.0/ext/aligned_buffer.h \ + /usr/include/c++/11.2.0/bits/hashtable.h \ + /usr/include/c++/11.2.0/bits/hashtable_policy.h \ + /usr/include/c++/11.2.0/bits/node_handle.h \ + /usr/include/c++/11.2.0/bits/unordered_map.h \ + /usr/include/c++/11.2.0/bits/erase_if.h \ + /usr/include/c++/11.2.0/pstl/execution_defs.h \ ../src/HiddenLines.h \ /usr/include/c++/11.2.0/set \ /usr/include/c++/11.2.0/bits/stl_tree.h \ - /usr/include/c++/11.2.0/ext/aligned_buffer.h \ - /usr/include/c++/11.2.0/bits/node_handle.h \ /usr/include/c++/11.2.0/bits/stl_set.h \ /usr/include/c++/11.2.0/bits/stl_multiset.h \ - /usr/include/c++/11.2.0/bits/erase_if.h \ + /usr/include/c++/11.2.0/map \ + /usr/include/c++/11.2.0/bits/stl_map.h \ + /usr/include/c++/11.2.0/bits/stl_multimap.h \ ../src/Line.h +/usr/include/c++/11.2.0/map: + +/usr/include/c++/11.2.0/bits/hashtable_policy.h: + /usr/include/c++/11.2.0/ext/aligned_buffer.h: +/usr/include/c++/11.2.0/bits/invoke.h: + +/usr/include/c++/11.2.0/bits/uses_allocator.h: + +/usr/include/c++/11.2.0/tuple: + +/usr/include/c++/11.2.0/bits/uniform_int_dist.h: + +/usr/include/c++/11.2.0/bits/stl_tempbuf.h: + +/usr/include/c++/11.2.0/bits/stl_heap.h: + /usr/include/c++/11.2.0/tr1/poly_laguerre.tcc: /usr/include/c++/11.2.0/tr1/legendre_function.tcc: @@ -260,12 +298,16 @@ CMakeFiles/HLlib.dir/src/HiddenLines.cpp.o: ../src/HiddenLines.cpp \ /usr/include/bits/fp-fast.h: +/usr/include/c++/11.2.0/array: + /usr/include/bits/libm-simd-decl-stubs.h: /usr/include/bits/math-vector.h: /usr/include/c++/11.2.0/cmath: +/usr/include/c++/11.2.0/bits/unordered_map.h: + /usr/include/c++/11.2.0/math.h: /usr/include/c++/11.2.0/limits: @@ -306,6 +348,8 @@ CMakeFiles/HLlib.dir/src/HiddenLines.cpp.o: ../src/HiddenLines.cpp \ /usr/include/c++/11.2.0/bits/basic_ios.h: +/usr/include/c++/11.2.0/bits/std_function.h: + /usr/include/c++/11.2.0/streambuf: /usr/include/c++/11.2.0/bits/locale_classes.tcc: @@ -324,12 +368,18 @@ CMakeFiles/HLlib.dir/src/HiddenLines.cpp.o: ../src/HiddenLines.cpp \ /usr/include/errno.h: +/usr/include/c++/11.2.0/bits/stl_multimap.h: + /usr/include/c++/11.2.0/cerrno: +/usr/include/c++/11.2.0/bits/stl_map.h: + /usr/include/c++/11.2.0/bits/codecvt.h: /usr/include/bits/stdio.h: +/usr/include/c++/11.2.0/bits/algorithmfwd.h: + /usr/include/bits/types/struct_FILE.h: /usr/include/bits/types/__fpos64_t.h: @@ -370,6 +420,8 @@ CMakeFiles/HLlib.dir/src/HiddenLines.cpp.o: ../src/HiddenLines.cpp \ /usr/include/c++/11.2.0/bits/char_traits.h: +/usr/include/c++/11.2.0/bits/hashtable.h: + /usr/include/bits/waitstatus.h: /usr/include/bits/timesize.h: @@ -476,6 +528,8 @@ CMakeFiles/HLlib.dir/src/HiddenLines.cpp.o: ../src/HiddenLines.cpp \ /usr/include/c++/11.2.0/exception: +/usr/include/c++/11.2.0/pstl/glue_algorithm_defs.h: + /usr/include/bits/pthread_stack_min-dynamic.h: /usr/include/c++/11.2.0/bits/stl_set.h: @@ -490,6 +544,8 @@ CMakeFiles/HLlib.dir/src/HiddenLines.cpp.o: ../src/HiddenLines.cpp \ /usr/include/c++/11.2.0/bits/stl_multiset.h: +/usr/include/c++/11.2.0/functional: + /usr/include/c++/11.2.0/x86_64-pc-linux-gnu/bits/cpu_defines.h: /usr/include/bits/byteswap.h: @@ -498,6 +554,8 @@ CMakeFiles/HLlib.dir/src/HiddenLines.cpp.o: ../src/HiddenLines.cpp \ /usr/include/c++/11.2.0/bits/ios_base.h: +/usr/include/c++/11.2.0/bits/refwrap.h: + /usr/include/c++/11.2.0/x86_64-pc-linux-gnu/bits/gthr.h: /usr/include/c++/11.2.0/debug/assertions.h: @@ -512,6 +570,8 @@ CMakeFiles/HLlib.dir/src/HiddenLines.cpp.o: ../src/HiddenLines.cpp \ /usr/include/c++/11.2.0/bits/memoryfwd.h: +/usr/include/c++/11.2.0/unordered_map: + /usr/include/bits/flt-eval-method.h: /usr/include/c++/11.2.0/bits/basic_ios.tcc: @@ -522,6 +582,8 @@ CMakeFiles/HLlib.dir/src/HiddenLines.cpp.o: ../src/HiddenLines.cpp \ /usr/include/bits/wchar.h: +/usr/include/c++/11.2.0/algorithm: + /usr/include/c++/11.2.0/cwchar: /usr/include/bits/types/struct_tm.h: @@ -544,6 +606,8 @@ CMakeFiles/HLlib.dir/src/HiddenLines.cpp.o: ../src/HiddenLines.cpp \ /usr/include/c++/11.2.0/bits/predefined_ops.h: +/usr/include/c++/11.2.0/pstl/execution_defs.h: + /usr/include/c++/11.2.0/type_traits: /usr/include/bits/stdint-intn.h: @@ -642,6 +706,8 @@ CMakeFiles/HLlib.dir/src/HiddenLines.cpp.o: ../src/HiddenLines.cpp \ /usr/include/bits/pthreadtypes.h: +/usr/include/c++/11.2.0/bits/stl_algo.h: + /usr/include/c++/11.2.0/clocale: /usr/include/bits/thread-shared-types.h: diff --git a/build/CMakeFiles/HLlib.dir/src/HiddenLines.cpp.o b/build/CMakeFiles/HLlib.dir/src/HiddenLines.cpp.o index c0f1662..7e74e61 100644 Binary files a/build/CMakeFiles/HLlib.dir/src/HiddenLines.cpp.o and b/build/CMakeFiles/HLlib.dir/src/HiddenLines.cpp.o differ diff --git a/build/CMakeFiles/HLlib.dir/src/HiddenLines.cpp.o.d b/build/CMakeFiles/HLlib.dir/src/HiddenLines.cpp.o.d index b05846e..2ff175e 100644 --- a/build/CMakeFiles/HLlib.dir/src/HiddenLines.cpp.o.d +++ b/build/CMakeFiles/HLlib.dir/src/HiddenLines.cpp.o.d @@ -160,11 +160,31 @@ CMakeFiles/HLlib.dir/src/HiddenLines.cpp.o: \ /usr/include/c++/11.2.0/tr1/riemann_zeta.tcc \ /usr/include/c++/11.2.0/utility \ /usr/include/c++/11.2.0/bits/stl_relops.h \ + /usr/include/c++/11.2.0/algorithm \ + /usr/include/c++/11.2.0/bits/stl_algo.h \ + /usr/include/c++/11.2.0/bits/algorithmfwd.h \ + /usr/include/c++/11.2.0/bits/stl_heap.h \ + /usr/include/c++/11.2.0/bits/stl_tempbuf.h \ + /usr/include/c++/11.2.0/bits/uniform_int_dist.h \ + /usr/include/c++/11.2.0/pstl/glue_algorithm_defs.h \ + /usr/include/c++/11.2.0/functional /usr/include/c++/11.2.0/tuple \ + /usr/include/c++/11.2.0/array \ + /usr/include/c++/11.2.0/bits/uses_allocator.h \ + /usr/include/c++/11.2.0/bits/invoke.h \ + /usr/include/c++/11.2.0/bits/refwrap.h \ + /usr/include/c++/11.2.0/bits/std_function.h \ + /usr/include/c++/11.2.0/unordered_map \ + /usr/include/c++/11.2.0/ext/aligned_buffer.h \ + /usr/include/c++/11.2.0/bits/hashtable.h \ + /usr/include/c++/11.2.0/bits/hashtable_policy.h \ + /usr/include/c++/11.2.0/bits/node_handle.h \ + /usr/include/c++/11.2.0/bits/unordered_map.h \ + /usr/include/c++/11.2.0/bits/erase_if.h \ + /usr/include/c++/11.2.0/pstl/execution_defs.h \ /home/noah/Documents/School/CS-7353_Analysis-of-Algorithms/HW/HW4/src/HiddenLines.h \ /usr/include/c++/11.2.0/set /usr/include/c++/11.2.0/bits/stl_tree.h \ - /usr/include/c++/11.2.0/ext/aligned_buffer.h \ - /usr/include/c++/11.2.0/bits/node_handle.h \ /usr/include/c++/11.2.0/bits/stl_set.h \ - /usr/include/c++/11.2.0/bits/stl_multiset.h \ - /usr/include/c++/11.2.0/bits/erase_if.h \ + /usr/include/c++/11.2.0/bits/stl_multiset.h /usr/include/c++/11.2.0/map \ + /usr/include/c++/11.2.0/bits/stl_map.h \ + /usr/include/c++/11.2.0/bits/stl_multimap.h \ /home/noah/Documents/School/CS-7353_Analysis-of-Algorithms/HW/HW4/src/Line.h diff --git a/build/CMakeFiles/linelib.dir/compiler_depend.internal b/build/CMakeFiles/linelib.dir/compiler_depend.internal index 34e0779..3367adb 100644 --- a/build/CMakeFiles/linelib.dir/compiler_depend.internal +++ b/build/CMakeFiles/linelib.dir/compiler_depend.internal @@ -5,4 +5,17 @@ CMakeFiles/linelib.dir/src/Line.cpp.o /home/noah/Documents/School/CS-7353_Analysis-of-Algorithms/HW/HW4/src/Line.cpp /usr/include/stdc-predef.h /home/noah/Documents/School/CS-7353_Analysis-of-Algorithms/HW/HW4/src/Line.h + /usr/include/c++/11.2.0/limits + /usr/include/c++/11.2.0/x86_64-pc-linux-gnu/bits/c++config.h + /usr/include/c++/11.2.0/x86_64-pc-linux-gnu/bits/os_defines.h + /usr/include/features.h + /usr/include/features-time64.h + /usr/include/bits/wordsize.h + /usr/include/bits/timesize.h + /usr/include/sys/cdefs.h + /usr/include/bits/long-double.h + /usr/include/gnu/stubs.h + /usr/include/gnu/stubs-64.h + /usr/include/c++/11.2.0/x86_64-pc-linux-gnu/bits/cpu_defines.h + /usr/include/c++/11.2.0/pstl/pstl_config.h diff --git a/build/CMakeFiles/linelib.dir/compiler_depend.make b/build/CMakeFiles/linelib.dir/compiler_depend.make index 10d2aae..d84048d 100644 --- a/build/CMakeFiles/linelib.dir/compiler_depend.make +++ b/build/CMakeFiles/linelib.dir/compiler_depend.make @@ -3,11 +3,50 @@ CMakeFiles/linelib.dir/src/Line.cpp.o: ../src/Line.cpp \ /usr/include/stdc-predef.h \ - ../src/Line.h + ../src/Line.h \ + /usr/include/c++/11.2.0/limits \ + /usr/include/c++/11.2.0/x86_64-pc-linux-gnu/bits/c++config.h \ + /usr/include/c++/11.2.0/x86_64-pc-linux-gnu/bits/os_defines.h \ + /usr/include/features.h \ + /usr/include/features-time64.h \ + /usr/include/bits/wordsize.h \ + /usr/include/bits/timesize.h \ + /usr/include/sys/cdefs.h \ + /usr/include/bits/long-double.h \ + /usr/include/gnu/stubs.h \ + /usr/include/gnu/stubs-64.h \ + /usr/include/c++/11.2.0/x86_64-pc-linux-gnu/bits/cpu_defines.h \ + /usr/include/c++/11.2.0/pstl/pstl_config.h -../src/Line.h: +/usr/include/c++/11.2.0/pstl/pstl_config.h: + +/usr/include/c++/11.2.0/x86_64-pc-linux-gnu/bits/cpu_defines.h: + +/usr/include/c++/11.2.0/limits: + +/usr/include/c++/11.2.0/x86_64-pc-linux-gnu/bits/os_defines.h: /usr/include/stdc-predef.h: +/usr/include/c++/11.2.0/x86_64-pc-linux-gnu/bits/c++config.h: + +/usr/include/gnu/stubs-64.h: + +/usr/include/bits/timesize.h: + +../src/Line.h: + +/usr/include/features.h: + +/usr/include/features-time64.h: + ../src/Line.cpp: + +/usr/include/bits/wordsize.h: + +/usr/include/sys/cdefs.h: + +/usr/include/bits/long-double.h: + +/usr/include/gnu/stubs.h: diff --git a/build/CMakeFiles/linelib.dir/src/Line.cpp.o b/build/CMakeFiles/linelib.dir/src/Line.cpp.o index 9fd85be..5f26e33 100644 Binary files a/build/CMakeFiles/linelib.dir/src/Line.cpp.o and b/build/CMakeFiles/linelib.dir/src/Line.cpp.o differ diff --git a/build/CMakeFiles/linelib.dir/src/Line.cpp.o.d b/build/CMakeFiles/linelib.dir/src/Line.cpp.o.d index 9fa47ca..bdf6cbf 100644 --- a/build/CMakeFiles/linelib.dir/src/Line.cpp.o.d +++ b/build/CMakeFiles/linelib.dir/src/Line.cpp.o.d @@ -1,4 +1,13 @@ CMakeFiles/linelib.dir/src/Line.cpp.o: \ /home/noah/Documents/School/CS-7353_Analysis-of-Algorithms/HW/HW4/src/Line.cpp \ /usr/include/stdc-predef.h \ - /home/noah/Documents/School/CS-7353_Analysis-of-Algorithms/HW/HW4/src/Line.h + /home/noah/Documents/School/CS-7353_Analysis-of-Algorithms/HW/HW4/src/Line.h \ + /usr/include/c++/11.2.0/limits \ + /usr/include/c++/11.2.0/x86_64-pc-linux-gnu/bits/c++config.h \ + /usr/include/c++/11.2.0/x86_64-pc-linux-gnu/bits/os_defines.h \ + /usr/include/features.h /usr/include/features-time64.h \ + /usr/include/bits/wordsize.h /usr/include/bits/timesize.h \ + /usr/include/sys/cdefs.h /usr/include/bits/long-double.h \ + /usr/include/gnu/stubs.h /usr/include/gnu/stubs-64.h \ + /usr/include/c++/11.2.0/x86_64-pc-linux-gnu/bits/cpu_defines.h \ + /usr/include/c++/11.2.0/pstl/pstl_config.h diff --git a/build/CMakeFiles/main.dir/src/main.cpp.o b/build/CMakeFiles/main.dir/src/main.cpp.o index 40da628..553b2c6 100644 Binary files a/build/CMakeFiles/main.dir/src/main.cpp.o and b/build/CMakeFiles/main.dir/src/main.cpp.o differ diff --git a/build/CMakeFiles/main.dir/src/main.cpp.o.d b/build/CMakeFiles/main.dir/src/main.cpp.o.d index a679673..bec74f0 100644 --- a/build/CMakeFiles/main.dir/src/main.cpp.o.d +++ b/build/CMakeFiles/main.dir/src/main.cpp.o.d @@ -136,5 +136,11 @@ CMakeFiles/main.dir/src/main.cpp.o: \ /usr/include/c++/11.2.0/bits/node_handle.h \ /usr/include/c++/11.2.0/bits/stl_set.h \ /usr/include/c++/11.2.0/bits/stl_multiset.h \ - /usr/include/c++/11.2.0/bits/erase_if.h \ + /usr/include/c++/11.2.0/bits/erase_if.h /usr/include/c++/11.2.0/map \ + /usr/include/c++/11.2.0/bits/stl_map.h /usr/include/c++/11.2.0/tuple \ + /usr/include/c++/11.2.0/utility \ + /usr/include/c++/11.2.0/bits/stl_relops.h /usr/include/c++/11.2.0/array \ + /usr/include/c++/11.2.0/bits/uses_allocator.h \ + /usr/include/c++/11.2.0/bits/invoke.h \ + /usr/include/c++/11.2.0/bits/stl_multimap.h \ /home/noah/Documents/School/CS-7353_Analysis-of-Algorithms/HW/HW4/src/Line.h diff --git a/build/libHLlib.a b/build/libHLlib.a index a292790..25513ae 100644 Binary files a/build/libHLlib.a and b/build/libHLlib.a differ diff --git a/build/liblinelib.a b/build/liblinelib.a index 5b09538..a514ebb 100644 Binary files a/build/liblinelib.a and b/build/liblinelib.a differ diff --git a/build/main b/build/main index c367524..6829794 100755 Binary files a/build/main and b/build/main differ diff --git a/src/HiddenLines.cpp b/src/HiddenLines.cpp index 233fdbb..7474ad5 100644 --- a/src/HiddenLines.cpp +++ b/src/HiddenLines.cpp @@ -7,6 +7,7 @@ #include #include #include +#include #include "HiddenLines.h" @@ -29,7 +30,6 @@ void HL::print_sol() std::set HL::gen_sol(const std::set& ls){ HL inst = *this; if (ls.size() > 2){ - //Create left and right half sets int split = ceil(ls.size()/2); std::set lh; @@ -48,7 +48,35 @@ std::set HL::gen_sol(const std::set& ls){ } //Recursive call - return merge(inst.gen_sol(lh), inst.gen_sol(rh)); + auto tmp_sol = merge(inst.gen_sol(lh), inst.gen_sol(rh)); + + for (auto itr = tmp_sol.begin(); itr != tmp_sol.end(); itr++){ + Line l1 = *itr; + sol.insert(std::make_pair(l1.get_id(), std::make_pair(l1.get_vis_start(), l1.get_vis_end()))); + } + + std::set> piecewise; + //Cleanup Solution + for(auto itr = sol.begin(); itr != sol.end();){ + auto start_range = std::get<0>(std::get<1>(*itr)); + auto stop_range = std::get<1>(std::get<1>(*itr)); + + auto it = std::find_if(piecewise.begin(), piecewise.end(), + [start_range](const std::pair& p ){ return p.first == start_range; }); + + if (it != piecewise.end()){ + //st.erase(it); + } + + if (start_range == stop_range){ + sol.erase(itr); + } + else{ + itr++; + } + } + + return tmp_sol; } //Set with 2 lines is a base case: both are visible at +-inf respectively, and intersection is where they change @@ -60,34 +88,28 @@ std::set HL::gen_sol(const std::set& ls){ //Smaller Slope: vis from isec to inf l1.set_vis_start(isec); - l1.set_vis_end(std::numeric_limits::infinity()); - + l1.set_vis_end(std::numeric_limits::max()); //Greater Slope: vis from -inf to isec - l2.set_vis_start(-std::numeric_limits::infinity()); + l2.set_vis_start(-std::numeric_limits::max()); l2.set_vis_end(isec); //Insert partial solutions sol.insert(std::make_pair(l1.get_id(), std::make_pair(l1.get_vis_start(), l1.get_vis_end()))); sol.insert(std::make_pair(l2.get_id(), std::make_pair(l2.get_vis_start(), l2.get_vis_end()))); - inst.print_sol(); - return ls; } //Set with 1 line: vis at +-inf else{ auto l1 = *(ls.begin()); - l1.set_vis_start(-std::numeric_limits::infinity()); - l1.set_vis_end(std::numeric_limits::infinity()); + + l1.set_vis_start(-std::numeric_limits::max()); + l1.set_vis_end(std::numeric_limits::max()); return ls; } - - //return sol; - //std::set dummy; - //return dummy; } std::set HL::construct_HWprob(){ @@ -127,15 +149,18 @@ std::set HL::construct_HWprob(){ Line newline = Line(slope, ycept); newline.set_id(); lines.insert(newline); + line_holder.insert(std::make_pair(newline.get_id(),newline)); } - std::cout << "Sorted Lines by slope:" << std::endl; + std::cout << "---------------Sorted Lines by slope:---------------" << std::endl; for(Line line : lines) { std::cout << "Line " << line.get_id() << " has slope " << line.get_slope() << " and a y-intercept of " << line.get_ycept() << std::endl; } + std::cout << "-----------------------------------------------------" << std::endl; + return lines; } @@ -150,15 +175,44 @@ std::set merge(std::set lh, std::set rh){ Line l1 = *litr; Line l2 = *ritr; - if(l1.get_slope() < l2.get_slope()){ + //3 Cases: lh slope is less, slopes are equal, and lh slope is greater + //Case 1: + if (l1.get_slope() < l2.get_slope()){ + double isec = (l2.get_ycept() - l1.get_ycept())/(l1.get_slope() - l2.get_slope()); + l1.set_vis_end(isec); + l2.set_vis_start(isec); + merged.insert(l1); + merged.insert(l2); litr++; - continue; } + + else if (l1.get_slope() == l2.get_slope()){ + if (l1.get_ycept() > l2.get_ycept()){ + l2.set_vis_start(0); + l2.set_vis_end(0); + merged.insert(l1); + } + else{ + l1.set_vis_start(0); + l2.set_vis_end(0); + merged.insert(l2); + } + + litr++; + ritr++; + } + else{ - + double isec = (l2.get_ycept() - l1.get_ycept())/(l1.get_slope() - l2.get_slope()); + l1.set_vis_start(isec); + l2.set_vis_end(isec); + merged.insert(l1); + merged.insert(l2); + ritr++; } - } + + return merged; } std::set HL::get_lines() const{ diff --git a/src/HiddenLines.h b/src/HiddenLines.h index 9de6458..23e5faf 100644 --- a/src/HiddenLines.h +++ b/src/HiddenLines.h @@ -1,6 +1,7 @@ //Hidden Lines work #include +#include #include "Line.h" @@ -16,6 +17,8 @@ class HL std::set get_lines() const; std::set>> get_sol() const; + std::map line_holder; + private: //Solution is in form (Line ID, (vis_start, vis_end)) std::set>> sol; diff --git a/src/Line.cpp b/src/Line.cpp index 78fbb24..8558c1a 100644 --- a/src/Line.cpp +++ b/src/Line.cpp @@ -1,6 +1,8 @@ //Line Class #include "Line.h" +#include + int Line::current_id = 0; @@ -9,6 +11,8 @@ Line::Line(double x, double y) set_slope(x); set_ycept(y); id = 0; + set_vis_start(-std::numeric_limits::max()); + set_vis_end(std::numeric_limits::max()); } void Line::set_slope(double &x) @@ -74,4 +78,4 @@ void Line::set_vis_start(double x) void Line::set_vis_end(double x) { vis_end = x; -} \ No newline at end of file +} diff --git a/src/main.cpp b/src/main.cpp index b17a837..31f5f4e 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -9,10 +9,11 @@ int main(int argc, char *argv[]) { - std::cout << "Constructing Problem..." << std::endl; + std::cout << "Constructing Problem...\n" << std::endl; HL inst = HL(); + std::cout << std::endl; - std::cout << "Generating Solution." << std::endl; + std::cout << "Generating Solution.\n" << std::endl; inst.gen_sol(inst.get_lines()); std::cout << "Solution is: " << std::endl;