/***********************************
 * Function: create_circle
 * -----------------------
 * Creates a circular distribution (radius 1) of POS and NEG values, with
 * num_pos POS values inside a radius=1/2, and num_neg NEG values outside that
 * radius
 */
TrainingData create_circle(int num_pos, int num_neg){
	// create TrainingData object (circle, dimension 2)
	TrainingData circle;
	
	// create positive distribution within radius=1/2
	vector <float> coord;
	float radius, theta;
	for (int i=0; i<num_pos; i++){
		// get radius and angle
		radius = sqrt((float)rand()/RAND_MAX)/2;
		theta = 2*M_PI*(float)rand()/RAND_MAX;

		// convert to x and y
		coord.push_back(radius * cos(theta));
		coord.push_back(radius * sin(theta));
		coord.push_back(5.0f);
		//coord.push_back(coord[0]*coord[0] + coord[1]*coord[1]);

		FeatureVector fv(coord, POS);
		circle.addFeature(fv);
		coord.clear();
	}
	// create negative distribution for 1/2 <= radius <= 1
	for (int i=num_pos; i<num_pos+num_neg; i++){
		// get radius and angle
		radius = sqrt(3*(float)rand()/RAND_MAX+1)/2;
		theta = 2*M_PI*(float)rand()/RAND_MAX;
		
		// convert to x and y
		coord.push_back(radius * cos(theta));
		coord.push_back(radius * sin(theta));
		coord.push_back(1.5f);
		//coord.push_back(coord[0]*coord[0] + coord[1]*coord[1]);

		FeatureVector fv(coord, NEG);
		circle.addFeature(fv);
		coord.clear();
	}
	return circle;
}