Advertisement
Guest User

Untitled

a guest
Jan 27th, 2013
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.14 KB | None | 0 0
  1. #include <iostream>
  2. #include <random>
  3.  
  4. void calcRandomVector(double *u){
  5.     std::random_device rd;
  6.     std::default_random_engine e(rd());
  7.     typedef std::uniform_real_distribution<double> Dstr;
  8.     Dstr unif{};
  9.     double u1 = unif(e, Dstr::param_type{-1.0, 1.0});
  10.     double u2 = unif(e, Dstr::param_type{-1.0+(u1*u1), 1.0-(u1*u1)});
  11.  
  12.     std::bernoulli_distribution bern_u3(0.5);
  13.     double u3;
  14.     if(bern_u3(e))
  15.         u3 = -sqrt(1.0-u1*u1-u2*u2);
  16.     else
  17.         u3 = sqrt(1.0-u1*u1-u2*u2);
  18.  
  19.     u[0] = u1;
  20.     u[1] = u2;
  21.     u[2] = u3;
  22.  
  23. }
  24.  
  25. void orthogonalize(double *v, double *u){
  26.     double factor = (v[0]*u[0]+v[1]*u[1]+v[2]*u[2])/(v[0]*v[0]+v[1]*v[1]+v[2]*v[2]);
  27.  
  28.     u[0] = u[0] - factor * v[0];
  29.     u[1] = u[1] - factor * v[1];
  30.     u[2] = u[2] - factor * v[2];
  31.  
  32. }
  33.  
  34.  
  35. int main(){
  36.     double v[3] = {1.0, 0.0, 0.0}; // given vector
  37.     double u[3];
  38.  
  39.     calcRandomVector(u);
  40.     orthogonalize(v, u);
  41.  
  42.     std::cout << "Given vector: (" << v[0] << ", " << v[1] << ", " << v[2] << ")" << std::endl;
  43.     std::cout << "Random orthonogal vector: (" << u[0] << ", " << u[1] << ", " << u[2] << ")" << std::endl;
  44.  
  45. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement