{"id":2211,"date":"2024-04-18T11:10:50","date_gmt":"2024-04-18T15:10:50","guid":{"rendered":"https:\/\/brickisland.net\/DDGSpring2024\/?p=2211"},"modified":"2024-04-18T11:43:05","modified_gmt":"2024-04-18T15:43:05","slug":"assignment-5-coding-geodesic-distance-due-4-27","status":"publish","type":"post","link":"https:\/\/brickisland.net\/DDGSpring2024\/2024\/04\/18\/assignment-5-coding-geodesic-distance-due-4-27\/","title":{"rendered":"Assignment 5 [Coding]: Geodesic Distance (Due 4\/25)"},"content":{"rendered":"<p><center><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" src=\"http:\/\/brickisland.net\/DDGSpring2019\/wp-content\/uploads\/2019\/04\/geodesic_distance-icon.jpg\" width=\"326\" height=\"326\" \/><\/center><strong>Note:<\/strong> For the final assignment, you can do either this assignment or A6. Overall, you just need to be sure you completed A0 and A1, as well as 3 of the assignments A2\u2013A6 (your choice which ones).<\/p>\n<p>For the coding portion of this assignment, you will implement the <em>heat method<\/em>, which is an algorithm\u00a0for computing geodesic distance on curved surfaces. All of the details you need for implementation are described in Section 3 of <a href=\"https:\/\/www.cs.cmu.edu\/~kmcrane\/Projects\/HeatMethod\/paperCACM.pdf\">the paper<\/a>, up through and including Section 3.2. Note that you need only be concerned with the case of <b>triangle meshes<\/b> (not polygon meshes or point clouds); pay close attention to the paragraph labeled \u201cChoice of Timestep.\u201d<\/p>\n<p>Please implement the following routines in:<\/p>\n<ol>\n<li><tt>projects\/geodesic-distances\/heat-method.[js\/cpp]<\/tt>:\n<ol>\n<li><tt>constructor<\/tt><\/li>\n<li><tt>computeVectorField<\/tt><\/li>\n<li><tt>computeDivergence<\/tt><\/li>\n<li><tt>compute<\/tt><\/li>\n<\/ol>\n<\/li>\n<\/ol>\n<p><strong>Notes<\/strong><\/p>\n<ul>\n<li>Refer to sections 3.2 of the paper for discretizations in Algorithm 1 (page 3).<\/li>\n<li>Recall that our Laplace matrix is <em>positive<\/em> semidefinite, which might differ from the sign convention the authors use.<\/li>\n<li>The tests for <tt>computeVectorField<\/tt> and <tt>computeDivergence<\/tt> depend on the <tt>A<\/tt> and <tt>F<\/tt> matrices you define in your constructor. So if you fail the tests but your functions look correct, check whether you have defined the flow and laplace matrices properly.<\/li>\n<li>Your solution should implement zero Neumann boundary conditions (which are the &#8220;default behavior&#8221; of the cotan Laplacian) but feel free to tryout other Dirichlet and Neumann boundary conditions on your own.<\/li>\n<\/ul>\n<p><strong>Submission Instructions<\/strong><\/p>\n<p>Please submit your source files as usual to Gradescope by <strong>5:59pm ET<\/strong>..<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Note: For the final assignment, you can do either this assignment or A6. Overall, you just need to be sure you completed A0 and A1, as well as 3 of the assignments A2\u2013A6 (your choice which ones). For the coding portion of this assignment, you will implement the heat method, which is an algorithm\u00a0for computing &hellip; <a href=\"https:\/\/brickisland.net\/DDGSpring2024\/2024\/04\/18\/assignment-5-coding-geodesic-distance-due-4-27\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;Assignment 5 [Coding]: Geodesic Distance (Due 4\/25)&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"inline_featured_image":false,"footnotes":"","_links_to":"","_links_to_target":""},"categories":[4],"tags":[],"_links":{"self":[{"href":"https:\/\/brickisland.net\/DDGSpring2024\/wp-json\/wp\/v2\/posts\/2211"}],"collection":[{"href":"https:\/\/brickisland.net\/DDGSpring2024\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/brickisland.net\/DDGSpring2024\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/brickisland.net\/DDGSpring2024\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/brickisland.net\/DDGSpring2024\/wp-json\/wp\/v2\/comments?post=2211"}],"version-history":[{"count":6,"href":"https:\/\/brickisland.net\/DDGSpring2024\/wp-json\/wp\/v2\/posts\/2211\/revisions"}],"predecessor-version":[{"id":2396,"href":"https:\/\/brickisland.net\/DDGSpring2024\/wp-json\/wp\/v2\/posts\/2211\/revisions\/2396"}],"wp:attachment":[{"href":"https:\/\/brickisland.net\/DDGSpring2024\/wp-json\/wp\/v2\/media?parent=2211"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/brickisland.net\/DDGSpring2024\/wp-json\/wp\/v2\/categories?post=2211"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/brickisland.net\/DDGSpring2024\/wp-json\/wp\/v2\/tags?post=2211"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}