2011-03-29 40 views
2

正如你可以告訴我正在試圖把一個非常簡單的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); 

回答

5

您需要使用*繁殖:

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)會嘗試使用數字作爲功能。如果你想乘兩個數字,你應該使用'*'乘法運算符。

2

你不能像寫數學一樣寫(a)(b)(c)
這被解析爲兩個函數調用,所以你得到的錯誤是(a)不是函數。

取而代之,寫a * b * c

+0

哇.....它的太遲。謝謝。 – 2011-03-29 03:20:13

2

你離開了乘法運算,例如:

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

- 羅布

相關問題