X-Git-Url: http://git.scottworley.com/nt3d/blobdiff_plain/2d38f7243be5d76cca2812428cc90d0009e672cb..7731ed7a4c4845e60f937dd1f082b1ce24939607:/nt3d.js diff --git a/nt3d.js b/nt3d.js index 9c4aeb1..62d898e 100644 --- a/nt3d.js +++ b/nt3d.js @@ -83,6 +83,14 @@ nt3d = { return nt3d.sub(path[i+1], path[i-1]); }; }, + pathnormals_from_point: function(path, p) { + // Use this with any point that is not on any path tangent line + var pathnormals = []; + for (var i = 0; i < path.length; i++) { + pathnormals.push(this.sub(path[i], p)); + } + return pathnormals; + }, 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. @@ -98,19 +106,19 @@ nt3d = { }, extrude: function(path, shape, shapenormals, pathnormals) { - var guts_result = nt3d._extrude_guts(path, shape, shapenormals, pathnormals); + var guts_result = this._extrude_guts(path, shape, shapenormals, pathnormals); // Add the end-caps // XXX: This doesn't work if shape is not convex return guts_result.points.concat( - nt3d.trianglefan(guts_result.first_loop.reverse()), - nt3d.trianglefan(guts_result.last_loop)); + this.trianglefan(guts_result.first_loop.reverse()), + this.trianglefan(guts_result.last_loop)); }, closed_extrude: function(path, shape, shapenormals, pathnormals) { - var guts_result = nt3d._extrude_guts(path, shape, shapenormals, pathnormals); + var guts_result = this._extrude_guts(path, shape, shapenormals, pathnormals); // Stitch the ends together return guts_result.points.concat( - nt3d.closed_quadstrip(nt3d.zip(guts_result.first_loop, guts_result.last_loop))); + this.closed_quadstrip(this.zip(guts_result.first_loop, guts_result.last_loop))); }, _extrude_guts: function(path, shape, shapenormals, pathnormals) { var shape_fun = this.to_function(shape, false); @@ -164,7 +172,7 @@ nt3d = { if (i == 0) { result.first_loop = loop; } else { - result.points = result.points.concat(nt3d.closed_quadstrip(nt3d.zip(loop, prev_loop))); + result.points = result.points.concat(this.closed_quadstrip(this.zip(loop, prev_loop))); } prev_loop = loop; } @@ -211,7 +219,7 @@ nt3d = { }, project: function(a, b) { // Project b onto a var a_magnitude = this.magnitude(a); - return this.scale(a, this.dot(a, b) / a_magnitude * a_magnitude); + return this.scale(a, this.dot(a, b) / (a_magnitude * a_magnitude)); }, project_to_orthogonal: function(a, b) { // The nearest thing to b that is orthogonal to a