私はSAT(分離軸定理)を小さなプログラムに実装しようとしています。私はforループを3回繰り返すことになっていますが、コードの次の部分に分割して続ける前に、一度だけ実行しています。これを行う必要があるという明白な理由はありません... forループがあります。私は以下のループからも呼び出される関数も含めています。 (なぜこのp5js forループは全部反復しないのですか
this.getAxes = function() {
axes = []
for (i = 0; i < this.vertices.length; i++) {
p1 = this.vertices[i]
if (i === this.vertices.length - 1) {
p2 = this.vertices[0]
} else {
p2 = this.vertices[i + 1]
}
edge = createVector(p1.x - p2.x, p1.y - p2.y)
normal = createVector(-edge.y, edge.x)
// the perp method is just (x, y) => (-y, x) or (y, -x)
axes[i] = normal
}
return axes;
}
「projectShape:
this.collides = function(shape) {
axes1 = this.getAxes();
axes2 = shape.getAxes();
for (i = 0; i < 3; i++) {
console.log(i + 1)
axis = axes1[i];
pr1 = this.projectShape(axis)
pr2 = shape.projectShape(axis)
if (!this.overlaps(pr1, pr2)) {
console.log("no collision")
return false;
}
}
}
}
コンソールに1,2,3をログに記録する必要があり、コードを見ることができるようにしかし、それは唯一の機能1.
"getAxes()" ログに記録します)」関数:
this.projectShape = function(axisToProj) {
minV = axisToProj.dot(this.vertices[0]);
maxV = minV;
for (i = 1; i < this.vertices.length; i++) {
// NOTE: the axis must be normalized to get accurate projections
p = axisToProj.dot(this.vertices[i]);
if (p < minV) {
minV = p;
} else if (p > maxV) {
maxV = p;
}
}
minMax = createVector(minV, maxV);
return minMax;
}
"重複()" 関数:
this.overlaps = function(a, b) {
if (a.y > b.x && b.y > a.x) {
return true
}
return false
}
@KevinWorkmanはい私はそれを修正することができました。私は曖昧に言えば、問題はforループ内の変数が互いに矛盾していることと関係していたことを覚えています。私は他のforループで "i"を使う代わりに "j"を使ったと信じています。私はまた、あなたが興味を持っている場合は、プログラムの全体と[ここ](https://github.com/MaxBryarsMansell/Velavity/blob/collision/Velavity/collide.js)を書き直しました。 – Max
よかった。私が尋ねた理由は、この質問がまだ答えが必要なものとしてマークされているからです。私はちょうどフォローアップしたいと思います。あなたはそれを把握してうれしい! –