/** Compute the interaction matrix from a subset of * the possible features. */ dg::Matrix& FeatureProjectedLine:: computeJacobian( dg::Matrix& J,int time ) { sotDEBUGIN(15); const MatrixHomogeneous & A = xaSIN(time), & B = xbSIN(time); const dg::Vector & C = xcSIN(time); const double xa=A(0,3),xb=B(0,3),xc=C(0), ya=A(1,3),yb=B(1,3),yc=C(1); const dg::Matrix & JA = JaSIN(time), & JB = JbSIN(time); const int nq=JA.cols(); assert((int)JB.cols()==nq); J.resize(1,nq); for( int i=0;i<nq;++i ) { const double & dxa=JA(0,i),& dxb=JB(0,i), & dya=JA(1,i),& dyb=JB(1,i); J(0,i) = dxa*(yb-yc) - dxb*(ya-yc) - dya*(xb-xc) + dyb*(xa-xc); } sotDEBUGOUT(15); return J; }
void bind_events() { keyboard_event_t kb; joystick_event_t js; joybutton_event_t jb; #define KBD(p, r, k) kb = (keyboard_event_t) {.player = 0, .press_action = p,\ .release_action = r, .keycode = k}; bind_keyboard_event(kb) KBD(ACTION_START_UP, ACTION_END_UP, SDLK_w); KBD(ACTION_START_DOWN, ACTION_END_DOWN, SDLK_s); KBD(ACTION_START_LEFT, ACTION_END_LEFT, SDLK_d); KBD(ACTION_START_RIGHT, ACTION_END_RIGHT, SDLK_a); KBD(ACTION_START_JUMP, ACTION_END_JUMP, SDLK_SPACE); #define JB(s, p, r, b) jb = (joybutton_event_t) { .stick = s, .press_action = p,\ .release_action = r, .button = b}; bind_joybutton_event(jb) bind_joystick_to_player(0, 0); bind_joystick_to_player(1, 1); JB(0, ACTION_START_JUMP, ACTION_END_JUMP, 14); JB(1, ACTION_START_JUMP, ACTION_END_JUMP, 14); #define JS(s, a, t, minp, minf, maxp, maxf) js = (joystick_event_t) {\ .stick = s,\ .action_min_pass = minp, .action_min_fail = minf,\ .action_max_pass = maxp, .action_max_fail = maxf,\ .axis = a, .threshold = t}; bind_joystick_event(js) JS(0, 0, 1000, ACTION_START_RIGHT, ACTION_END_RIGHT, ACTION_START_LEFT, ACTION_END_LEFT); JS(0, 1, 1000, ACTION_START_UP, ACTION_END_UP, ACTION_START_DOWN, ACTION_END_DOWN); JS(1, 0, 1000, ACTION_START_RIGHT, ACTION_END_RIGHT, ACTION_START_LEFT, ACTION_END_LEFT); JS(1, 1, 1000, ACTION_START_UP, ACTION_END_UP, ACTION_START_DOWN, ACTION_END_DOWN); #undef KBD #undef JB #undef JS }