{"id":2677,"date":"2021-05-09T12:01:58","date_gmt":"2021-05-09T16:01:58","guid":{"rendered":"http:\/\/brickisland.net\/DDGSpring2021\/?p=2677"},"modified":"2021-05-09T12:27:12","modified_gmt":"2021-05-09T16:27:12","slug":"assignment-5-coding-geodesic-distance-due-5-14","status":"publish","type":"post","link":"https:\/\/brickisland.net\/DDGSpring2021\/2021\/05\/09\/assignment-5-coding-geodesic-distance-due-5-14\/","title":{"rendered":"Assignment 5 [Coding]: Geodesic Distance (Due 5\/21)"},"content":{"rendered":"<p><center><img loading=\"lazy\" class=\"alignnone size-full wp-image-1948\" src=\"http:\/\/brickisland.net\/DDGSpring2019\/wp-content\/uploads\/2019\/04\/geodesic_distance-icon.jpg\" alt=\"\" width=\"300\" height=\"300\" \/><\/center>&nbsp;<\/p>\n<p><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. See <a href=\"https:\/\/piazza.com\/class\/kko8c9geq3y64k?cid=114\">this Piazza post<\/a> for more details.) Also, you <em>cannot<\/em> use late days on this assignment since it&#8217;s the last one.<\/p>\n<p>For the coding portion of your final 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=\"http:\/\/brickisland.net\/DDGFall2017\/wp-content\/uploads\/2017\/12\/HeatMethod.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 of 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 to Gradescope by 5:59pm ET on May 21, 2021.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>&nbsp; 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. See this Piazza post for more details.) Also, you cannot use late days on this assignment since &hellip; <a href=\"https:\/\/brickisland.net\/DDGSpring2021\/2021\/05\/09\/assignment-5-coding-geodesic-distance-due-5-14\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;Assignment 5 [Coding]: Geodesic Distance (Due 5\/21)&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_links_to":"","_links_to_target":""},"categories":[4],"tags":[],"_links":{"self":[{"href":"https:\/\/brickisland.net\/DDGSpring2021\/wp-json\/wp\/v2\/posts\/2677"}],"collection":[{"href":"https:\/\/brickisland.net\/DDGSpring2021\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/brickisland.net\/DDGSpring2021\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/brickisland.net\/DDGSpring2021\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/brickisland.net\/DDGSpring2021\/wp-json\/wp\/v2\/comments?post=2677"}],"version-history":[{"count":4,"href":"https:\/\/brickisland.net\/DDGSpring2021\/wp-json\/wp\/v2\/posts\/2677\/revisions"}],"predecessor-version":[{"id":3322,"href":"https:\/\/brickisland.net\/DDGSpring2021\/wp-json\/wp\/v2\/posts\/2677\/revisions\/3322"}],"wp:attachment":[{"href":"https:\/\/brickisland.net\/DDGSpring2021\/wp-json\/wp\/v2\/media?parent=2677"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/brickisland.net\/DDGSpring2021\/wp-json\/wp\/v2\/categories?post=2677"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/brickisland.net\/DDGSpring2021\/wp-json\/wp\/v2\/tags?post=2677"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}