Me uní recientemente a un curso fullstack. Va muy bien hasta ahora (aunque es muy difícil), incluso en JS donde solía estar atascado mucho... Bueno, eso es lo que pensé, ahora mismo estoy totalmente perdido en un ejercicio.
¿Alguien puede revisar este violín y decirme dónde está mi (s) error (es)?
El objetivo del ejercicio es hacer una clase (rectángulo), un método para verificar la colisión (está bien), la parte donde tengo un problema es donde necesito verificar la colisión de 1000 rectángulos de tamaños aleatorios, sus creaciones están bien pero el cheque es donde estoy atascado.
let randomRect = []; let collRect = []; function colCheck(n) { for (let i = 0; i < n; i++) { randomRect[i] = Rectangle; Rectangle = {}; Rectangle.name = "Rectangle " + i; Rectangle.topLeftXPos = Math.floor(Math.random() * 10); Rectangle.topLeftYPos = Math.floor(Math.random() * 10); Rectangle.width = Math.floor(Math.random() * 10); Rectangle.length = Math.floor(Math.random() * 10); randomRect.push(Rectangle); } for (let j = 0; j > n; j--) { if (randomRect[i].collides(randomRect[j])) { collRect.push(Rectangle); console.log("Collision detected") } } } colCheck(1000); console.log(collRect);El método de colisión está en jsfiddle. Lo siento si cometí algunos errores ortográficos.
Aquí está mi violín: https://jsfiddle.net/ou5wyrp8/3/
Hola, comencé a hacer algunas ediciones para empujarte en la dirección correcta. Su primer error fue la forma en que intenta usar una clase. Al crear objetos a partir de clases, desea utilizar la new palabra clave, el nombre de la clase y luego tratar el nombre de la clase como una función. Tenga en cuenta que la función que se ejecuta cuando se usa new es el constructor, por ejemplo
let newRect = new Rectangle(topLeftXPos, topLeftYPos, width, length)A continuación, hubo problemas en su bucle for. Para empezar, supuse que quería que el bucle j estuviera anidado dentro del bucle i, lo cual no fue así.
Fui tan lejos para arreglar estas dos cosas. Todo lo que queda es que randomRect y empujes las colisiones para collRect
class Rectangle { constructor(topLeftXPos, topLeftYPos, width, length) { this.topLeftXPos = topLeftXPos; this.topLeftYPos = topLeftYPos; this.width = width; this.length = length; } collides(otherRectangle) { if (this.topLeftXPos === otherRectangle.topLeftXPos) { return true; } else if (this.topLeftYPos === otherRectangle.topLeftYPos) { return true; } else { return false; } } } let randomRect = []; let collRect = []; function colCheck(n) { for (let i = 0; i < n; i++) { //populate randomRect let newRectangle = new Rectangle( //top Math.floor(Math.random() * 10), //left Math.floor(Math.random() * 10), //width Math.floor(Math.random() * 10), //length Math.floor(Math.random() * 10)) randomRect.push(newRectangle); } console.log(randomRect) for( let i = 0; i <n;i++){ for (let j = n-1; j > 0; j--) { if (randomRect[i].collides(randomRect[j])) { collRect.push(randomRect[i]); console.log("Collisaaaion detected") } } } } colCheck(1000); console.log(collRect);