Skip to content

Commit

Permalink
nit test for bezier
Browse files Browse the repository at this point in the history
  • Loading branch information
cschen1205 committed May 30, 2017
1 parent 901a689 commit 4ece7b2
Show file tree
Hide file tree
Showing 3 changed files with 54 additions and 3 deletions.
37 changes: 36 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,42 @@ var curve = new jsspline.BSpline({
for(var i = 0; i < 100; ++i) {
curve.addWayPoint({ x: i, y: Math.sin(Math.PI * i * 0.2), z: 0.0});
}
console.log("nodes: " + curve.nodes.length);
console.log("nodes: " + curve.nodes.length); // 9700 interpolated points

// first node
curve.nodes[0].x;
curve.nodes[0].y;
curve.nodes[0].z;

// second node
curve.nodes[1].x;
curve.nodes[1].y;
curve.nodes[1].z;
// distance from the first node
curve.distances[1]

// third node
curve.nodes[2].x;
curve.nodes[2].y;
curve.nodes[2].z;
// distance from the first node
curve.distances[2]
```

### Bezier

The sample code below create a Bezier curve which create 4900 nodes (i.e., interpolated points) from 100 way points

```javascript
var jsspline = require("js-spline");

var curve = new jsspline.Bezier({
steps: 100 // number of interpolated points between 4 way points
});
for(var i = 0; i < 100; ++i) {
curve.addWayPoint({ x: i, y: Math.sin(Math.PI * i * 0.2), z: 0.0});
}
console.log("nodes: " + curve.nodes.length); // 4900 interpolated points

// first node
curve.nodes[0].x;
Expand Down
4 changes: 2 additions & 2 deletions src/jsspline.js
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,7 @@ var jsspline = jsspline || {};
} else {
k = j - 2;
pt4 = this.way_points[k].scale(2).minus(this.way_points[k-1]);
node = this.interpolate(u, this.way_points[pt], pt4, this.way_points[pt+1], this.way_points[pt+2]);
node = this.interpolate(u, this.way_points[k], pt4, this.way_points[k+1], this.way_points[k+2]);
}
var distance = 0;
if(this.nodes.length > 0){
Expand All @@ -114,7 +114,7 @@ var jsspline = jsspline || {};
}
};

Bezier.interpolate = function(u, pt1, pt2, pt3, pt4){
Bezier.prototype.interpolate = function(u, pt1, pt2, pt3, pt4){
var point = pt1.scale(-1).add(pt2.scale(3)).minus(pt3.scale(3)).add(pt4).scale(u*u*u);
point = point.add(pt1.scale(3).minus(pt2.scale(6)).add(pt3.scale(3)).scale(u*u));
point = point.add(pt1.scale(-3).add(pt2.scale(3)).scale(u));
Expand Down
16 changes: 16 additions & 0 deletions test/bezier-spec.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
var expect = require("chai").expect;
var jsspline = require("../src/jsspline");

describe("Bezier", function() {
it("should create a interpolated Bezier curve", function(){
var curve = new jsspline.Bezier({
steps: 100
});
for(var i = 0; i < 100; ++i) {
curve.addWayPoint({ x: i, y: Math.sin(Math.PI * i * 0.2), z: 0.0});
}
console.log("nodes: " + curve.nodes.length);
expect(curve.nodes.length).to.equal(4900);
});

});

0 comments on commit 4ece7b2

Please sign in to comment.