Advertisement
Guest User

Untitled

a guest
Jun 24th, 2019
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 4.84 KB | None | 0 0
  1. using System;
  2.  
  3. public class Projectile
  4. {
  5.     double timeSinceLaunch;
  6.  
  7.     double initialElevation; //The direction the projectile is launched in.
  8.     double initialBearing;
  9.  
  10.     double initialZPos; //The position the projectile is launched from.
  11.     double initialXPos;
  12.     double initialYPos;
  13.  
  14.     double platformZVelocity; //Player movement.
  15.     double platformXVelocity;
  16.     double platformYVelocity;
  17.  
  18.     double windZVelocity; //Wind speed.
  19.     double windXVelocity;
  20.     double windYVelocity;
  21.  
  22.     double airDensity;
  23.     double gravity;
  24.  
  25.     double launchVelocity; //Initial projectile velocity.
  26.  
  27.     double projectileMass;
  28.     double projectileDiameter;
  29.     double projectileDragCoefficient;
  30.  
  31.     public Projectile(double initialZPos, double initialXPos, double initialYPos, double initialElevation, double initialBearing, double launchVelocity, double projectileMass, double projectileDiameter, double projectileDragCoefficient, double platformZVelocity, double platformXVelocity, double platformYVelocity, double windZVelocity, double windXVelocity, double windYVelocity, double airDensity, double gravity)
  32.     {
  33.         this.initialZPos = initialZPos;
  34.         this.initialXPos = initialXPos;
  35.         this.initialYPos = initialYPos;
  36.  
  37.         this.initialElevation = initialElevation;
  38.         this.initialBearing = initialBearing;
  39.  
  40.         this.launchVelocity = launchVelocity;
  41.         this.projectileMass = projectileMass;
  42.         this.projectileDiameter = projectileDiameter;
  43.         this.projectileDragCoefficient = projectileDragCoefficient;
  44.  
  45.         this.platformZVelocity = platformZVelocity;
  46.         this.platformXVelocity = platformXVelocity;
  47.         this.platformYVelocity = platformYVelocity;
  48.  
  49.         this.windZVelocity = windZVelocity;
  50.         this.windXVelocity = windXVelocity;
  51.         this.windYVelocity = windYVelocity;
  52.  
  53.         this.airDensity = airDensity;
  54.         this.gravity = gravity;
  55.     }
  56.    
  57.     double projectileCrossSectionalArea = Math.PI * Math.Pow((projectileDiameter / 1000), 2);
  58.  
  59.     double prevZ = 0;
  60.     double prevX = 0;
  61.  
  62.     double initialZVelocity = (launchVelocity * Math.Cos(initialElevation * Math.PI / 180)) * Math.Cos(initialBearing * Math.PI / 180);
  63.     double initialXVelocity = (launchVelocity * Math.Cos(initialElevation * Math.PI / 180)) * Math.Sin(initialBearing * Math.PI / 180);
  64.     double initialYVelocity = launchVelocity * Math.Sin(initialElevation * Math.PI / 180);
  65.  
  66.     double partialZVelocity = Partial_Velocity_Componenet(initialZVelocity, platformZVelocity, windZVelocity, timeSinceLaunch);
  67.     double partialXVelocity = Partial_Velocity_Componenet(initialXVelocity, platformXVelocity, windXVelocity, timeSinceLaunch);
  68.     double partialYVelocity = Partial_Velocity_Componenet(initialYVelocity, platformYVelocity, windYVelocity, timeSinceLaunch);
  69.     double partialYWithG = initialYVelocity + platformYVelocity + ((windYVelocity - gravity) * timeSinceLaunch);
  70.  
  71.     double dragZ = Drag(airDensity, partialZVelocity, projectileDragCoefficient, projectileCrossSectionalArea, projectileMass);
  72.     double dragX = Drag(airDensity, partialXVelocity, projectileDragCoefficient, projectileCrossSectionalArea, projectileMass);
  73.     double dragY = Drag(airDensity, partialYWithG, projectileDragCoefficient, projectileCrossSectionalArea, projectileMass);
  74.  
  75.     double Zpos = initialZPos + partialZVelocity * timeSinceLaunch - (dragZ * Math.Pow(timeSinceLaunch, 2)) / 2;
  76.     double Xpos = initialXPos + partialXVelocity * timeSinceLaunch - (dragX * Math.Pow(timeSinceLaunch, 2)) / 2;
  77.     double Ypos = initialYPos + partialYVelocity * timeSinceLaunch - ((gravity - dragY) * Math.Pow(timeSinceLaunch, 2)) / 2;
  78.     double range = Math.Sqrt(Math.Pow(Zpos - initialZPos, 2) + Math.Pow(Xpos - initialXPos, 2));
  79.  
  80.     double ZVelocity = ((2 * Zpos) / timeSinceLaunch) - initialZVelocity;
  81.     double XVelocity = ((2 * Xpos) / timeSinceLaunch) - initialXVelocity;
  82.     double YVelocity = ((2 * Ypos) / timeSinceLaunch) - initialYVelocity;
  83.     double totalVelocity = Math.Sqrt(Math.Pow(ZVelocity, 2) + Math.Pow(XVelocity, 2) + Math.Pow(YVelocity, 2));
  84.  
  85.     double pitch = Math.Asin(ZVelocity / totalVelocity) * 180 / Math.PI;
  86.     double bearing;
  87.     if(timeSinceLaunch == 0)
  88.         {
  89.         bearing = initialBearing;
  90.         }
  91.     else
  92.         {
  93.         bearing = Math.Atan2(Zpos - prevZ, Xpos - prevX) * 180 / Math.PI;
  94.         }
  95.  
  96.     public static double Partial_Velocity_Componenet(double initialVelocity, double platformVelocity, double windVelocity, double time)
  97.     {
  98.         return initialVelocity + platformVelocity + (windVelocity * time);
  99.     }
  100.  
  101.     public static double Drag(double airDensity, double partialVelocity, double dragCoefficient, double crossSectionalArea, double mass)
  102.     {
  103.         return (airDensity * Math.Pow(partialVelocity, 2) * dragCoefficient * crossSectionalArea) / (2 * mass);
  104.     }
  105. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement