This commit is contained in:
Thomas FORGIONE 2015-04-20 16:34:41 +02:00
parent 5e58724654
commit 7850b3bb40
4 changed files with 54 additions and 17 deletions

View File

@ -25,19 +25,19 @@ t = [0,1];
f = [0,1];
fp = [-1,-1];
var hermite = new Hermite.Polynom(t, f, fp);
var hermite = new Hermite.special.Polynom(0, 1, -1);
print('M = [');
for (var t = 0; t < 1; t += 0.01) {
var res = hermite.eval(t);
print(t + ',' + toString(res) + ';');
print("\t" + t + ',' + toString(res) + ';');
}
print('];');
print('MP = [');
for (var t = 0; t < 1; t += 0.01) {
var res = hermite.prime(t);
print(t + ',' + toString(res) + ';');
print("\t" + t + ',' + toString(res) + ';');
}
print('];');

View File

@ -129,12 +129,12 @@ FixedCamera.prototype.update = function(mainCamera) {
}
// Update opacity
this.mesh.material.transparent = new_value < 0.9;
this.border.material.transparent = new_value < 0.9;
this.arrow.material.transparent = new_value < 0.9;
this.mesh.material.opacity = new_value;
this.border.material.opacity = new_value;
this.arrow.material.opacity = new_value;
this.object3D.traverse(function(elt) {
if (elt instanceof THREE.Mesh) {
elt.material.transparent = new_value < 0.9;
elt.material.opacity = new_value;
}
});
this.regenerateArrow(mainCamera);
}
@ -151,9 +151,17 @@ FixedCamera.prototype.regenerateArrow = function(mainCamera) {
var hermite = new Hermite.Polynom(t,f,fp);
var up = this.up.clone();
for (var i = this.fullArrow ? 0 : 0.5; i <= 1.001; i += 0.05) {
var point = hermite.eval(i);
var deriv = hermite.prime(i);
var point;
var deriv;
// for (var i = this.fullArrow ? 0 : 0.5; i <= 1.001; i += 0.05) {
for (var i = 1; this.fullArrow ? i > 0 : i > 0.5; i -= 0.05) {
point = hermite.eval(i);
deriv = hermite.prime(i);
up.cross(deriv);
up.cross(deriv);
up.multiplyScalar(-1);
up.normalize();
var left = Tools.cross(up, deriv); left.normalize(); left.multiplyScalar(0.1);
var other = Tools.cross(deriv, left); other.normalize(); other.multiplyScalar(0.1);
@ -166,10 +174,6 @@ FixedCamera.prototype.regenerateArrow = function(mainCamera) {
}
var faces = new Array();
faces.push(
new THREE.Face3(0,1,2),
new THREE.Face3(0,2,3)
);
for (var i = 0; i < vertices.length - 4; i+= 4) {
faces.push(new THREE.Face3(i,i+1,i+5),new THREE.Face3(i,i+5,i+4),
@ -178,6 +182,9 @@ FixedCamera.prototype.regenerateArrow = function(mainCamera) {
new THREE.Face3(i,i+7,i+3), new THREE.Face3(i,i+4,i+7));
}
var len = vertices.length;
faces.push(new THREE.Face3(len-4,len-3,len-2), new THREE.Face3(len-4,len-2,len-1));
this.arrow.geometry.vertices = vertices;
this.arrow.geometry.faces = faces;

View File

@ -169,3 +169,33 @@ Hermite.BaseFunction.prototype.prime = function(t) {
return this.eval(t) * ret;
}
Hermite.special = {};
// This polynom interpolates with two coords and one derivative
// t = [0,1]
Hermite.special.Polynom = function(P0, P1, PP1) {
this.tools = {};
if (P0 instanceof THREE.Vector3) {
this.tools.sum = Tools.sum;
this.tools.mul = Tools.mul;
this.tools.diff = Tools.diff;
this.c = P0.clone();
} else {
this.tools.sum = function(a,b) { return a+b; };
this.tools.mul = function(a,b) { return a*b; };
this.tools.diff = function(a,b) { return a-b; };
this.c = P0;
}
this.a = this.tools.sum(PP1, this.tools.diff(P0, P1));
this.b = this.tools.diff(this.tools.mul(this.tools.diff(P1,P0), 2), PP1);
}
Hermite.special.Polynom.prototype.eval = function(t) {
return this.tools.sum(this.tools.mul(this.a, t*t), this.tools.sum(this.tools.mul(this.b, t), this.c));
}
Hermite.special.Polynom.prototype.prime = function(t) {
return this.tools.sum(this.tools.mul(this.a,2*t), this.b);
}

View File

@ -10,7 +10,7 @@ var ProgessiveSphere = function(loader, res) {
res = 5;
(function(self) {
loader.load('/data/spheres/' + res + '.obj', function(object) {
loader.load(static_path + 'data/spheres/' + res + '.obj', function(object) {
object.traverse(function(child) {
if (child instanceof THREE.Mesh) {
child.up = new THREE.Vector3(0,0,1);