]> git.scottworley.com Git - nt3d/commitdiff
Helper functions for shapenormals
authorScott Worley <ScottWorley@ScottWorley.com>
Fri, 21 Dec 2012 15:12:59 +0000 (07:12 -0800)
committerScott Worley <ScottWorley@ScottWorley.com>
Fri, 21 Dec 2012 15:12:59 +0000 (07:12 -0800)
nt3d.js
torus_by_extrude.html

diff --git a/nt3d.js b/nt3d.js
index 9b09b09532e233aa5b450130bd36d4bd43be02e2..9c4aeb18693000a43267508722918b30c6cdfe80 100644 (file)
--- a/nt3d.js
+++ b/nt3d.js
@@ -62,6 +62,27 @@ nt3d = {
                return this.closed_trianglefan([apex].concat(base)).concat(
                       this.trianglefan(base.reverse()));
        },
                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.
        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.
index c95f8216532e4ac27bff2c4ed48bbd2cb7aa0772..4655519cecec47c5551f511a4d10db268536f106 100644 (file)
@@ -8,7 +8,7 @@
        return nt3d.closed_extrude(
          path,
          nt3d.circle(cross_section_radius, short_steps),
        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],
          [0, 0, 1]);
       }
       var params = [["Torus radus", 100],