public void updateCabin(Cabin cabin, double accel, double deltaTime) { if (deltaTime > 0.2) return; double vi = cabin.getVelocity(), vf = vi + accel * deltaTime; // vf=vi+ a*dt if (Math.abs(vf) > 20) vf = 0d; double ds = 0.5 * deltaTime * (vf + vi); cabin.setPosition( cabin.getPosition() + ds); // sf=si+integral(dv=vf-vi)=si+dt*(vf-vi)=si+dt*(a*dt)=si+a*dt^2 cabin.setVelocity(vf); double min = floors.get(FloorType.TENTH).getPosition(), max = floors.get(FloorType.UNDER_FIRST).getPosition(); if (cabin.getPosition() > max) { cabin.setPosition(max); } if (cabin.getPosition() < min) { cabin.setPosition(min); } }