###前提・実現したいこと
javascriptのコードを動くようにする事。
###発生している問題・エラーメッセージ
クラスの実装方法に問題があるらしいが、その理由が分からない。
TypeError: vector1.substract(...) is undefined
###該当のソースコード
//クラスの実装
function Vector3(x, y, z){
this.x = x;
this.y = y;
this.z = z;
this.add = function(vec){ return Vector3(this.x + vec.x, this.y + vec.y, this.z + vec.z); } this.substract = function(vec){ return Vector3(this.x - vec.x, this.y - vec.y, this.z - vec.z); } this.multiply = function(r){ return Vector3(this.x * r, this.y * r, this.z * r); } this.normal2 = function(){ return this.x * this.x + this.y * this.y + this.z * this.z; } this.normal = function(){ return Math.sqrt(this.normal2); }
};
function Particle(vec_r, vec_v, rho, p, vec_f){
this.r = vec_r;
this.v = vec_v;
this.rho = rho;
this.p = p;
this.f = vec_f;
};
//動かない関数
//ps:Particleの配列
function calculate_density_and_pressure(ps){
var r2, c, sum, vector1, vector2;
for(var i = 0; i < ps.length; i++){
sum = 0.0;
for(var j = 0; j < ps.length; j++){
if(i == j) continue;
vector1 = ps[i].r;
vector2 = ps[j].r;
r2 = vector1.substract(vector2).multiply(SPH_SIMSCALE).normal2();//この文でエラーが起こる
if(H2 > r2){
c = H2 - r2;
sum += c * c * c;
}
}
ps[i].rho = sum * SPH_PMASS * Poly6Kern;
ps[i].p = (p[i].rho - SPH_RESTDENSITY) * SPH_INTSTIFF;
p[i].rho = 1.0 / p[i].rho;
}
}
###試したこと
様々なサイトを見て色々なクラスの実装方法を試したが、どれも上手くいかなかった。
vector1,vector2にはちゃんと値も代入されている事も確認している。
###補足情報(言語/FW/ツール等のバージョンなど)
初歩的な事でしょうけれども、お願いします。
回答1件
あなたの回答
tips
プレビュー