Advertisement
575

main yaw angle

575
Apr 13th, 2023
638
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.19 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.     missile_data missile;
  21.     target_data target;
  22.     raw_data temp, a, b;
  23.     double FragmentsInitialSpeed = 7000.0;
  24.     int FragmentsQuantity = 1000;
  25.     coordinates base_x;
  26.     velocity t_velo;
  27.  
  28.     base_x.x = 1.0;
  29.     base_x.y = 0.0;
  30.     base_x.z = 0.0;
  31.  
  32.     std::string filename = "1.txt";
  33.     std::ofstream out("output.txt");
  34.    
  35.     raw_dataset = MakeRawData(filename);
  36.     temp = raw_dataset[0];
  37.     int counter = 1;
  38.     double delay;
  39.  
  40.  
  41.     for (int k = 0; k < 183; ++k) {
  42.         //out << "[" << k << "] set:";
  43.         out << "[+" << k << " degrees] yaw angle:" << std::endl;
  44.         std::cout << "[+" << k << " degrees] yaw angle:" << std::endl;
  45.         //temp = raw_dataset[k];
  46.         missile = MakeDataMissile(temp);
  47.         //std::cout << missile.pitch_angle << " -> " << missile.pitch_angle + 12.0 << std::endl;
  48.         base_x = MakeRotation(base_x, missile.yaw_angle, missile.pitch_angle);
  49.         target = ModifyCoords(MakeDataTarget(temp), missile);
  50.         missile.yaw_angle += (double)k;
  51.         std::cout << "current angle: " << missile.yaw_angle << std::endl;
  52.         surface TargetSurfaceZX, TargetSurfaceXY, TargetSurfaceYZ;
  53.         coordinates zero;
  54.  
  55.         std::cout << "distance: " << PointsDistance(target.coord_n_obj, zero) << std::endl;
  56.  
  57.         TargetSurfaceZX = MakeTargetSurface(target.basis_y, target.coord_n_obj);
  58.         TargetSurfaceYZ = MakeTargetSurface(target.basis_x, target.coord_n_obj);
  59.         TargetSurfaceXY = MakeTargetSurface(target.basis_z, target.coord_n_obj);
  60.  
  61.         //std::cout << TargetSurfaceZX.A << "x + " << TargetSurfaceZX.B << "y + " << TargetSurfaceZX.C << "z + " << TargetSurfaceZX.D << " = 0" << std::endl;
  62.  
  63.         //std::cout << TargetSurfaceXY.A << "x + " << TargetSurfaceXY.B << "y + " << TargetSurfaceXY.C << "z + " << TargetSurfaceXY.D << " = 0" << std::endl;
  64.         fragments = MakeFragments(missile, target, FragmentsInitialSpeed, FragmentsQuantity);
  65.         int total_near = 0;
  66.         double avg_near = 0.0;
  67.  
  68.         int counter_near = 0;
  69.         int counter_miss = 0;
  70.         int counter_fragments_to_surface = 0;
  71.  
  72.  
  73.         progressbar bar(100);
  74.         bar.set_todo_char(" ");
  75.         bar.set_done_char("#");
  76.  
  77.         for (int j = 0; j < 10000; j++) {
  78.             fragments = MakeFragments(missile, target, FragmentsInitialSpeed, FragmentsQuantity);
  79.             counter_near = 0;
  80.             double distance = 0.0;
  81.             coordinates point;
  82.  
  83.             for (unsigned int i = 0; i < fragments.size(); ++i) {
  84.                 if (fragments[i].hitZX && !fragments[i].calculated) {
  85.                     point = PointOfImpact(fragments[i], TargetSurfaceZX);
  86.                     //distance = PointsDistance(point, target.coord_n_obj);
  87.  
  88.                     //out << "(" << point.z << ", " << point.x << ")" << std::endl;
  89.                     if (HitTargetZX(target, point)) {
  90.                         counter_near++;
  91.                         fragments[i].calculated = true;
  92.                     }
  93.                 }
  94.                 if (fragments[i].hitXY && !fragments[i].calculated) {
  95.                     point = PointOfImpact(fragments[i], TargetSurfaceXY);
  96.                     //distance = PointsDistance(point, target.coord_n_obj);
  97.  
  98.                     //out << "(" << point.z << ", " << point.x << ")" << std::endl;
  99.                     if (HitTargetXY(target, point)) {
  100.                         counter_near++;
  101.                         fragments[i].calculated = true;
  102.                     }
  103.                 }
  104.             }
  105.  
  106.             //std::cout << "[" << j + 1 << "] fragments to target surface: " << counter << std::endl
  107.                 //<< "[" << j + 1 << "] fragments hit the target: " << counter_near << std::endl << std::endl;
  108.             total_near += counter_near;
  109.  
  110.             if (counter_near == 0)
  111.                 counter_miss++;
  112.             if (counter == 100) {
  113.                 counter = 0;
  114.                 bar.update();
  115.             }
  116.             counter++;
  117.         }
  118.         avg_near = total_near / 10000;
  119.         std::cout << std::endl << "avg fragments hit the target: " << avg_near << std::endl << std::endl;
  120.         //std::cout << "missed: " << counter_miss << std::endl << std::endl;
  121.         //std::cout << "avg to surface: " << counter_fragments_to_surface / 10000 << std::endl << std::endl;
  122.        
  123.         out << avg_near << std::endl << std::endl;
  124.         //out << "missed: " << counter_miss << std::endl << std::endl;
  125.         //if (avg_near < EPS)
  126.             //break;
  127.     }
  128.    
  129.     //to_do_next
  130. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement