Я пытаюсь реализовать SAT (теорему о разделительной оси) в маленькую программу. У меня есть цикл for, который, как предполагается, повторяется три раза, но он делает это только один раз, прежде чем выходить из него и перейти к следующей части кода. Нет очевидной причины, что он должен это сделать ... Вот цикл for. Я включил функции, которые также вызывают из цикла.Почему этот цикл p5js для цикла не итерируется полностью
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.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.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, которые противоречили друг другу. Я считаю, что вместо использования «i» в других для циклов я использовал, например, «j». Я также переписал всю часть программы и [здесь] (https://github.com/MaxBryarsMansell/Velavity/blob/collision/Velavity/collide.js), если вам интересно. – Max
Хорошо, круто. Причина, по которой я спрашивал, состоит в том, что этот вопрос по-прежнему отмечен как нуждающийся в ответе, поэтому я просто хотел следить. Рад, что вы поняли это. –