void Step(SnakeParts* snake) { StoreXY(snake); if ((snake[0].dir == UP) && (snake[0].y_pos == 0)) { snake[0].y_pos = (MapHeight - 1) * SpriteSize; snake[0].sprite.setPosition(snake[0].x_pos, snake[0].y_pos); } else if (snake[0].dir == DOWN && snake[0].y_pos == (MapHeight - 1) * SpriteSize) { snake[0].y_pos = 0; snake[0].sprite.setPosition(snake[0].x_pos, snake[0].y_pos); } else if (snake[0].dir == RIGHT && snake[0].x_pos == 0) { snake[0].x_pos = (MapWidth - 1) * SpriteSize; snake[0].sprite.setPosition(snake[0].x_pos, snake[0].y_pos); } else if (snake[0].dir == LEFT && snake[0].x_pos == (MapWidth - 1) * SpriteSize) { snake[0].x_pos = 0; snake[0].sprite.setPosition(snake[0].x_pos, snake[0].y_pos); } else SnakeUpdate(snake); for (int i = 1; i < MaxLengthSnake; i++) { if (snake[i].draw == 1) { StoreXY(snake + i); snake[i].x_pos = snake[i - 1].x_store; snake[i].y_pos = snake[i - 1].y_store; snake[i].sprite.setPosition(snake[i].x_pos, snake[i].y_pos); } } }
/** Dihedral covariance. */ void Action_Matrix::CalcDihedralCovariance( int frameNum ) { double XY2[2]; DataSet_MatrixDbl::iterator mat = Mat_->begin(); v_iterator v1idx1 = Mat_->v1begin(); v_iterator v2idx1 = vect2_.begin(); // TODO: Pre-calculate thetas // FIXME: Only Half Matrix for Now // OUTER LOOP for (Array1D::const_iterator ds2 = DihedralSets_.begin(); ds2 != DihedralSets_.end(); ++ds2) { double theta2 = (*ds2)->Dval( frameNum ) * Constants::DEGRAD; XY2[0] = cos( theta2 ); XY2[1] = sin( theta2 ); // Store X and X^2 StoreXY( v1idx1, v2idx1, XY2 ); // Loop over X and Y of XY2 for (int iidx = 0; iidx < 2; ++iidx) { double Vi = XY2[iidx]; // Diagonal for (int jidx = iidx; jidx < 2; jidx++) *(mat++) += Vi * XY2[jidx]; // Vi * j{0,1}, Vi * j{1} // INNER LOOP for (Array1D::const_iterator ds1 = ds2 + 1; ds1 != DihedralSets_.end(); ++ds1) { double theta1 = (*ds1)->Dval( frameNum ) * Constants::DEGRAD; *(mat++) += Vi * cos( theta1 ); *(mat++) += Vi * sin( theta1 ); } } } }