void draw(){
  _window.Clear();
  
  {
    sf::Rect<float> frect = sf::Rect<float>(0,0,window_width,window_height);
    _camera.SetFromRect(frect);
  }
  
  _window.Draw(_backgroundSprite);
  
  
  // draw the range shade
  _rangeSprite.SetPosition(current_pose.x + window_width/2, window_height/2 - current_pose.y);
  _window.Draw(_rangeSprite);
  
  // draw the landmarks
  for(unsigned int i=0; i<landmarks.size(); i++){
    _landmarkSprite.SetPosition(landmarks[i].x + window_width/2, window_height/2 - landmarks[i].y);
    _window.Draw(_landmarkSprite);
  }

  // draw the robot
  _robotSprite.SetPosition(current_pose.x + window_width/2, window_height/2 - current_pose.y);
  _robotSprite.SetRotation(current_pose.theta * 180 / M_PI);
  _window.Draw(_robotSprite);
  
  // draw the "other" robot
  _fakeRobotSprite.SetPosition(fake_current_pose.x + window_width/2, window_height/2 - fake_current_pose.y);
  _fakeRobotSprite.SetRotation(fake_current_pose.theta * 180 / M_PI);
  _window.Draw(_fakeRobotSprite);
  
  // display everything
  _window.Display();
}
float Functions::calculateRotation(sf::Sprite &sprite, float posX, float posY, float radius, float speed, float angle, float angleOffset)
{
	float rad = (float)(angle * (3.1415 / -180));
			
	sprite.SetPosition(posX + radius * sin(rad), posY + radius * cos(rad));
	
	angle -= speed;	
	angle = fmod(angle, 360);
	
	if (angle == 0) 
	{
		angle = 360;
	}
	
	sprite.SetRotation(angle + angleOffset);

	return angle;
}