From: Scott Worley Date: Fri, 21 Dec 2012 15:12:59 +0000 (-0800) Subject: Helper functions for shapenormals X-Git-Url: http://git.scottworley.com/nt3d/commitdiff_plain/2d38f7243be5d76cca2812428cc90d0009e672cb Helper functions for shapenormals --- diff --git a/nt3d.js b/nt3d.js index 9b09b09..9c4aeb1 100644 --- a/nt3d.js +++ b/nt3d.js @@ -62,6 +62,27 @@ nt3d = { return this.closed_trianglefan([apex].concat(base)).concat( this.trianglefan(base.reverse())); }, + shapenormals_from_closed_path: function(path) { + return function(i) { + var prev = (i == 0) ? path.length-1 : i-1; + var next = (i == path.length-1) ? 0 : i+1; + return nt3d.sub(path[next], path[prev]); + }; + }, + shapenormals_from_path_and_extra_points: function(path, first_point, last_point) { + return function(i) { + var prev = (i == 0) ? first_point : path[i-1]; + var next = (i == path.length-1) ? last_point : path[i+1]; + return nt3d.sub(next, prev); + }; + }, + shapenormals_from_path_and_first_and_last_normals: function(path, first_normal, last_normal) { + return function(i) { + if (i == 0) { return first_normal; } + if (i == path.length-1) { return last_normal; } + return nt3d.sub(path[i+1], path[i-1]); + }; + }, to_function: function(thing, make_indexer) { // If thing is a point, just yield thing every time. // If thing is a list of points && make_indexer, index into thing. diff --git a/torus_by_extrude.html b/torus_by_extrude.html index c95f821..4655519 100644 --- a/torus_by_extrude.html +++ b/torus_by_extrude.html @@ -8,7 +8,7 @@ return nt3d.closed_extrude( path, nt3d.circle(cross_section_radius, short_steps), - nt3d.rotate_about_origin(path, [0,0,1], Math.PI/2), + nt3d.shapenormals_from_closed_path(path), [0, 0, 1]); } var params = [["Torus radus", 100],