cars.forEach((car) => { //Draw car //Draw Wheels fill("black"); strokeWeight(0); ellipse( car.x + (carDi / 2) * cos(car.angle + PI / 4), car.y + (carDi / 2) * sin(car.angle + PI / 4), carDi / 2.5 ); ellipse( car.x + (carDi / 2) * cos(car.angle - PI / 4), car.y + (carDi / 2) * sin(car.angle - PI / 4), carDi / 2.5 ); ellipse( car.x + (carDi / 2) * cos(car.angle + 0.75 * PI), car.y + (carDi / 2) * sin(car.angle + 0.75 * PI), carDi / 2.5 ); ellipse( car.x + (carDi / 2) * cos(car.angle - 0.75 * PI), car.y + (carDi / 2) * sin(car.angle - 0.75 * PI), carDi / 2.5 ); //Draw Car Base fill("blue"); stroke("black"); strokeWeight(1); ellipse(car.x, car.y, carDi); //Draw Eye fill("yellow"); ellipse(car.eyeX, car.eyeY, carDi / 3); // Car Behavior if (car.dead == false && car.ptInObst(car.x, car.y) == false) { // Make sure car is alive car.updatePos(); //Make Decision //Get obstacle detection distances let inputs = tf.tensor2d([car.getCollisDist()]); // Predict the value let decArr = car.model.predict(inputs).dataSync(); //Adjust angle and velocity based on outputs car.v += 0.1 * decArr[0]; // Accelerate car.v -= 0.2 * decArr[1]; // Brake car.angle -= 0.1 * decArr[2]; // Turn Left car.angle += 0.1 * decArr[3]; // Turn Right } else{ car.dead = true // Kill the car if it is in obstacle } });