{"id":1945,"date":"2019-04-16T15:35:29","date_gmt":"2019-04-16T19:35:29","guid":{"rendered":"http:\/\/brickisland.net\/DDGSpring2019\/?p=1945"},"modified":"2019-04-16T15:35:29","modified_gmt":"2019-04-16T19:35:29","slug":"assignment-5-coding-geodesic-distance-due-5-2","status":"publish","type":"post","link":"https:\/\/brickisland.net\/DDGSpring2019\/2019\/04\/16\/assignment-5-coding-geodesic-distance-due-5-2\/","title":{"rendered":"Assignment 5 [Coding]: Geodesic Distance (Due 5\/2)"},"content":{"rendered":"<p><center><img loading=\"lazy\" decoding=\"async\" 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\" srcset=\"https:\/\/brickisland.net\/DDGSpring2019\/wp-content\/uploads\/2019\/04\/geodesic_distance-icon.jpg 512w, https:\/\/brickisland.net\/DDGSpring2019\/wp-content\/uploads\/2019\/04\/geodesic_distance-icon-150x150.jpg 150w, https:\/\/brickisland.net\/DDGSpring2019\/wp-content\/uploads\/2019\/04\/geodesic_distance-icon-300x300.jpg 300w\" sizes=\"auto, (max-width: 300px) 85vw, 300px\" \/><\/center><\/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=\"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<\/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 rename your <tt>heat-method.js<\/tt>\u00a0file to <tt>heat-method.txt<\/tt>\u00a0and put it in a <strong>single zip file<\/strong> called solution.zip. This file\u00a0<strong>and<\/strong> your solution to the written exercises should be submitted together in a <strong>single email<\/strong> to <a href=\"mailto:Geometry.Collective@gmail.com\">Geometry.Collective@gmail.com<\/a> with the subject line <strong>DDG19A4<\/strong>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>For the coding portion of this assignment, you will implement the heat method, 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 the paper, up through and including Section 3.2. Note that you need only be concerned with the case &hellip; <a href=\"https:\/\/brickisland.net\/DDGSpring2019\/2019\/04\/16\/assignment-5-coding-geodesic-distance-due-5-2\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;Assignment 5 [Coding]: Geodesic Distance (Due 5\/2)&#8221;<\/span><\/a><\/p>\n","protected":false},"author":7,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[],"class_list":["post-1945","post","type-post","status-publish","format-standard","hentry","category-assignments"],"_links":{"self":[{"href":"https:\/\/brickisland.net\/DDGSpring2019\/wp-json\/wp\/v2\/posts\/1945","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/brickisland.net\/DDGSpring2019\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/brickisland.net\/DDGSpring2019\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/brickisland.net\/DDGSpring2019\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/brickisland.net\/DDGSpring2019\/wp-json\/wp\/v2\/comments?post=1945"}],"version-history":[{"count":3,"href":"https:\/\/brickisland.net\/DDGSpring2019\/wp-json\/wp\/v2\/posts\/1945\/revisions"}],"predecessor-version":[{"id":1950,"href":"https:\/\/brickisland.net\/DDGSpring2019\/wp-json\/wp\/v2\/posts\/1945\/revisions\/1950"}],"wp:attachment":[{"href":"https:\/\/brickisland.net\/DDGSpring2019\/wp-json\/wp\/v2\/media?parent=1945"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/brickisland.net\/DDGSpring2019\/wp-json\/wp\/v2\/categories?post=1945"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/brickisland.net\/DDGSpring2019\/wp-json\/wp\/v2\/tags?post=1945"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}