void test_02() { // Create a universe Universe universe; // Add a bunch of objects Object* A = new Object; A->set_velocity(0, 1); for ( int ii = 0; ii < 10; ++ii) { A->set_position(ii, ii); universe.add_object(A); } std::cout << "Initial conditions: \n"; debug_display_world(universe); // Iterate the engine a few times for (int ii = 0; ii < 5; ++ii) { universe.physics_runtime_iteration(); std::cout << "\nIteration " << ii << ":\n"; debug_display_world(universe); } }
void test_004 () { Universe universe; Object* A = new Object; Object* B = new Object; universe.add_object(A); universe.add_object(B); A->set_position(5, 2); B->set_position(3, 1); A->set_mass(-1.5); vec2d acceleration = universe.physics.acceleration(A,B); A->calc_new_pos_vel(universe.objects, universe.physics); std::cout << "Acceleration of ObjectA With Respect to ObjectB =" << acceleration[0] << "," << acceleration[1] << std::endl; debug_display_world(universe); }
void test_03 () { // Create a universe Universe universe; // Create two objects Object* A = new Object; Object* B = new Object; // Set them apart, and on a collision course A->set_position(2, 0); A->set_velocity(-1, 0); A->set_radius(1); B->set_position(-2, 0); B->set_velocity(1, 0.1); B->set_radius(2); // Add them to the universe universe.add_object(A); universe.add_object(B); // Open a file std::ofstream outputfile; outputfile.open("test_03.csv"); // Start to iterate 10000 cycles for (int ii = 0; ii < 10000; ++ii) { // Output the positions of the two objects to a file vec2d posA = A->get_position(); vec2d posB = B->get_position(); outputfile << posA[0] << "," << posA[1] << "," << posB[0] << "," << posB[1] << ";" << std::endl; // Iterate the physics universe.physics_runtime_iteration(); } }
void addRandomObjects(Universe &universe, unsigned seed, int objectAmount){ if(!seed){ srand(time(NULL)); }else{ srand(seed); } std::array<double,2> radiusLim = {0.2, 0.3}; std::array<double,2> massLim = {0.1, 3}; std::array<double,2> velocityLim = {-1, 1}; for(int ii = 0; ii < objectAmount; ii++){ Object* A = new Object; A->set_mass((std::rand()/(double)RAND_MAX)*(massLim[1]-massLim[0])+massLim[0]); A->set_velocity((std::rand()/(double)RAND_MAX)*(velocityLim[1]-velocityLim[0])+velocityLim[0],(std::rand()/(double)RAND_MAX)*(velocityLim[1]-velocityLim[0])+velocityLim[0]); A->set_radius((std::rand()/(double)RAND_MAX)*(radiusLim[1]-radiusLim[0])+radiusLim[0]); A->bouncyness = std::rand()/(double)RAND_MAX; std::array<double,2> xLim = {-universe.width/2+A->get_radius(), universe.width/2-A->get_radius()}; std::array<double,2> yLim = {-universe.height/2+A->get_radius(), universe.height/2-A->get_radius()}; do{ A->set_position((std::rand()/(double)RAND_MAX)*(xLim[1]-xLim[0])+xLim[0], (std::rand()/(double)RAND_MAX)*(yLim[1]-yLim[0])+yLim[0]); }while(CollidesWithAny(A, universe)); universe.add_object(A); } }
void test_00 () { // Show the user we are running test 00 std::cout << "Running test_00..." << std::endl << std::endl; // Make the universe Universe universe; // Open a new scope when creating objects, see below why Object* A; Object* B; { // Generate a few objects A = new Object; B = new Object; // Give them new positions A->set_position(1, 1); B->set_position(-1, 2); // Add the objects to the universe universe.add_object(A); universe.add_object(B); } // Show a few things about the world we just created debug_display_world(universe); std::cout << "\nUpdating the positions\n"; // So to update the position you have to do this A->set_position(2, 2); A->set_velocity(3, 1); B->set_position(-2, -2); B->set_velocity(-1, -2); // Display the world to the commandline debug_display_world(universe); // Now let's try to remove an object std::cout << "\n Removing A" << std::endl; debug_display_world(universe); // Now create a new object std::cout << "\n Adding another object C " << std::endl; Object* C; { C = new Object; C->set_position(0.5, 0.5); universe.add_object(C); } // And show the mapping and world debug_display_world(universe); std::cout << "\n Removing B" << std::endl; universe.remove_object(B); debug_display_world(universe); }