diff --git a/Code/hull.cpp b/Code/hull.cpp index 9a467ff000259d7d598ba165ad341b891f8c762c..25249b6ccbbc01eb20c197c883d7a27f7d2b8811 100644 --- a/Code/hull.cpp +++ b/Code/hull.cpp @@ -10,6 +10,8 @@ #include <sstream> #include <cmath> +//{{{ struct vec + struct vec { vec(float x, float y) : x(x), y(y) {} float x ; @@ -36,33 +38,23 @@ struct vec { } } ; -using rational = boost::multiprecision::cpp_rational ; +//}}} -template<typename number = rational> int orient(const vec& v0, const vec& v1) { - number v0x = v0.x ; - number v0y = v0.y ; - number v1x = v1.x ; - number v1y = v1.y ; + //determinant + float d = v0.x*v1.y - v0.y*v1.x ; - number d = v0x*v1y - v0y*v1x ; + //encode as sign if(d > 0) return 1 ; if(d < 0) return -1 ; - std::cout << "zero case" << std::endl ; - //return 0 ; - if(v1y > 0) return 1 ; - if(v1y < 0) return -1 ; - if(v1x > 0) return -1 ; - if(v1x < 0) return 1 ; - if(v0y > 0) return -1 ; - if(v0y < 0) return 1 ; - if(v0x > 0) return 1 ; - if(v0y < 0) return -1 ; - return 1 ; + return 0 ; } struct vec_compare { + //functor given leftmost point for sort vec_compare(const vec& origin) : origin(origin) {} + + //comparison bool operator()(const vec& p0, const vec& p1) { int o = orient(p0-origin, p1-origin) ; return o < 0 ; @@ -70,6 +62,8 @@ struct vec_compare { const vec& origin ; } ; +//{{{leftmost + size_t leftmost(const std::vector<vec>& points) { size_t min = 0 ; for(size_t i = 1; i < points.size(); ++i) { @@ -80,18 +74,26 @@ size_t leftmost(const std::vector<vec>& points) { return min ; } +//}}} + void compute_hull(std::vector<vec>& points, std::vector<vec>& hull) { + //leftmost point ahead size_t l = leftmost(points) ; std::swap(*points.begin(), *(points.begin() + l)) ; + //sort the rest by angle std::sort(points.begin() + 1, points.end(), vec_compare(points[0])) ; + //add the first two points to the hull hull.push_back(points[0]) ; hull.push_back(points[1]) ; + //sweep the remaining points for(size_t i = 2; i < points.size(); ++i) { + //check whether the last segment creates a wrong turn const vec& p = points[i] ; vec v1 = p - *(hull.end() - 1) ; vec v2 = *(hull.end() - 1) - *(hull.end() - 2) ; while(hull.size() > 1 && orient(v1, v2) < 0) { + //in case of wrong turn, rease the last point of the hull and iterate hull.erase(hull.end() - 1) ; v1 = p - *(hull.end() - 1) ; v2 = p - *(hull.end() - 2) ; @@ -100,6 +102,8 @@ void compute_hull(std::vector<vec>& points, std::vector<vec>& hull) { } } +//{{{ generate svg + void svg_hull(const std::string& filename, const std::vector<vec>& points, const std::vector<vec>& hull) { std::ofstream file(filename) ; SvgPad svg(file, 1024, 1024) ; @@ -118,12 +122,33 @@ void svg_hull(const std::string& filename, const std::vector<vec>& points, const svg.close() ; } +void svg_sort(const std::string& filename, const std::vector<vec>& points) { + std::ofstream file(filename) ; + SvgPad svg(file, 1024, 1024) ; + svg.open() ; + + float col0[3] = { 1., 0.9, 0.3 } ; + float col1[3] = { 0.35, 0.2, 0.4 } ; + for(size_t i = 1; i < points.size(); ++i) { + float b = ((float) i-1) / (points.size() - 1) ; + float a = 1-b ; + svg.stroke(a*col0[0] + b*col1[0], a*col0[1] + b*col1[1], a*col0[2] + b*col1[2]) ; + svg.line(points[0].x, points[0].y, points[i].x, points[i].y) ; + } + + svg.close() ; +} + +//}}} + int main() { unsigned int size = 100 ; + //{{{ random test { + //random numbers std::random_device rd ; std::mt19937 alea(rd()) ; std::uniform_real_distribution<float> uniform_float(0, 1) ; @@ -131,50 +156,42 @@ int main() { std::vector<vec> points ; for(unsigned int i = 0; i < size; ++i) { + //generate a uniform point in a ball vec p(normal_float(alea), normal_float(alea)) ; float n = sqrt(uniform_float(alea)) / 2 ; p = p * (n / p.length()) + vec(0.5,0.5); points.push_back(p) ; } + //hull std::vector<vec> hull ; compute_hull(points, hull) ; - svg_hull("/tmp/test_hull.svg", points, hull) ; + svg_hull("/tmp/hull_test.svg", points, hull) ; + svg_sort("/tmp/hull_lines.svg", points) ; } - { - unsigned int subdivisions = 30 ; - float near = 127 ; - float mid = 0.5 ; - for(unsigned int ratio = 1; ratio < subdivisions; ++ratio) { - std::vector<vec> points ; - points.emplace_back(1, 0) ; - points.emplace_back(0, 0) ; - points.emplace_back(mid, 1) ; - points.emplace_back(mid/near, 1./near) ; - points.emplace_back(mid/near + (mid - 1./near) * ((float) ratio) / subdivisions, 1./near + (1 - 2./near) * ((float) ratio) / subdivisions) ; - - std::vector<vec> hull ; - compute_hull(points, hull) ; - std::stringstream fname ; - fname << "/tmp/pbm_hull" << ratio << ".svg" ; - svg_hull(fname.str(), points, hull) ; - } - } + //}}} + + //{{{ wicked test { std::vector<vec> points ; + //aligned points points.emplace_back(0, 0.5) ; points.emplace_back(0, 1) ; points.emplace_back(0, 0) ; points.emplace_back(0, 0.8) ; + //make the hull non flat points.emplace_back(1, 0.5) ; + //hull std::vector<vec> hull ; compute_hull(points, hull) ; - svg_hull("/tmp/ordered.svg", points, hull) ; + svg_hull("/tmp/hull_aligned.svg", points, hull) ; } + //}}} + return 0 ; } diff --git a/Presentation/Figures/hull.pdf b/Presentation/Figures/hull.pdf new file mode 100644 index 0000000000000000000000000000000000000000..df58a760afc4eb7f936bd737d773fdb24a16f995 Binary files /dev/null and b/Presentation/Figures/hull.pdf differ diff --git a/Presentation/Figures/hull.svg b/Presentation/Figures/hull.svg new file mode 100644 index 0000000000000000000000000000000000000000..7a44f379651decc26660176777ea06ba1ac7524b --- /dev/null +++ b/Presentation/Figures/hull.svg @@ -0,0 +1,1695 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + height="1024" + width="1024" + version="1.1" + id="svg1890" + sodipodi:docname="hull.svg" + inkscape:version="0.92.4 5da689c313, 2019-01-14"> + <metadata + id="metadata1896"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <defs + id="defs1894"> + <marker + inkscape:stockid="Arrow2Send" + orient="auto" + refY="0.0" + refX="0.0" + id="Arrow2Send" + style="overflow:visible;" + inkscape:isstock="true"> + <path + id="path2197" + style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#f57900;stroke-opacity:1;fill:#f57900;fill-opacity:1" + d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z " + transform="scale(0.3) rotate(180) translate(-2.3,0)" /> + </marker> + <marker + inkscape:stockid="Arrow2Mend" + orient="auto" + refY="0.0" + refX="0.0" + id="Arrow2Mend" + style="overflow:visible;" + inkscape:isstock="true"> + <path + id="path2191" + style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#f57900;stroke-opacity:1;fill:#f57900;fill-opacity:1" + d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z " + transform="scale(0.6) rotate(180) translate(0,0)" /> + </marker> + </defs> + <sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="640" + inkscape:window-height="480" + id="namedview1892" + showgrid="false" + inkscape:zoom="1.3796869" + inkscape:cx="454.51793" + inkscape:cy="483.23057" + inkscape:current-layer="layer6" + inkscape:snap-object-midpoints="true" /> + <g + inkscape:groupmode="layer" + id="layer4" + inkscape:label="sort" + style="display:inline"> + <g + id="g2447"> + <line + id="line2142" + y2="409" + x2="75" + y1="481" + x1="56" + style="stroke:#ffe64c;stroke-width:2" /> + <line + id="line2144" + y2="286" + x2="149" + y1="481" + x1="56" + style="stroke:#fee44d;stroke-width:2" /> + <line + id="line2146" + y2="180" + x2="204" + y1="481" + x1="56" + style="stroke:#fce24d;stroke-width:2" /> + <line + id="line2148" + y2="225" + x2="190" + y1="481" + x1="56" + style="stroke:#fae04d;stroke-width:2" /> + <line + id="line2150" + y2="238" + x2="196" + y1="481" + x1="56" + style="stroke:#f9df4d;stroke-width:2" /> + <line + id="line2152" + y2="329" + x2="153" + y1="481" + x1="56" + style="stroke:#f7dd4e;stroke-width:2" /> + <line + id="line2154" + y2="213" + x2="256" + y1="481" + x1="56" + style="stroke:#f5db4e;stroke-width:2" /> + <line + id="line2156" + y2="244" + x2="234" + y1="481" + x1="56" + style="stroke:#f4d94e;stroke-width:2" /> + <line + id="line2158" + y2="391" + x2="133" + y1="481" + x1="56" + style="stroke:#f2d74e;stroke-width:2" /> + <line + id="line2160" + y2="367" + x2="158" + y1="481" + x1="56" + style="stroke:#f0d64f;stroke-width:2" /> + <line + id="line2162" + y2="300" + x2="249" + y1="481" + x1="56" + style="stroke:#efd44f;stroke-width:2" /> + <line + id="line2164" + y2="193" + x2="412" + y1="481" + x1="56" + style="stroke:#edd24f;stroke-width:2" /> + <line + id="line2166" + y2="132" + x2="531" + y1="481" + x1="56" + style="stroke:#ebd04f;stroke-width:2" /> + <line + id="line2168" + y2="80" + x2="628" + y1="481" + x1="56" + style="stroke:#eace50;stroke-width:2" /> + <line + id="line2170" + y2="221" + x2="434" + y1="481" + x1="56" + style="stroke:#e8cd50;stroke-width:2" /> + <line + id="line2172" + y2="135" + x2="623" + y1="481" + x1="56" + style="stroke:#e6cb50;stroke-width:2" /> + <line + id="line2174" + y2="100" + x2="685" + y1="481" + x1="56" + style="stroke:#e5c950;stroke-width:2" /> + <line + id="line2176" + y2="242" + x2="462" + y1="481" + x1="56" + style="stroke:#e3c751;stroke-width:2" /> + <line + id="line2178" + y2="190" + x2="607" + y1="481" + x1="56" + style="stroke:#e1c551;stroke-width:2" /> + <line + id="line2180" + y2="366" + x2="274" + y1="481" + x1="56" + style="stroke:#e0c451;stroke-width:2" /> + <line + id="line2182" + y2="212" + x2="619" + y1="481" + x1="56" + style="stroke:#dec251;stroke-width:2" /> + <line + id="line2184" + y2="257" + x2="539" + y1="481" + x1="56" + style="stroke:#dcc052;stroke-width:2" /> + <line + id="line2186" + y2="259" + x2="590" + y1="481" + x1="56" + style="stroke:#dbbe52;stroke-width:2" /> + <line + id="line2188" + y2="196" + x2="764" + y1="481" + x1="56" + style="stroke:#d9bc52;stroke-width:2" /> + <line + id="line2190" + y2="199" + x2="771" + y1="481" + x1="56" + style="stroke:#d7ba53;stroke-width:2" /> + <line + id="line2192" + y2="211" + x2="741" + y1="481" + x1="56" + style="stroke:#d5b953;stroke-width:2" /> + <line + id="line2194" + y2="262" + x2="667" + y1="481" + x1="56" + style="stroke:#d4b753;stroke-width:2" /> + <line + id="line2196" + y2="395" + x2="313" + y1="481" + x1="56" + style="stroke:#d2b553;stroke-width:2" /> + <line + id="line2198" + y2="255" + x2="766" + y1="481" + x1="56" + style="stroke:#d0b354;stroke-width:2" /> + <line + id="line2200" + y2="349" + x2="501" + y1="481" + x1="56" + style="stroke:#cfb154;stroke-width:2" /> + <line + id="line2202" + y2="382" + x2="421" + y1="481" + x1="56" + style="stroke:#cdb054;stroke-width:2" /> + <line + id="line2204" + y2="315" + x2="669" + y1="481" + x1="56" + style="stroke:#cbae54;stroke-width:2" /> + <line + id="line2206" + y2="329" + x2="684" + y1="481" + x1="56" + style="stroke:#caac55;stroke-width:2" /> + <line + id="line2208" + y2="322" + x2="727" + y1="481" + x1="56" + style="stroke:#c8aa55;stroke-width:2" /> + <line + id="line2210" + y2="317" + x2="798" + y1="481" + x1="56" + style="stroke:#c6a855;stroke-width:2" /> + <line + id="line2212" + y2="398" + x2="465" + y1="481" + x1="56" + style="stroke:#c5a755;stroke-width:2" /> + <line + id="line2214" + y2="466" + x2="144" + y1="481" + x1="56" + style="stroke:#c3a556;stroke-width:2" /> + <line + id="line2216" + y2="397" + x2="602" + y1="481" + x1="56" + style="stroke:#c1a356;stroke-width:2" /> + <line + id="line2218" + y2="412" + x2="523" + y1="481" + x1="56" + style="stroke:#c0a156;stroke-width:2" /> + <line + id="line2220" + y2="383" + x2="834" + y1="481" + x1="56" + style="stroke:#be9f56;stroke-width:2" /> + <line + id="line2222" + y2="406" + x2="870" + y1="481" + x1="56" + style="stroke:#bc9d57;stroke-width:2" /> + <line + id="line2224" + y2="443" + x2="729" + y1="481" + x1="56" + style="stroke:#bb9c57;stroke-width:2" /> + <line + id="line2226" + y2="438" + x2="953" + y1="481" + x1="56" + style="stroke:#b99a57;stroke-width:2" /> + <line + id="line2228" + y2="455" + x2="683" + y1="481" + x1="56" + style="stroke:#b79857;stroke-width:2" /> + <line + id="line2230" + y2="470" + x2="558" + y1="481" + x1="56" + style="stroke:#b69658;stroke-width:2" /> + <line + id="line2232" + y2="467" + x2="936" + y1="481" + x1="56" + style="stroke:#b49458;stroke-width:2" /> + <line + id="line2234" + y2="479" + x2="434" + y1="481" + x1="56" + style="stroke:#b29358;stroke-width:2" /> + <line + id="line2236" + y2="481" + x2="711" + y1="481" + x1="56" + style="stroke:#b19158;stroke-width:2" /> + <line + id="line2238" + y2="528" + x2="917" + y1="481" + x1="56" + style="stroke:#af8f59;stroke-width:2" /> + <line + id="line2240" + y2="516" + x2="690" + y1="481" + x1="56" + style="stroke:#ad8d59;stroke-width:2" /> + <line + id="line2242" + y2="544" + x2="893" + y1="481" + x1="56" + style="stroke:#ab8b59;stroke-width:2" /> + <line + id="line2244" + y2="574" + x2="772" + y1="481" + x1="56" + style="stroke:#aa8a59;stroke-width:2" /> + <line + id="line2246" + y2="561" + x2="595" + y1="481" + x1="56" + style="stroke:#a8885a;stroke-width:2" /> + <line + id="line2248" + y2="615" + x2="814" + y1="481" + x1="56" + style="stroke:#a6865a;stroke-width:2" /> + <line + id="line2250" + y2="627" + x2="830" + y1="481" + x1="56" + style="stroke:#a5845a;stroke-width:2" /> + <line + id="line2252" + y2="529" + x2="305" + y1="481" + x1="56" + style="stroke:#a3825b;stroke-width:2" /> + <line + id="line2254" + y2="599" + x2="624" + y1="481" + x1="56" + style="stroke:#a1815b;stroke-width:2" /> + <line + id="line2256" + y2="647" + x2="791" + y1="481" + x1="56" + style="stroke:#a07f5b;stroke-width:2" /> + <line + id="line2258" + y2="657" + x2="783" + y1="481" + x1="56" + style="stroke:#9e7d5b;stroke-width:2" /> + <line + id="line2260" + y2="608" + x2="575" + y1="481" + x1="56" + style="stroke:#9c7b5c;stroke-width:2" /> + <line + id="line2262" + y2="602" + x2="517" + y1="481" + x1="56" + style="stroke:#9b795c;stroke-width:2" /> + <line + id="line2264" + y2="644" + x2="624" + y1="481" + x1="56" + style="stroke:#99775c;stroke-width:2" /> + <line + id="line2266" + y2="714" + x2="790" + y1="481" + x1="56" + style="stroke:#97765c;stroke-width:2" /> + <line + id="line2268" + y2="562" + x2="310" + y1="481" + x1="56" + style="stroke:#96745d;stroke-width:2" /> + <line + id="line2270" + y2="778" + x2="857" + y1="481" + x1="56" + style="stroke:#94725d;stroke-width:2" /> + <line + id="line2272" + y2="744" + x2="752" + y1="481" + x1="56" + style="stroke:#92705d;stroke-width:2" /> + <line + id="line2274" + y2="597" + x2="346" + y1="481" + x1="56" + style="stroke:#916e5d;stroke-width:2" /> + <line + id="line2276" + y2="703" + x2="595" + y1="481" + x1="56" + style="stroke:#8f6d5e;stroke-width:2" /> + <line + id="line2278" + y2="800" + x2="814" + y1="481" + x1="56" + style="stroke:#8d6b5e;stroke-width:2" /> + <line + id="line2280" + y2="750" + x2="635" + y1="481" + x1="56" + style="stroke:#8c695e;stroke-width:2" /> + <line + id="line2282" + y2="697" + x2="520" + y1="481" + x1="56" + style="stroke:#8a675e;stroke-width:2" /> + <line + id="line2284" + y2="844" + x2="800" + y1="481" + x1="56" + style="stroke:#88655f;stroke-width:2" /> + <line + id="line2286" + y2="858" + x2="809" + y1="481" + x1="56" + style="stroke:#86645f;stroke-width:2" /> + <line + id="line2288" + y2="740" + x2="562" + y1="481" + x1="56" + style="stroke:#85625f;stroke-width:2" /> + <line + id="line2290" + y2="734" + x2="482" + y1="481" + x1="56" + style="stroke:#83605f;stroke-width:2" /> + <line + id="line2292" + y2="702" + x2="423" + y1="481" + x1="56" + style="stroke:#815e60;stroke-width:2" /> + <line + id="line2294" + y2="692" + x2="400" + y1="481" + x1="56" + style="stroke:#805c60;stroke-width:2" /> + <line + id="line2296" + y2="686" + x2="392" + y1="481" + x1="56" + style="stroke:#7e5b60;stroke-width:2" /> + <line + id="line2298" + y2="627" + x2="289" + y1="481" + x1="56" + style="stroke:#7c5960;stroke-width:2" /> + <line + id="line2300" + y2="900" + x2="714" + y1="481" + x1="56" + style="stroke:#7b5761;stroke-width:2" /> + <line + id="line2302" + y2="785" + x2="529" + y1="481" + x1="56" + style="stroke:#795561;stroke-width:2" /> + <line + id="line2304" + y2="876" + x2="606" + y1="481" + x1="56" + style="stroke:#775361;stroke-width:2" /> + <line + id="line2306" + y2="834" + x2="522" + y1="481" + x1="56" + style="stroke:#765162;stroke-width:2" /> + <line + id="line2308" + y2="675" + x2="302" + y1="481" + x1="56" + style="stroke:#745062;stroke-width:2" /> + <line + id="line2310" + y2="849" + x2="506" + y1="481" + x1="56" + style="stroke:#724e62;stroke-width:2" /> + <line + id="line2312" + y2="775" + x2="411" + y1="481" + x1="56" + style="stroke:#714c62;stroke-width:2" /> + <line + id="line2314" + y2="871" + x2="479" + y1="481" + x1="56" + style="stroke:#6f4a63;stroke-width:2" /> + <line + id="line2316" + y2="962" + x2="545" + y1="481" + x1="56" + style="stroke:#6d4863;stroke-width:2" /> + <line + id="line2318" + y2="629" + x2="204" + y1="481" + x1="56" + style="stroke:#6c4763;stroke-width:2" /> + <line + id="line2320" + y2="707" + x2="259" + y1="481" + x1="56" + style="stroke:#6a4563;stroke-width:2" /> + <line + id="line2322" + y2="847" + x2="364" + y1="481" + x1="56" + style="stroke:#684364;stroke-width:2" /> + <line + id="line2324" + y2="763" + x2="285" + y1="481" + x1="56" + style="stroke:#674164;stroke-width:2" /> + <line + id="line2326" + y2="893" + x2="382" + y1="481" + x1="56" + style="stroke:#653f64;stroke-width:2" /> + <line + id="line2328" + y2="907" + x2="346" + y1="481" + x1="56" + style="stroke:#633e64;stroke-width:2" /> + <line + id="line2330" + y2="740" + x2="177" + y1="481" + x1="56" + style="stroke:#623c65;stroke-width:2" /> + <line + id="line2332" + y2="792" + x2="194" + y1="481" + x1="56" + style="stroke:#603a65;stroke-width:2" /> + <line + id="line2334" + y2="745" + x2="149" + y1="481" + x1="56" + style="stroke:#5e3865;stroke-width:2" /> + <line + id="line2336" + y2="748" + x2="145" + y1="481" + x1="56" + style="stroke:#5c3665;stroke-width:2" /> + <line + id="line2338" + y2="528" + x2="64" + y1="481" + x1="56" + style="stroke:#5b3566;stroke-width:2" /> + </g> + </g> + <g + inkscape:groupmode="layer" + id="layer6" + inkscape:label="partial_hull" + style="display:inline"> + <circle + cx="56" + cy="481" + r="12" + style="display:inline;fill:none;stroke:#000000;stroke-width:2" + id="circle1838-3" /> + <circle + cx="75" + cy="409" + r="12" + style="display:inline;fill:none;stroke:#000000;stroke-width:2" + id="circle1838-6" /> + <circle + cx="204" + cy="180" + r="12" + style="display:inline;fill:none;stroke:#000000;stroke-width:2" + id="circle1838-5" /> + <circle + cx="256" + cy="213" + r="12" + style="display:inline;fill:none;stroke:#000000;stroke-width:2" + id="circle1838-35" /> + <circle + cx="249" + cy="300" + r="12" + style="display:inline;fill:none;stroke:#000000;stroke-width:2" + id="circle1838-62" /> + <path + style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:16, 16;stroke-dashoffset:0;stroke-opacity:1" + d="M 56,481 614.69257,8.9981087" + id="path2140" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cc" /> + <path + style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + d="M 249,300 256,213 204,180 75,409 56,481" + id="path2142" + inkscape:connector-curvature="0" /> + </g> + <g + inkscape:groupmode="layer" + id="layer7" + inkscape:label="adding_point_1" + style="display:inline"> + <path + inkscape:connector-curvature="0" + id="path2434" + d="M 249,300 256,213 204,180 75,409 56,481" + style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + <circle + id="circle2437" + style="display:inline;fill:none;stroke:#000000;stroke-width:2" + r="12" + cy="481" + cx="56" /> + <circle + id="circle2439" + style="display:inline;fill:none;stroke:#000000;stroke-width:2" + r="12" + cy="409" + cx="75" /> + <circle + id="circle2441" + style="display:inline;fill:none;stroke:#000000;stroke-width:2" + r="12" + cy="180" + cx="204" /> + <circle + id="circle2443" + style="display:inline;fill:none;stroke:#000000;stroke-width:2" + r="12" + cy="213" + cx="256" /> + <circle + id="circle2445" + style="display:inline;fill:none;stroke:#000000;stroke-width:2" + r="12" + cy="300" + cx="249" /> + <circle + cx="412" + cy="193" + r="12" + style="display:inline;fill:#f57900;stroke:#f57900;stroke-width:2" + id="circle1838-62-9" /> + <path + style="display:inline;opacity:1;fill:#f57900;fill-opacity:1;stroke:#f57900;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + d="M 249,300 412,193" + id="path2160" + inkscape:connector-curvature="0" /> + <path + style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:#f57900;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#Arrow2Send)" + d="m 286.70433,227.21216 c 0,6.93447 5.56889,12.58358 12.50265,12.68274 6.93376,0.0992 12.66193,-5.38837 12.86024,-12.32 0.19831,-6.93163 -4.18172,-9.66261 -12.13483,-13.0351" + id="path2162" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cssc" /> + </g> + <g + inkscape:groupmode="layer" + id="layer8" + inkscape:label="adding_point_2" /> + <g + inkscape:groupmode="layer" + id="layer3" + inkscape:label="hull" + style="display:none"> + <circle + cx="56" + cy="481" + r="12" + style="fill:none;stroke:#000000;stroke-width:2" + id="circle1830" /> + <line + style="stroke:#000000;stroke-width:2" + x1="56" + y1="481" + x2="75" + y2="409" + id="line1832" /> + <circle + cx="75" + cy="409" + r="12" + style="fill:none;stroke:#000000;stroke-width:2" + id="circle1834" /> + <line + style="stroke:#000000;stroke-width:2" + x1="75" + y1="409" + x2="204" + y2="180" + id="line1836" /> + <circle + cx="204" + cy="180" + r="12" + style="fill:none;stroke:#000000;stroke-width:2" + id="circle1838" /> + <line + style="stroke:#000000;stroke-width:2" + x1="204" + y1="180" + x2="628" + y2="80" + id="line1840" /> + <circle + cx="628" + cy="80" + r="12" + style="fill:none;stroke:#000000;stroke-width:2" + id="circle1842" /> + <line + style="stroke:#000000;stroke-width:2" + x1="628" + y1="80" + x2="685" + y2="100" + id="line1844" /> + <circle + cx="685" + cy="100" + r="12" + style="fill:none;stroke:#000000;stroke-width:2" + id="circle1846" /> + <line + style="stroke:#000000;stroke-width:2" + x1="685" + y1="100" + x2="771" + y2="199" + id="line1848" /> + <circle + cx="771" + cy="199" + r="12" + style="fill:none;stroke:#000000;stroke-width:2" + id="circle1850" /> + <line + style="stroke:#000000;stroke-width:2" + x1="771" + y1="199" + x2="953" + y2="438" + id="line1852" /> + <circle + cx="953" + cy="438" + r="12" + style="fill:none;stroke:#000000;stroke-width:2" + id="circle1854" /> + <line + style="stroke:#000000;stroke-width:2" + x1="953" + y1="438" + x2="857" + y2="778" + id="line1856" /> + <circle + cx="857" + cy="778" + r="12" + style="fill:none;stroke:#000000;stroke-width:2" + id="circle1858" /> + <line + style="stroke:#000000;stroke-width:2" + x1="857" + y1="778" + x2="809" + y2="858" + id="line1860" /> + <circle + cx="809" + cy="858" + r="12" + style="fill:none;stroke:#000000;stroke-width:2" + id="circle1862" /> + <line + style="stroke:#000000;stroke-width:2" + x1="809" + y1="858" + x2="714" + y2="900" + id="line1864" /> + <circle + cx="714" + cy="900" + r="12" + style="fill:none;stroke:#000000;stroke-width:2" + id="circle1866" /> + <line + style="stroke:#000000;stroke-width:2" + x1="714" + y1="900" + x2="545" + y2="962" + id="line1868" /> + <circle + cx="545" + cy="962" + r="12" + style="fill:none;stroke:#000000;stroke-width:2" + id="circle1870" /> + <line + style="stroke:#000000;stroke-width:2" + x1="545" + y1="962" + x2="346" + y2="907" + id="line1872" /> + <circle + cx="346" + cy="907" + r="12" + style="fill:none;stroke:#000000;stroke-width:2" + id="circle1874" /> + <line + style="stroke:#000000;stroke-width:2" + x1="346" + y1="907" + x2="194" + y2="792" + id="line1876" /> + <circle + cx="194" + cy="792" + r="12" + style="fill:none;stroke:#000000;stroke-width:2" + id="circle1878" /> + <line + style="stroke:#000000;stroke-width:2" + x1="194" + y1="792" + x2="145" + y2="748" + id="line1880" /> + <circle + cx="145" + cy="748" + r="12" + style="fill:none;stroke:#000000;stroke-width:2" + id="circle1882" /> + <line + style="stroke:#000000;stroke-width:2" + x1="145" + y1="748" + x2="64" + y2="528" + id="line1884" /> + <circle + cx="64" + cy="528" + r="12" + style="fill:none;stroke:#000000;stroke-width:2" + id="circle1886" /> + <line + style="stroke:#000000;stroke-width:2" + x1="64" + y1="528" + x2="56" + y2="481" + id="line1888" /> + </g> + <g + inkscape:groupmode="layer" + id="layer5" + inkscape:label="points" + style="display:inline"> + <circle + style="fill:#000000" + cx="56" + cy="481" + r="8" + id="circle1630" /> + <circle + style="fill:#000000" + cx="75" + cy="409" + r="8" + id="circle1632" /> + <circle + style="fill:#000000" + cx="149" + cy="286" + r="8" + id="circle1634" /> + <circle + style="fill:#000000" + cx="204" + cy="180" + r="8" + id="circle1636" /> + <circle + style="fill:#000000" + cx="190" + cy="225" + r="8" + id="circle1638" /> + <circle + style="fill:#000000" + cx="196" + cy="238" + r="8" + id="circle1640" /> + <circle + style="fill:#000000" + cx="153" + cy="329" + r="8" + id="circle1642" /> + <circle + style="fill:#000000" + cx="256" + cy="213" + r="8" + id="circle1644" /> + <circle + style="fill:#000000" + cx="234" + cy="244" + r="8" + id="circle1646" /> + <circle + style="fill:#000000" + cx="133" + cy="391" + r="8" + id="circle1648" /> + <circle + style="fill:#000000" + cx="158" + cy="367" + r="8" + id="circle1650" /> + <circle + style="fill:#000000" + cx="249" + cy="300" + r="8" + id="circle1652" /> + <circle + style="fill:#000000" + cx="412" + cy="193" + r="8" + id="circle1654" /> + <circle + style="fill:#000000" + cx="531" + cy="132" + r="8" + id="circle1656" /> + <circle + style="fill:#000000" + cx="628" + cy="80" + r="8" + id="circle1658" /> + <circle + style="fill:#000000" + cx="434" + cy="221" + r="8" + id="circle1660" /> + <circle + style="fill:#000000" + cx="623" + cy="135" + r="8" + id="circle1662" /> + <circle + style="fill:#000000" + cx="685" + cy="100" + r="8" + id="circle1664" /> + <circle + style="fill:#000000" + cx="462" + cy="242" + r="8" + id="circle1666" /> + <circle + style="fill:#000000" + cx="607" + cy="190" + r="8" + id="circle1668" /> + <circle + style="fill:#000000" + cx="274" + cy="366" + r="8" + id="circle1670" /> + <circle + style="fill:#000000" + cx="619" + cy="212" + r="8" + id="circle1672" /> + <circle + style="fill:#000000" + cx="539" + cy="257" + r="8" + id="circle1674" /> + <circle + style="fill:#000000" + cx="590" + cy="259" + r="8" + id="circle1676" /> + <circle + style="fill:#000000" + cx="764" + cy="196" + r="8" + id="circle1678" /> + <circle + style="fill:#000000" + cx="771" + cy="199" + r="8" + id="circle1680" /> + <circle + style="fill:#000000" + cx="741" + cy="211" + r="8" + id="circle1682" /> + <circle + style="fill:#000000" + cx="667" + cy="262" + r="8" + id="circle1684" /> + <circle + style="fill:#000000" + cx="313" + cy="395" + r="8" + id="circle1686" /> + <circle + style="fill:#000000" + cx="766" + cy="255" + r="8" + id="circle1688" /> + <circle + style="fill:#000000" + cx="501" + cy="349" + r="8" + id="circle1690" /> + <circle + style="fill:#000000" + cx="421" + cy="382" + r="8" + id="circle1692" /> + <circle + style="fill:#000000" + cx="669" + cy="315" + r="8" + id="circle1694" /> + <circle + style="fill:#000000" + cx="684" + cy="329" + r="8" + id="circle1696" /> + <circle + style="fill:#000000" + cx="727" + cy="322" + r="8" + id="circle1698" /> + <circle + style="fill:#000000" + cx="798" + cy="317" + r="8" + id="circle1700" /> + <circle + style="fill:#000000" + cx="465" + cy="398" + r="8" + id="circle1702" /> + <circle + style="fill:#000000" + cx="144" + cy="466" + r="8" + id="circle1704" /> + <circle + style="fill:#000000" + cx="602" + cy="397" + r="8" + id="circle1706" /> + <circle + style="fill:#000000" + cx="523" + cy="412" + r="8" + id="circle1708" /> + <circle + style="fill:#000000" + cx="834" + cy="383" + r="8" + id="circle1710" /> + <circle + style="fill:#000000" + cx="870" + cy="406" + r="8" + id="circle1712" /> + <circle + style="fill:#000000" + cx="729" + cy="443" + r="8" + id="circle1714" /> + <circle + style="fill:#000000" + cx="953" + cy="438" + r="8" + id="circle1716" /> + <circle + style="fill:#000000" + cx="683" + cy="455" + r="8" + id="circle1718" /> + <circle + style="fill:#000000" + cx="558" + cy="470" + r="8" + id="circle1720" /> + <circle + style="fill:#000000" + cx="936" + cy="467" + r="8" + id="circle1722" /> + <circle + style="fill:#000000" + cx="434" + cy="479" + r="8" + id="circle1724" /> + <circle + style="fill:#000000" + cx="711" + cy="481" + r="8" + id="circle1726" /> + <circle + style="fill:#000000" + cx="917" + cy="528" + r="8" + id="circle1728" /> + <circle + style="fill:#000000" + cx="690" + cy="516" + r="8" + id="circle1730" /> + <circle + style="fill:#000000" + cx="893" + cy="544" + r="8" + id="circle1732" /> + <circle + style="fill:#000000" + cx="772" + cy="574" + r="8" + id="circle1734" /> + <circle + style="fill:#000000" + cx="595" + cy="561" + r="8" + id="circle1736" /> + <circle + style="fill:#000000" + cx="814" + cy="615" + r="8" + id="circle1738" /> + <circle + style="fill:#000000" + cx="830" + cy="627" + r="8" + id="circle1740" /> + <circle + style="fill:#000000" + cx="305" + cy="529" + r="8" + id="circle1742" /> + <circle + style="fill:#000000" + cx="624" + cy="599" + r="8" + id="circle1744" /> + <circle + style="fill:#000000" + cx="791" + cy="647" + r="8" + id="circle1746" /> + <circle + style="fill:#000000" + cx="783" + cy="657" + r="8" + id="circle1748" /> + <circle + style="fill:#000000" + cx="575" + cy="608" + r="8" + id="circle1750" /> + <circle + style="fill:#000000" + cx="517" + cy="602" + r="8" + id="circle1752" /> + <circle + style="fill:#000000" + cx="624" + cy="644" + r="8" + id="circle1754" /> + <circle + style="fill:#000000" + cx="790" + cy="714" + r="8" + id="circle1756" /> + <circle + style="fill:#000000" + cx="310" + cy="562" + r="8" + id="circle1758" /> + <circle + style="fill:#000000" + cx="857" + cy="778" + r="8" + id="circle1760" /> + <circle + style="fill:#000000" + cx="752" + cy="744" + r="8" + id="circle1762" /> + <circle + style="fill:#000000" + cx="346" + cy="597" + r="8" + id="circle1764" /> + <circle + style="fill:#000000" + cx="595" + cy="703" + r="8" + id="circle1766" /> + <circle + style="fill:#000000" + cx="814" + cy="800" + r="8" + id="circle1768" /> + <circle + style="fill:#000000" + cx="635" + cy="750" + r="8" + id="circle1770" /> + <circle + style="fill:#000000" + cx="520" + cy="697" + r="8" + id="circle1772" /> + <circle + style="fill:#000000" + cx="800" + cy="844" + r="8" + id="circle1774" /> + <circle + style="fill:#000000" + cx="809" + cy="858" + r="8" + id="circle1776" /> + <circle + style="fill:#000000" + cx="562" + cy="740" + r="8" + id="circle1778" /> + <circle + style="fill:#000000" + cx="482" + cy="734" + r="8" + id="circle1780" /> + <circle + style="fill:#000000" + cx="423" + cy="702" + r="8" + id="circle1782" /> + <circle + style="fill:#000000" + cx="400" + cy="692" + r="8" + id="circle1784" /> + <circle + style="fill:#000000" + cx="392" + cy="686" + r="8" + id="circle1786" /> + <circle + style="fill:#000000" + cx="289" + cy="627" + r="8" + id="circle1788" /> + <circle + style="fill:#000000" + cx="714" + cy="900" + r="8" + id="circle1790" /> + <circle + style="fill:#000000" + cx="529" + cy="785" + r="8" + id="circle1792" /> + <circle + style="fill:#000000" + cx="606" + cy="876" + r="8" + id="circle1794" /> + <circle + style="fill:#000000" + cx="522" + cy="834" + r="8" + id="circle1796" /> + <circle + style="fill:#000000" + cx="302" + cy="675" + r="8" + id="circle1798" /> + <circle + style="fill:#000000" + cx="506" + cy="849" + r="8" + id="circle1800" /> + <circle + style="fill:#000000" + cx="411" + cy="775" + r="8" + id="circle1802" /> + <circle + style="fill:#000000" + cx="479" + cy="871" + r="8" + id="circle1804" /> + <circle + style="fill:#000000" + cx="545" + cy="962" + r="8" + id="circle1806" /> + <circle + style="fill:#000000" + cx="204" + cy="629" + r="8" + id="circle1808" /> + <circle + style="fill:#000000" + cx="259" + cy="707" + r="8" + id="circle1810" /> + <circle + style="fill:#000000" + cx="364" + cy="847" + r="8" + id="circle1812" /> + <circle + style="fill:#000000" + cx="285" + cy="763" + r="8" + id="circle1814" /> + <circle + style="fill:#000000" + cx="382" + cy="893" + r="8" + id="circle1816" /> + <circle + style="fill:#000000" + cx="346" + cy="907" + r="8" + id="circle1818" /> + <circle + style="fill:#000000" + cx="177" + cy="740" + r="8" + id="circle1820" /> + <circle + style="fill:#000000" + cx="194" + cy="792" + r="8" + id="circle1822" /> + <circle + style="fill:#000000" + cx="149" + cy="745" + r="8" + id="circle1824" /> + <circle + style="fill:#000000" + cx="145" + cy="748" + r="8" + id="circle1826" /> + <circle + style="fill:#000000" + cx="64" + cy="528" + r="8" + id="circle1828" /> + </g> +</svg> diff --git a/Presentation/Figures/hull_aligned.pdf b/Presentation/Figures/hull_aligned.pdf new file mode 100644 index 0000000000000000000000000000000000000000..01056c98356355dd5ecbad756eb9f383f1703f53 Binary files /dev/null and b/Presentation/Figures/hull_aligned.pdf differ diff --git a/Presentation/Figures/hull_aligned.svg b/Presentation/Figures/hull_aligned.svg new file mode 100644 index 0000000000000000000000000000000000000000..c0a54c2e0a07a3aec51b9dbf8ea41ec0c8447d0b --- /dev/null +++ b/Presentation/Figures/hull_aligned.svg @@ -0,0 +1,17 @@ +<svg height="1024" width="1024"> +<circle cx="51" cy="512" r="8" fill="rgb(0, 0, 0)" /> +<circle cx="51" cy="51" r="8" fill="rgb(0, 0, 0)" /> +<circle cx="51" cy="973" r="8" fill="rgb(0, 0, 0)" /> +<circle cx="51" cy="235" r="8" fill="rgb(0, 0, 0)" /> +<circle cx="973" cy="512" r="8" fill="rgb(0, 0, 0)" /> +<circle cx="51" cy="512" r="12" stroke="rgb(0, 0, 0)" stroke-width="2" style="fill:none"/> +<line x1="51" y1="512" x2="51" y2="51" stroke="rgb(0, 0, 0)" stroke-width="2"/> +<circle cx="51" cy="51" r="12" stroke="rgb(0, 0, 0)" stroke-width="2" style="fill:none"/> +<line x1="51" y1="51" x2="51" y2="973" stroke="rgb(0, 0, 0)" stroke-width="2"/> +<circle cx="51" cy="973" r="12" stroke="rgb(0, 0, 0)" stroke-width="2" style="fill:none"/> +<line x1="51" y1="973" x2="51" y2="235" stroke="rgb(0, 0, 0)" stroke-width="2"/> +<circle cx="51" cy="235" r="12" stroke="rgb(0, 0, 0)" stroke-width="2" style="fill:none"/> +<line x1="51" y1="235" x2="973" y2="512" stroke="rgb(0, 0, 0)" stroke-width="2"/> +<circle cx="973" cy="512" r="12" stroke="rgb(0, 0, 0)" stroke-width="2" style="fill:none"/> +<line x1="973" y1="512" x2="51" y2="512" stroke="rgb(0, 0, 0)" stroke-width="2"/> +</svg> diff --git a/Presentation/Figures/hull_sort.pdf b/Presentation/Figures/hull_sort.pdf new file mode 100644 index 0000000000000000000000000000000000000000..3790fd9a497435cbf453740384bc81c9774665d2 Binary files /dev/null and b/Presentation/Figures/hull_sort.pdf differ diff --git a/Presentation/Figures/increment_hull_1.pdf b/Presentation/Figures/increment_hull_1.pdf new file mode 100644 index 0000000000000000000000000000000000000000..542821b19c75bcf689b94aaa01d6d89daee95a56 Binary files /dev/null and b/Presentation/Figures/increment_hull_1.pdf differ diff --git a/Presentation/Figures/increment_hull_2.pdf b/Presentation/Figures/increment_hull_2.pdf new file mode 100644 index 0000000000000000000000000000000000000000..81c9cd8ae904bd96feba2eed624ff89183be81ef Binary files /dev/null and b/Presentation/Figures/increment_hull_2.pdf differ diff --git a/Presentation/Figures/increment_hull_3.pdf b/Presentation/Figures/increment_hull_3.pdf new file mode 100644 index 0000000000000000000000000000000000000000..52bbbd42052d101ff4aefec0b6ba27b3022c8037 Binary files /dev/null and b/Presentation/Figures/increment_hull_3.pdf differ diff --git a/Presentation/Figures/partial_hull.pdf b/Presentation/Figures/partial_hull.pdf new file mode 100644 index 0000000000000000000000000000000000000000..0196d8ec1e3ceef7e4ed95603f3ffc0a9ee33af2 Binary files /dev/null and b/Presentation/Figures/partial_hull.pdf differ diff --git a/Presentation/beamer_preamble.tex b/Presentation/beamer_preamble.tex new file mode 100644 index 0000000000000000000000000000000000000000..b87fe3d72b7a1390af2149f6b3ba10d2f38304b2 --- /dev/null +++ b/Presentation/beamer_preamble.tex @@ -0,0 +1,183 @@ +\documentclass[french,pdftex]{beamer} +\usepackage[french]{babel} +\usepackage[utf8]{inputenc} +\usepackage[T1]{fontenc} +\usepackage[rm={oldstyle=false}, sf={oldstyle=false}, tt={oldstyle=false}]{cfr-lm} +\usetheme[compress]{Nivoliev} +\usepackage{tabularx} +\usepackage{hyperref} +\usepackage{graphicx} +\usepackage{tikz} +\usepackage{amsmath, amssymb, amsfonts} +\usepackage{mathrsfs} +\usepackage{amsthm} +\usepackage{verbatim} +\usepackage{color} +\usepackage{colortbl} +\usepackage{multimedia} +\usepackage{listings} +\usepackage{multimedia} +\usepackage{xparse} +\usepackage{comment} +\usepackage{animate} + +\setbeamersize{text margin left=0.5cm} +\setbeamersize{text margin right=0.5cm} +\definecolor{thcolor}{rgb}{0.8,0.3,0} +\setbeamercolor{structure}{fg=thcolor} +\setbeamertemplate{navigation symbols}{} +\setbeamertemplate{enumerate items}[default] +\setbeamercovered{transparent} + +\lstset{breakatwhitespace, +basicstyle=\tiny\ttfamily, +columns=fullflexible, +keepspaces, +breaklines, +tabsize=3, +showstringspaces=false, +extendedchars=true} + +\setcounter{tocdepth}{1} + +\newcommand{\hl}[1]{\textcolor{structure}{#1}} +\newcommand{\lighten}{\xglobal\blendcolors*{!20!white}\color{black}} +\newcommand{\unlighten}{\xglobal\blendcolors{}\color{black}} + +\newcommand{\li}{\linewidth} + +%{fold} minipages + +\newcommand{\minip}[2]{ + \begin{minipage}[c]{#1\linewidth} + #2 + \end{minipage} +} + +\newcommand{\cminip}[2]{ + \begin{minipage}[c]{#1\linewidth} + \begin{center} + #2 + \end{center} + \end{minipage} +} + +%{endfold} + +%{fold} blocks + +%\newsavebox{\blockbox} +%\NewDocumentEnvironment{myblock}{O{} O{} m}% +%{% +% \sbox{\blockbox}\bgroup% +%} +%{% +% \egroup +% \begin{tikzpicture}% +% \draw% +% node[ drop shadow,% +% rounded corners,% +% draw, fill=white,% +% inner sep = 3mm,% +% #2% +% ] (#1) { +% \usebox{\blockbox} +% } ; +% \end{tikzpicture}% +%} + +\NewDocumentEnvironment{myblock}{O{} O{} m}% +{% + \begin{tikzpicture}% + \draw% + node[ drop shadow,% + rounded corners,% + draw, fill=white,% + inner sep = 3mm,% + #2% + ] (#1) \bgroup% + \begin{minipage}[c]{#3}% +} +{% + \end{minipage}% + \egroup + ; + \end{tikzpicture}% +} + +\NewDocumentEnvironment{myoverlayblock}{O{} O{} m m}% +{% + \begin{tikzpicture}[overlay]% + \draw #4% + node[ drop shadow,% + rounded corners,% + draw, fill=white,% + inner sep = 3mm,% + #2% + ]% + (#1) + \bgroup% + \begin{minipage}[c]{#3}% +} +{% + \end{minipage}% + \egroup ;% + \end{tikzpicture}% +} + +%{endfold} + +%{fold} Tikz +\everymath{\displaystyle} +\tikzstyle{every picture}+=[remember picture] +\usetikzlibrary{calc,fit,decorations.pathreplacing,decorations.pathmorphing,shadows} + +\tikzstyle{rounded boxed}=[thick, draw=black, fill=white, rounded corners] + +%blocks and arrows between them +\newcommand{\pin}[2]{ + \tikz[baseline]{ + \node[anchor=base,inner sep=0pt, outer sep=0pt, minimum height=1em] (#1) {#2}; + } +} +\newcommand{\back}[3]{ + \tikz[baseline]{ + \node[rectangle,rounded corners,anchor=base,fill=#2!10] (#1) {#3}; + } +} +\newcommand{\backcol}[3]{ + \tikz[baseline]{ + \node[very thin,rectangle,rounded corners,anchor=base,fill=#2] (#1) {#3}; + } +} +\newcommand{\arrow}[3]{ + \tikz[overlay]{ + \path[->] (#2) edge [#1] (#3); + } +} + +\newcommand{\tikzmark}[1]{ + \tikz[overlay,baseline=0pt]{ + \node [anchor=base, inner sep = 0pt, outer sep = 0pt] (#1) {}; + } +} +%{endfold} + +%{fold} listings + +\newcommand{\CodeSymbol}[1]{\textcolor{red}{#1}} + +\lstset{ + showspaces=false, + showstringspaces=false, + basicstyle=\footnotesize, + numbersep=0pt, + keywordstyle=\color{structure!90!black}, + belowskip=-0.8\baselineskip, + aboveskip=0pt, + escapechar=§ +} + +%{endfold} + +%\renewcommand\textbullet{\ensuremath{\bullet}} diff --git a/Presentation/beamerthemeNivoliev.sty b/Presentation/beamerthemeNivoliev.sty new file mode 100644 index 0000000000000000000000000000000000000000..b52417f423ab654c661e0ccf5c32859b46bd6075 --- /dev/null +++ b/Presentation/beamerthemeNivoliev.sty @@ -0,0 +1,65 @@ +% Copyright 2007 by Vincent Nivoliers +% +% This file may be distributed and/or modified +% +% 1. under the LaTeX Project Public License and/or +% 2. under the GNU Public License. +% +% See the file doc/licenses/LICENSE for more details. + +\DeclareOptionBeamer{compress}{\beamer@compresstrue} +\ProcessOptionsBeamer + + +\mode<presentation> + +\setbeamercolor{section in head/foot}{use=structure,bg=structure.fg!25!bg} + +\useoutertheme[subsection=false]{miniframes} + +\useinnertheme[shadow=true]{rounded} + +\setbeamertemplate{frametitle}[default][center] + +\AtBeginDocument{% + { + \usebeamercolor{section in head/foot} + } + + \pgfdeclareverticalshading{beamer@headfade}{\paperwidth} + {% + color(0cm)=(bg); + color(1cm)=(section in head/foot.bg)% + } + + \pgfdeclareverticalshading{beamer@footfade}{\paperwidth} + {% + color(0cm)=(section in head/foot.bg); + color(2.5ex)=(bg)% + } + + \setbeamercolor{section in head/foot}{bg=} +} + +\addtoheadtemplate{\pgfuseshading{beamer@headfade}\vskip-1cm}{} + +\defbeamertemplate*{footline}{mytheme theme} +{ + \leavevmode% + \pgfuseshading{beamer@footfade}% + \vskip-3.5ex + \begin{beamercolorbox}[wd=\textwidth,ht=2.25ex,dp=1.25ex]{section in head/foot}% + \hspace{1em} + \insertshorttitle + \hfill + \insertauthor + \hfill + \insertframenumber{} $/$ \inserttotalframenumber + \hspace{1em} + \end{beamercolorbox} + \vskip0pt% +} + +\beamertemplatedotitem + +\mode<all> diff --git a/Presentation/presentation.tex b/Presentation/presentation.tex new file mode 100644 index 0000000000000000000000000000000000000000..d70438fd7851f8cb0f6fa224068996a0c819ef45 --- /dev/null +++ b/Presentation/presentation.tex @@ -0,0 +1,83 @@ +\input{beamer_preamble} + +\usepackage{ucblalgo} +\setbeamercovered{invisible} + +\newcommand{\vor}[1]{\ensuremath{\mathrm{Vor}(#1)}} +\newcommand{\site}{\mathbf{v}} +\newcommand{\sites}{\mathbf{V}} +\newcommand{\point}{\mathbf{p}} +\newcommand{\R}{\mathbb{R}} + +\title{Robustesse des algorithmes géométriques : \\ prédicats, filtrage et perturbation} + +\author{Vincent Nivoliers} + +\begin{document} + +\frame{ + \maketitle +} + + +\section{Enveloppe Convexe} + +\frame { + \frametitle{Enveloppe convexe} + \centering + \includegraphics[width=0.6\li]{Figures/hull.pdf} +} + +\frame { + \frametitle{1 -- trier par angle} + \centering + \includegraphics[width=0.6\li]{Figures/hull_sort.pdf} +} + +\frame { + \frametitle{2 -- balayage} + \centering + \only<1>{\includegraphics[width=0.6\li]{Figures/partial_hull.pdf}}% + \only<2>{\includegraphics[width=0.6\li]{Figures/increment_hull_1.pdf}}% + \only<3>{\includegraphics[width=0.6\li]{Figures/increment_hull_2.pdf}}% + \only<4>{\includegraphics[width=0.6\li]{Figures/increment_hull_3.pdf}}% + \only<5>{\includegraphics[width=0.6\li]{Figures/hull.pdf}}% +} + +\frame { + \frametitle{Robustesse : alignements de points} + \centering + \includegraphics[width=0.6\li]{Figures/hull_aligned.pdf} +} + +\frame { + \frametitle{Algorithme} + \centering + \begin{ucblalgo} + \SetKwData{pt}{p} + \SetKwData{hull}{enveloppe} + \Algorithme{ + déterminer le point le plus à gauche \; + \only<1>{trier les points par angle \;}% + \only<2>{\hl{trier les points par angle} \;} + $\hull \leftarrow$ une nouvelle pile\; + ajouter les deux premiers points à \hull \; + \PourCh{autre point \pt dans l'ordre}{ + $\pt_0 \leftarrow $ dernier point de l'\hull \; + $\pt_1 \leftarrow $ avant dernier point de l'\hull \; + \Tq{ + \only<1>{$(\pt_0\pt)$ tourne à gauche par rapport à $(\pt_1\pt)$}% + \only<2>{\hl{$(\pt_0\pt)$ tourne à gauche par rapport à $(\pt_1\pt)$}} + }{ + retirer le sommet de l'\hull \; + $\pt_0 \leftarrow $ dernier point de l'\hull \; + $\pt_1 \leftarrow $ avant dernier point de l'\hull \; + } + ajouter \pt à l'\hull \; + } + \Retour{l'\hull} \; + } + \end{ucblalgo} +} + +\end{document} diff --git a/Presentation/ucblalgo.sty b/Presentation/ucblalgo.sty new file mode 100644 index 0000000000000000000000000000000000000000..e7353f6fb2eb62dbf514b08da16c3a62223b9c46 --- /dev/null +++ b/Presentation/ucblalgo.sty @@ -0,0 +1,92 @@ +\ProvidesPackage{ucblalgo} +\RequirePackage[vlined, french, nofillcomment]{algorithm2e} +\RequirePackage{xstring} +\RequirePackage{ifthen} + +%\SetFuncSty{textsf}% +%\SetProcArgSty{textsf}% +%\SetFuncArgSty{textsf}% +%\SetArgSty{textrm}% +\SetCommentSty{}% + +\SetKw{vrai}{vrai} +\SetKw{faux}{faux} +\SetKw{tableau}{tableau} + +\SetKwInput{donres}{données-résultat} +\SetKwInput{donnee}{données} +\SetKwInput{resultat}{résultat} +\SetKwInput{variables}{variables} + +\SetKwFor{FonctionInner}{Fonction}{}{fin} +\SetKwFor{ProcedureInner}{Procédure}{}{fin} + +\newcommand{\algoname}[1]{% + \StrBefore{#1}{(}% +} + +\newcommand{\algoargs}[1]{% + (\StrBehind{#1}{(}% +} + +\newcommand{\Fonction}[2]{ + %\def\ucblalgoname{\algoname{#1}}% + %\def\ucblalgoargs{\algoargs{#1}}% + \SetKwFunction{#1}{#1}% + \FonctionInner{\expandafter\csname#1\endcsname{} \ifthenelse{\equal{#2}{}}{}{$\rightarrow$ #2}} +} +\newcommand{\ArgFonction}[3]{ + \SetKwFunction{#1}{#1}% + \FonctionInner{\expandafter\csname#1\endcsname{#2} \ifthenelse{\equal{#3}{}}{}{$\rightarrow$ #3}} +} +\newcommand{\Procedure}[1]{ + \SetKwFunction{#1}{#1}% + \ProcedureInner{\expandafter\csname#1\endcsname} +} + +\newlength{\forewordlen} +\newlength{\forewordantilen} + +\newenvironment{foreword}[1]{% + \settowidth{\forewordlen}{#1 : }% + \setlength{\forewordantilen}{\linewidth}% + \addtolength{\forewordantilen}{-\forewordlen}% + \begin{minipage}[t]{\forewordlen}% + #1 : % + \end{minipage}% + \begin{minipage}[t]{\forewordantilen}% +}{% + \end{minipage}% +} + +\newcommand{\precond}[1]{% + \begin{foreword}{précondition}% + \itshape{% + #1% + }% + \end{foreword}% +} + +\newcommand{\postcond}[1]{% + \begin{foreword}{postcondition}% + \itshape{% + #1% + }% + \end{foreword}% +} + +\newcommand{\incr}[1]{#1${+}{+}$} +\newcommand{\decr}[1]{#1${-}{-}$} + +\newenvironment{ucblalgo}[1][H]{% + \renewcommand{\algorithmcfname}{Algorithme}% + \IncMargin{0em}% + \DontPrintSemicolon% + \begin{algorithm}[#1]% + \SetKwBlock{Algorithme}{Algorithme}{Fin}% +}{% + \end{algorithm}% + \DecMargin{0em}% +} + +\endinput