Advertisement
575

yaw_main2

575
Apr 26th, 2023
807
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.66 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[19];
  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.     filename_out = "yaw20.txt";
  77.     std::ofstream current_out(filename_out);
  78.     for (int k = 0; k < 180; k += 9) {
  79.         //delay = (double)m / 1000.0;
  80.            
  81.  
  82.         //out << "[" << k << "] set:";
  83.         //out << "[" << k + 1 << "] set:" << std::endl;
  84.         std::cout << "[+" << k << "] degrees yaw:" << std::endl;
  85.         //temp = raw_dataset[k];
  86.  
  87.         missile = MakeDataMissile(temp);
  88.         missile.yaw_angle += (double)k;
  89.         //std::cout << missile.pitch_angle << " -> " << missile.pitch_angle + 12.0 << std::endl;
  90.         target = ModifyCoords(MakeDataTarget(temp), missile);
  91.            
  92.         t_velo.x = target.v_obj;
  93.         t_velo.y = 0.0;
  94.         t_velo.z = 0.0;
  95.  
  96.         t_velo = MakeRotationVelo(t_velo, target.path_obj, target.pitch_obj);
  97.  
  98.         t_velo -= missile.v_proj_n;
  99.  
  100.         //target.coord_n_obj = MoveTarget(target, t_velo, delay);
  101.            
  102.         //missile.yaw_angle += (double)k;
  103.         //std::cout << "current angle: " << missile.yaw_angle << std::endl;
  104.         surface TargetSurfaceZX, TargetSurfaceXY, TargetSurfaceYZ;
  105.         coordinates zero;
  106.         raw_results = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
  107.         raw_results_missed.push_back(0);
  108.         //std::cout << "distance: " << PointsDistance(target.coord_n_obj, zero) << std::endl;
  109.  
  110.         TargetSurfaceZX = MakeTargetSurface(target.basis_y, target.coord_n_obj);
  111.         //TargetSurfaceYZ = MakeTargetSurface(target.basis_x, target.coord_n_obj);
  112.         TargetSurfaceXY = MakeTargetSurface(target.basis_z, target.coord_n_obj);
  113.  
  114.         //std::cout << TargetSurfaceZX.A << "x + " << TargetSurfaceZX.B << "y + " << TargetSurfaceZX.C << "z + " << TargetSurfaceZX.D << " = 0" << std::endl;
  115.  
  116.         //std::cout << TargetSurfaceXY.A << "x + " << TargetSurfaceXY.B << "y + " << TargetSurfaceXY.C << "z + " << TargetSurfaceXY.D << " = 0" << std::endl;
  117.         int total_near = 0;
  118.         double avg_near = 0.0;
  119.  
  120.         int counter_near = 0;
  121.         int counter_miss = 0;
  122.         int counter_fragments_to_surface = 0;
  123.         unsigned hit_res = 0;
  124.  
  125.  
  126.         progressbar bar(100);
  127.         bar.set_todo_char(" ");
  128.         bar.set_done_char("#");
  129.  
  130.         for (int j = 0; j < 1000; j++) {
  131.             fragments = MakeFragments(missile, target, FragmentsInitialSpeed, FragmentsQuantity, TargetSurfaceZX, TargetSurfaceXY);
  132.             counter_near = 0;
  133.             double distance = 0.0;
  134.             coordinates point;
  135.  
  136.             for (unsigned i = 0; i < fragments.size(); ++i) {
  137.                 if (fragments[i].hitZX && !fragments[i].calculated) {
  138.                     point = PointOfImpact(fragments[i], TargetSurfaceZX);
  139.                     //distance = PointsDistance(point, target.coord_n_obj);
  140.                     hit_res = HitTargetZX(target, point);
  141.                     out << "(" << point.z << ", " << point.x << ")" << std::endl;
  142.                     if (hit_res) {
  143.                         raw_results[hit_res] += 1;
  144.                         counter_near++;
  145.                         fragments[i].calculated = true;
  146.                     }
  147.                 }
  148.                 if (fragments[i].hitXY && !fragments[i].calculated) {
  149.                     point = PointOfImpact(fragments[i], TargetSurfaceXY);
  150.                     //distance = PointsDistance(point, target.coord_n_obj);
  151.                     hit_res = HitTargetXY(target, point);
  152.                     //out << "(" << point.x << ", " << point.y << ")" << std::endl;
  153.                     if (hit_res) {
  154.                         raw_results[hit_res] += 1;
  155.                         counter_near++;
  156.                         fragments[i].calculated = true;
  157.                     }
  158.                 }
  159.             }
  160.             hit_res = 0;
  161.             //std::cout << "[" << j + 1 << "] fragments to target surface: " << counter << std::endl
  162.                 //<< "[" << j + 1 << "] fragments hit the target: " << counter_near << std::endl << std::endl;
  163.             total_near += counter_near;
  164.  
  165.             //if (counter_near == 0)
  166.                 //raw_results_missed[k] += 1;
  167.             if (counter == 10) {
  168.                 counter = 0;
  169.                 bar.update();
  170.             }
  171.             counter++;
  172.         }
  173.         avg_near = total_near / 1000.0;
  174.  
  175.         for (int i = 0; i < 12; ++i) {
  176.             results.push_back(raw_results[i] / 1000.0);
  177.         }
  178.         raw_results.clear();
  179.         //std::cout << std::endl << "avg fragments hit the target: " << avg_near << std::endl << std::endl;
  180.         //std::cout << "missed: " << counter_miss << std::endl << std::endl;
  181.         //std::cout << "avg to surface: " << counter_fragments_to_surface / 10000 << std::endl << std::endl;
  182.  
  183.         std::cout << std::endl << "avg body: " << round(results[1]) << std::endl;
  184.         std::cout << "avg wings: " << round(results[2]) << std::endl;
  185.         std::cout << "avg empennage: " << round(results[3]) << std::endl;
  186.         std::cout << "avg cam: " << round(results[4]) << std::endl;
  187.         std::cout << "avg armament: " << round(results[5]) << std::endl;
  188.         std::cout << "avg navigation: " << round(results[6]) << std::endl;
  189.         std::cout << "avg flaps: " << round(results[7]) << std::endl;
  190.         std::cout << "avg elevator: " << round(results[8]) << std::endl;
  191.         std::cout << "avg engine: " << round(results[9]) << std::endl;
  192.         std::cout << "avg propeller: " << round(results[10]) << std::endl;
  193.         std::cout << "avg fuel tank: " << round(results[11]) << std::endl;
  194.         //std::cout << "missed: " << raw_results_missed[k] << std::endl;
  195.         std::cout << "distance: " << PointsDistance(target.coord_n_obj, base_x) << std::endl;
  196.         std::cout << "total: " << round(avg_near) << std::endl << std::endl;
  197.  
  198.         current_out << round(results[1]) << "\t";
  199.         current_out << round(results[2]) << "\t";
  200.         current_out << round(results[3]) << "\t";
  201.         current_out << round(results[4]) << "\t";
  202.         current_out << round(results[5]) << "\t";
  203.         current_out << round(results[6]) << "\t";
  204.         current_out << round(results[7]) << "\t";
  205.         current_out << round(results[8]) << "\t";
  206.         current_out << round(results[9]) << "\t";
  207.         current_out << round(results[10]) << "\t";
  208.         current_out << round(results[11]) << std::endl;
  209.         //out << "missed: " << raw_results_missed[k] << std::endl << std::endl;
  210.  
  211.         results.clear();
  212.         //out << "missed: " << counter_miss << std::endl << std::endl;
  213.         //if (avg_near < EPS)
  214.             //break;
  215.     }
  216.  
  217.        
  218.     //}
  219.  
  220.    
  221.  
  222.     //to_do_next
  223. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement