是什么导致Uncaught TypeError:number不是函数?

时间:2011-03-29 03:13:31

标签: javascript 3d

正如您所知,我正在尝试组建一个非常简单的3D引擎。我是用javascript写的。我认为公式中可能存在错误,但对于我的生活,我找不到它。所以现在我想可能还有其他我尚未考虑的事情。错误发生在第21行(dx = Math.cos .....)

以下是我的代码的相关部分:

// 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);

4 个答案:

答案 0 :(得分:5)

您需要使用*来乘以:

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

答案 1 :(得分:2)

我不是Javascript专家,但我猜Math.cos(a [1])返回一个数字,并且做Math.cos(a [1])(5)试图使用一个数字作为功能。如果要将两个数相乘,则应使用'*'乘法运算符。

答案 2 :(得分:2)

你不能像在数学中那样写(a)(b)(c) 这被解析为两个函数调用,因此您会收到(a)不是函数的错误。

而是写a * b * c

答案 3 :(得分:2)

你要省略乘法运算符,例如:

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

- 罗布