Пример #1
0
int
                vehiculos::actualizar_vehiculos()
{
    if (getnum_coches() >= 2) {
	vehiculo       *
	    ptranterior;
	vehiculo       *
	    ptraux;
	ptranterior = ptrprim;
	ptraux = ptranterior->ptrsiguiente;
	do {
	    // actualizamos la velocidad para la lista de vehiculos
	    // preparamos la posicion

	    if (ptraux->getv_n() > 90.0)
		ptraux->setv_n(90.0);
	    ptraux->setx_n(ptraux->getx_n() + ptraux->getv_n() * CTIEMPO);
	    /*
	     * la formula se deduce de la velocidad media que es: delta de 
	     * x / delta de t, si depejamos para x_f = x_i +
	     * V_media*(t_f-t_i)
	     */
	    // despues actualizamos con la nueva velocidad
	    ptraux->
		setv_n(velocidad
		       (ptraux->getv_n(), ptranterior->geta_n(),
			ptranterior->getv_n(), ptraux->getV_n(),
			ptraux->getb_n(), ptraux->getb(), CTAU,
			ptranterior->getx_n(), ptranterior->gets_n()));
	    if (ptranterior->getv_n() > ptraux->getv_n()) {
		// std::cout << "Se ha producido una colision...\n" <<
		// std:: endl;
		// ptranterior->ptranterior = ptraux->ptrsiguiente;
		// std::cout << "Los vehiculos estan fuera del
		// carril...pulse una tecla para continuar\n" <<
		// std::endl;
	    }
	    ptranterior = ptranterior->ptrsiguiente;
	    ptraux = ptranterior->ptrsiguiente;
	} while (ptraux != 0);
    }
    return 0;
}
Пример #2
0
// energia mecanica
TFloat energiaMecanica(const Datos& d, TFloat t) {
    TFloat dos_tf=TFloat(2.0,pr);
    return posicion(d, t)*g + velocidad(d,t)*velocidad(d,t) / dos_tf;
}