 		watcher.stop();
 		watcher.synchronize();
 		watcher.print_elaspsed_time(std::cout);
-		std::string name = "C:\\Users\\JWhan\\Desktop\\DATA\\RVD_" + String::to_string(store_filename_counter_) + ".eobj";
-		points_save(name, *x_);
+		std::string name = "C:\\Users\\JWhan\\Desktop\\DATA\\RVD_" + String::to_string(store_filename_counter_) + ".xyz";
+		points_save_xyz(name, *x_, sample_facet_);
 		free_memory();
 	}
 

			cudaMalloc((void**)&dev_points_, DOUBLE_SIZE * points_nb_ * dimension_);
			cudaMalloc((void**)&dev_facets_, sizeof(index_t) * facet_nb_ * dimension_);
			cudaMalloc((void**)&dev_points_nn_, sizeof(index_t) * points_nb_ * k_);
			cudaMalloc((void**)&dev_facets_nn_, sizeof(index_t) * facet_nb_ * fk_);

			//Output result.
			//cudaMalloc((void**)&dev_ret_, sizeof(double) *  facet_nb_ * 10 * 40);

		// normal vector of the bisector [i, j]
		// and m the middle point of the bisector.
		double d = 0.0;
		double3 temp = sub(position_i, position_j);
		d = dot(add(position_i, position_j), temp);

		//The predecessor of the first vertex is the last vertex
		int prev_k = ping.vertex_nb - 1;

		//get the position data
		

		//then we compute prev_vertex_position "cross" n 
		//prev_l = prev_vertex_position . n
		double prev_l = ping.vertex[prev_k].x * temp.x + ping.vertex[prev_k].y * temp.y + ping.vertex[prev_k].z * temp.z;

		int prev_status = sgn(2.0 * prev_l - d);

		//traverse the Vertex in this Polygon
		for (int k = 0; k < ping.vertex_nb; ++k){

			

			double l = ping.vertex[k].x * temp.x + ping.vertex[k].y * temp.y + ping.vertex[k].z * temp.z;

			int status = sgn(2.0 * l - d);

			//If status of edge extremities differ,
