2011-03-29 1 views
2

Comme vous pouvez le voir, j'essaie de mettre en place un moteur 3D très simple. Je l'écris en javascript. Je pense qu'il est probable qu'il y a une erreur dans la formule, mais pour la vie de moi, je ne peux pas le trouver. Alors maintenant je pense qu'il pourrait y avoir quelque chose d'autre que je n'ai pas encore considéré. L'erreur se produit sur la ligne 21 (dx = Math.cos .....)Qu'est-ce qui provoque Uncaught TypeError: le numéro n'est pas une fonction?

Voici la partie pertinente de mon code:

// Camera Position in x,y,z 
var c = [ 0,0,0 ]; 

// Viewer position [x,y,z] 
var v = [ 0,0,0 ]; 

// Angle of view [x, y, z] 
var a = [ 0.01, 0.01, 0.01 ]; 

var point = [ 0,0, 50 ]; 

dx = Math.cos(a[1])(Math.sin(a[2])(point[1] - c[1]) + Math.cos(a[2])(point[0] - c[0])) - Math.sin(a[1])(point[2] - c[2]); 
dy = Math.sin(a[0])(Math.cos(a[1])(point[2] - c[2]) + Math.sin(a[1])(Math.sin(a[2])(point[1] - c[1]) + Math.cos(a[2])(point[0] - c[0]))) + Math.cos(a[0])(Math.cos(a[2])(point[1] - c[1]) - Math.sin(a[2])(point[0] - c[0])); 
dz = Math.cos(a[0])(Math.cos(a[1])(point[2] - c[2]) + Math.sin(a[1])(Math.sin(a[2])(point[1] - c[1]) + Math.cos(a[2])(point[0] - c[0]))) - Math.sin(a[0])(Math.cos(a[2])(point[1] - c[1]) - Math.sin(a[2])(point[0] - c[0])); 

bx = (dx - v[0])(v[2]/dz); 
by = (dy - v[1])(v[2]/dz); 

Répondre

5

Vous devez utiliser * multiplier:

dx = Math.cos(a[1])*(Math.sin(a[2])*(point[1] - c[1]) ... etc 
2

Je ne suis pas un expert Javascript, mais je suppose que Math.cos (a [1]) retourne un nombre, et faire Math.cos (a [1]) (5) essaie d'utiliser un nombre comme un fonction. Si vous voulez multiplier deux nombres, vous devez utiliser l'opérateur de multiplication '*'.

2

Vous ne pouvez pas multiplier en écrivant (a)(b)(c) comme vous le faites en mathématiques.
Ceci est analysé comme deux appels de fonction, donc vous obtenez une erreur que le (a) n'est pas une fonction.

A la place, écrivez a * b * c.

+0

Wow ..... Il est beaucoup trop tard. Je vous remercie. –

2

Vous quittez à l'opérateur de multiplication, par exemple .:

x = Math.cos(a[1]) * (Math.sin(a[2]) * (... 
-------------------^-----------------^ 

- Rob

Questions connexes