Advertisement
Guest User

Untitled

a guest
Apr 27th, 2017
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.16 KB | None | 0 0
  1. double nilsegments::getMatch(double true_wind_direction, double true_track_heading, double true_wind_speed,double true_track_speed)
  2. {
  3.     //formula from https://en.wikipedia.org/wiki/Apparent_wind  
  4.     //V =      velocity (boat speed over ground, always => 0)
  5.     //W =      true wind velocity (always => 0)
  6.     //alpha  = true pointing angle in degrees (0 = upwind, 180 = downwind)
  7.     //A =      apparent wind velocity (always => 0)
  8.     //A=       sqrt ((W^2+V^2+2WV)\cos (alpha))
  9.  
  10.     double true_wind_heading=fmod((true_wind_direction + 180),360);
  11.     double a = true_wind_heading;
  12.     double b = true_track_heading;
  13.     double diff = (a > b ? a - b : b - a);
  14.     double mod_diff = fmod(diff, 360);
  15.     double alpha = (mod_diff < 180 ? mod_diff : 360 - mod_diff);
  16.     double W=true_wind_speed;
  17.     double V=true_track_speed;
  18.     double W_pow=qPow(W,2);
  19.     double V_pow=qPow(V,2);
  20.     double alpha_cos=qCos(qDegreesToRadians(alpha));
  21.     double A_speed=qSqrt(W_pow+V_pow+(2*W*V*alpha_cos));
  22.     //double A_angle = qRadiansToDegrees(qAcos((W*alpha_cos+V)/A_speed));
  23.  
  24.     //H=headwind
  25.     double H=A_speed-W;
  26.     return qPow(H,2)/qPow(true_track_speed,2);
  27. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement