【问题标题】:What is causing Uncaught TypeError: number is not a function?是什么导致了 Uncaught TypeError: number is not a function?
【发布时间】:2011-03-29 03:13:31
【问题描述】:

如您所知,我正在尝试组合一个非常简单的 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);

【问题讨论】:

    标签: javascript 3d


    【解决方案1】:

    需要使用*进行乘法:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        您不能像在数学中那样通过写 (a)(b)(c) 来进行乘法运算。
        这被解析为两个函数调用,因此您会收到一个错误,即 (a) 不是函数。

        改为写a * b * c

        【讨论】:

          【解决方案4】:

          您省略了乘法运算符,例如:

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

          -- 抢

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-06-05
            • 1970-01-01
            • 1970-01-01
            • 2014-08-15
            • 2021-12-16
            • 2018-04-20
            相关资源
            最近更新 更多