Advertisement
575

main explosion delay

575
Apr 13th, 2023 (edited)
568
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.61 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <string>
  4. #include <numeric>
  5. #include <algorithm>
  6. #include <fstream>
  7. #include <map>
  8. #include <iomanip>
  9. #include "file_structs.h"
  10. #include "data_making.h"
  11. #include "missile.h"
  12. #include "target.h"
  13. #include "progressbar.h"
  14.  
  15.  
  16. int main() {
  17.     std::vector <raw_data> data;
  18.     std::vector <fragment> fragments;
  19.     std::vector <raw_data> raw_dataset;
  20.     std::vector <int> raw_results = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
  21.     std::vector <int> raw_results_missed;
  22.     std::vector <double> results;
  23.     missile_data missile;
  24.     target_data target;
  25.     raw_data temp, a, b;
  26.     double FragmentsInitialSpeed = 7000.0;
  27.     int FragmentsQuantity = 1000;
  28.     coordinates base_x;
  29.     velocity t_velo;
  30.  
  31.     base_x.x = 0.0;
  32.     base_x.y = 0.0;
  33.     base_x.z = 0.0;
  34.  
  35.     std::string filename = "1.txt";
  36.     std::string filename_out;
  37.     std::ofstream out("output.txt");
  38.  
  39.     raw_dataset = MakeRawData(filename);
  40.     temp = raw_dataset[0];
  41.     int counter = 1;
  42.     double delay;
  43.     /*
  44.     // start
  45.     missile = MakeDataMissile(temp);
  46.     //missile.yaw_angle = 75.0;
  47.     //missile.pitch_angle = 45.0;
  48.     target = ModifyCoords(MakeDataTarget(temp), missile);
  49.  
  50.     surface TargetSurfaceZX, TargetSurfaceXY, TargetSurfaceYZ;
  51.     coordinates zero;
  52.  
  53.     //std::cout << "distance: " << PointsDistance(target.coord_n_obj, zero) << std::endl;
  54.  
  55.     TargetSurfaceZX = MakeTargetSurface(target.basis_y, target.coord_n_obj);
  56.     TargetSurfaceXY = MakeTargetSurface(target.basis_z, target.coord_n_obj);
  57.     //std::cout << TargetSurfaceZX.A << "x + " << TargetSurfaceZX.B << "y + " << TargetSurfaceZX.C << "z + " << TargetSurfaceZX.D << " = 0" << std::endl;
  58.     coordinates point;
  59.     fragments = MakeFragments(missile, target, FragmentsInitialSpeed, FragmentsQuantity);
  60.     for (unsigned i = 0; i < fragments.size(); ++i) {
  61.         if (fragments[i].hitXY) {
  62.             point = PointOfImpact(fragments[i], TargetSurfaceXY);
  63.             //distance = PointsDistance(point, target.coord_n_obj);
  64.  
  65.             out << "(" << point.x << ", " << point.y << ")" << std::endl;
  66.         }
  67.     }
  68.     std::cout << counter;
  69.     //end
  70.     */
  71.  
  72.  
  73.     for (int m = 0; m < 20; ++m) {
  74.         filename_out = std::to_string(m) + "delay.txt";
  75.         std::ofstream current_out(filename_out);
  76.        
  77.         for (int k = 0; k < 100; ++k) {
  78.             delay = (double)m / 1000.0;
  79.            
  80.  
  81.             //out << "[" << k << "] set:";
  82.             //out << "[" << k + 1 << "] set:" << std::endl;
  83.             std::cout << "[" << k + 1 << "] set:" << std::endl;
  84.             temp = raw_dataset[k];
  85.  
  86.             missile = MakeDataMissile(temp);
  87.             //std::cout << missile.pitch_angle << " -> " << missile.pitch_angle + 12.0 << std::endl;
  88.             target = ModifyCoords(MakeDataTarget(temp), missile);
  89.            
  90.             t_velo.x = target.v_obj;
  91.             t_velo.y = 0.0;
  92.             t_velo.z = 0.0;
  93.  
  94.             t_velo = MakeRotationVelo(t_velo, target.path_obj, target.pitch_obj);
  95.  
  96.             t_velo -= missile.v_proj_n;
  97.  
  98.             target.coord_n_obj = MoveTarget(target, t_velo, delay);
  99.             //missile.yaw_angle += (double)k;
  100.             //std::cout << "current angle: " << missile.yaw_angle << std::endl;
  101.             surface TargetSurfaceZX, TargetSurfaceXY, TargetSurfaceYZ;
  102.             coordinates zero;
  103.             raw_results = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
  104.             raw_results_missed.push_back(0);
  105.             //std::cout << "distance: " << PointsDistance(target.coord_n_obj, zero) << std::endl;
  106.  
  107.             TargetSurfaceZX = MakeTargetSurface(target.basis_y, target.coord_n_obj);
  108.             //TargetSurfaceYZ = MakeTargetSurface(target.basis_x, target.coord_n_obj);
  109.             TargetSurfaceXY = MakeTargetSurface(target.basis_z, target.coord_n_obj);
  110.  
  111.             //std::cout << TargetSurfaceZX.A << "x + " << TargetSurfaceZX.B << "y + " << TargetSurfaceZX.C << "z + " << TargetSurfaceZX.D << " = 0" << std::endl;
  112.  
  113.             //std::cout << TargetSurfaceXY.A << "x + " << TargetSurfaceXY.B << "y + " << TargetSurfaceXY.C << "z + " << TargetSurfaceXY.D << " = 0" << std::endl;
  114.             int total_near = 0;
  115.             double avg_near = 0.0;
  116.  
  117.             int counter_near = 0;
  118.             int counter_miss = 0;
  119.             int counter_fragments_to_surface = 0;
  120.             unsigned hit_res = 0;
  121.  
  122.  
  123.             progressbar bar(100);
  124.             bar.set_todo_char(" ");
  125.             bar.set_done_char("#");
  126.  
  127.             for (int j = 0; j < 1000; j++) {
  128.                 fragments = MakeFragments(missile, target, FragmentsInitialSpeed, FragmentsQuantity);
  129.                 counter_near = 0;
  130.                 double distance = 0.0;
  131.                 coordinates point;
  132.  
  133.                 for (unsigned i = 0; i < fragments.size(); ++i) {
  134.                     if (fragments[i].hitZX && !fragments[i].calculated) {
  135.                         point = PointOfImpact(fragments[i], TargetSurfaceZX);
  136.                         //distance = PointsDistance(point, target.coord_n_obj);
  137.                         hit_res = HitTargetZX(target, point);
  138.                         //out << "(" << point.z << ", " << point.x << ")" << std::endl;
  139.                         if (hit_res) {
  140.                             raw_results[hit_res] += 1;
  141.                             counter_near++;
  142.                             fragments[i].calculated = true;
  143.                         }
  144.                     }
  145.                     if (fragments[i].hitXY && !fragments[i].calculated) {
  146.                         point = PointOfImpact(fragments[i], TargetSurfaceXY);
  147.                         //distance = PointsDistance(point, target.coord_n_obj);
  148.                         hit_res = HitTargetXY(target, point);
  149.                         //out << "(" << point.z << ", " << point.x << ")" << std::endl;
  150.                         if (hit_res) {
  151.                             raw_results[hit_res] += 1;
  152.                             counter_near++;
  153.                             fragments[i].calculated = true;
  154.                         }
  155.                     }
  156.                 }
  157.                 hit_res = 0;
  158.                 //std::cout << "[" << j + 1 << "] fragments to target surface: " << counter << std::endl
  159.                     //<< "[" << j + 1 << "] fragments hit the target: " << counter_near << std::endl << std::endl;
  160.                 total_near += counter_near;
  161.  
  162.                 if (counter_near == 0)
  163.                     raw_results_missed[k] += 1;
  164.                 if (counter == 10) {
  165.                     counter = 0;
  166.                     bar.update();
  167.                 }
  168.                 counter++;
  169.             }
  170.             avg_near = total_near / 1000.0;
  171.  
  172.             for (int i = 0; i < 12; ++i) {
  173.                 results.push_back(raw_results[i] / 1000.0);
  174.             }
  175.             raw_results.clear();
  176.             //std::cout << std::endl << "avg fragments hit the target: " << avg_near << std::endl << std::endl;
  177.             //std::cout << "missed: " << counter_miss << std::endl << std::endl;
  178.             //std::cout << "avg to surface: " << counter_fragments_to_surface / 10000 << std::endl << std::endl;
  179.  
  180.             std::cout << std::endl << "avg body: " << round(results[1]) << std::endl;
  181.             std::cout << "avg wings: " << round(results[2]) << std::endl;
  182.             std::cout << "avg empennage: " << round(results[3]) << std::endl;
  183.             std::cout << "avg cam: " << round(results[4]) << std::endl;
  184.             std::cout << "avg armament: " << round(results[5]) << std::endl;
  185.             std::cout << "avg navigation: " << round(results[6]) << std::endl;
  186.             std::cout << "avg flaps: " << round(results[7]) << std::endl;
  187.             std::cout << "avg elevator: " << round(results[8]) << std::endl;
  188.             std::cout << "avg engine: " << round(results[9]) << std::endl;
  189.             std::cout << "avg propeller: " << round(results[10]) << std::endl;
  190.             std::cout << "avg fuel tank: " << round(results[11]) << std::endl;
  191.             std::cout << "missed: " << raw_results_missed[k] << std::endl;
  192.             std::cout << "distance: " << PointsDistance(target.coord_n_obj, base_x) << std::endl;
  193.             std::cout << "total: " << round(avg_near) << std::endl << std::endl;
  194.  
  195.             current_out << round(results[1]) << "\t";
  196.             current_out << round(results[2]) << "\t";
  197.             current_out << round(results[3]) << "\t";
  198.             current_out << round(results[4]) << "\t";
  199.             current_out << round(results[5]) << "\t";
  200.             current_out << round(results[6]) << "\t";
  201.             current_out << round(results[7]) << "\t";
  202.             current_out << round(results[8]) << "\t";
  203.             current_out << round(results[9]) << "\t";
  204.             current_out << round(results[10]) << "\t";
  205.             current_out << round(results[11]) << std::endl;
  206.             //out << "missed: " << raw_results_missed[k] << std::endl << std::endl;
  207.  
  208.             results.clear();
  209.             //out << "missed: " << counter_miss << std::endl << std::endl;
  210.             //if (avg_near < EPS)
  211.                 //break;
  212.         }
  213.  
  214.        
  215.     }
  216.  
  217.    
  218.  
  219.     //to_do_next
  220. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement