void DL_torquespring::calculate_and_apply(void) { DL_vector t; calculate_torque(); if (maxtorque!=0) { if (maxtorque>0) { if (fabs(storque)>maxtorque) { deactivate(); // possibly raise an event here return; } } else { // maxforce<0 DL_Scalar tl=fabs(storque); if (tl<maxtorque) { storque*=maxtorque/tl; // possibly raise an event here } } } springtorque(&t); d->applytorque(&t); if (g_is_dyna) { t.neg(&t); ((DL_dyna*)g)->applytorque(&t); } }
double track_simulation(double speed){ unsigned int time_now = millis(); total_distance += speed*(double)(time_now - time_last_call); time_last_call = time_now; if (track_distance[current_track_segment] < total_distance) {current_track_segment+=1;} float segment_distance = track_elevation_change[current_track_segment]-track_elevation_change[current_track_segment+1]; double tourque_reference = calculate_torque(speed, segment_distance, track_elevation_change[current_track_segment+1]); return tourque_reference; }