Advertisement
TheRedPixel

C++ Vector Math Functions

Oct 1st, 2022
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.64 KB | None | 0 0
  1.  
  2. float Length(Vec3 v)
  3. {
  4.     return v.y;
  5. }
  6.  
  7. void SetPrecicion3Decimal(float &f) {
  8.     f = (int) (f*1000 + 0.0f);
  9.     f = f /1000.0f;
  10. }
  11.  
  12. Vec3 Setprecicion2Decimal(Vec3 v) {
  13.     v.x = (int) (v.x*100 + 0.5f);
  14.     v.x = v.x /100.0f;
  15.     v.y = (int) (v.y*100 + 0.5f);
  16.     v.y = v.y /100.0f;
  17.     v.z = (int) (v.z*100 + 0.5f);
  18.     v.z = v.z /100.0f;
  19.     return v;
  20. }
  21.  
  22. float Magnitude(Vec3 a) {
  23.     return Sqrtf( a.x*a.x + a.y*a.y + a.z*a.z);
  24. }
  25. float Dot(Vec3 a, Vec3 b) {
  26.     return a.x*b.x + a.y*b.y + a.z*b.z;
  27. }
  28. Vec3 Project(Vec3 a, Vec3 b) {
  29.     return b * ( Dot(a,b) / Dot(b,b) );
  30. }
  31. Vec3 Normal(Vec3 v) {
  32.     float m = Magnitude(v);
  33.     Vec3 normal = v/m;
  34.     return normal;
  35. }
  36.  
  37. Vec3 NormalDir(Vec3 a, Vec3 b) {
  38.     Vec3 d( b.x-a.x, b.y-a.y, b.z-a.z );
  39.     return Normal( d );
  40. }
  41.  
  42. Vec3 Cross(Vec3 a, Vec3 b) {
  43.     Vec3 cross( a.y* b.z - b.y* a.z,/**/ b.x* a.z - a.x* b.z,/**/  a.x* b.y - b.x* a.y );
  44.     return cross;
  45. }
  46. Vec3 Difference(Vec3 v1, Vec3 v2) {
  47.    Vec3 d(v1.x - v2.x, v1.y - v2.y, v1.z - v2.z);
  48.    return d;
  49. }
  50.  
  51. Vec3 AlignToUp(Vec3 grav) {
  52.     Vec3 upo( 0.0f, 1.0f, 0.0f );
  53.     Vec3 ng = Normal(grav);
  54.     Vec3 up( upo.x/ng.x, upo.y/ng.y, upo.z/ng.z );//a = a / np.linalg.norm(a) # normalize b  NOT USED
  55.     Vec3 v = Cross(grav, up);
  56.     float c = Dot(grav, up);
  57.     //R = I + v + ( v*v * h); //Identity Matrix/*Vec3 I1( 1, 0, 0);Vec3 I2(0, 1, 0);Vec3 I3(0, 0, 1);*/
  58.     Vec3 v1(0, -v.z, v.y);
  59.     Vec3 v2(v.z, 0, -v.x);
  60.     Vec3 v3(-v.y, v.x, 0);
  61.     float h = 1 / (1 + c);
  62.     //I+v
  63.     Vec3 Iv1(v1.x+1, v1.y, v1.z);
  64.     Vec3 Iv2(v2.x, v2.y+1, v2.z);
  65.     Vec3 Iv3(v3.x, v3.y, v3.z+1);
  66.     //V*V //Vec3 dv( Dot(v1,v1), Dot(v2,v2), Dot(v3,v3) );
  67.     Vec3 vPow1(v1.x*v1.x + v1.y*v2.x + v1.z*v3.x, /**/v1.x*v1.y + v1.y*v2.y + v1.z*v3.y,/**/ v1.x*v1.z + v1.y*v2.z + v1.z*v3.z);
  68.     Vec3 vPow2(v2.x*v1.x + v2.y*v2.x + v2.z*v3.x, /**/v2.x*v1.y + v2.y*v2.y + v2.z*v3.y,/**/ v2.x*v1.z + v2.y*v2.z + v2.z*v3.z);
  69.     Vec3 vPow3(v3.x*v3.x + v3.y*v2.x + v3.z*v3.x, /**/v3.x*v1.y + v3.y*v2.y + v3.z*v3.y,/**/ v3.x*v1.z + v3.y*v2.z + v3.z*v3.z);
  70.     //vPow * h
  71.     Vec3 prodVH1(vPow1.x*h, /**/vPow1.y*h,/**/ vPow1.z*h); Vec3 prodVH2(vPow2.x*h, /**/vPow2.y*h,/**/ vPow2.z*h); Vec3 prodVH3(vPow3.x*h, /**/vPow3.y*h,/**/ vPow3.z*h);
  72.     //I+vPow
  73.     Vec3 R1(Iv1.x+vPow1.x, /**/Iv1.y+vPow1.y,/**/Iv1.z+vPow1.z);
  74.     Vec3 R2(Iv2.x+vPow2.x, /**/Iv2.y+vPow2.y,/**/Iv2.z+vPow2.z);
  75.     Vec3 R3(Iv3.x+vPow3.x, /**/Iv3.y+vPow3.y,/**/Iv3.z+vPow3.z);
  76.     Vec3 alignedGrav(R1.x*grav.x+R1.y*grav.y+R1.z*grav.z,/**/ R2.x*grav.x+R2.y*grav.y+R2.z*grav.z,/**/ R3.x*grav.x+R3.y*grav.y+R3.z*grav.z);
  77.     return alignedGrav;//GravVector * Rmatrix
  78. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement