snipplrCallback({"id":12039,"title":"tplvector","source":"
  1. \/*<\/span><\/div><\/li>
  2.  * tplVector by Marcelo Barreiros Furtado - 2009<\/span><\/div><\/li>
  3.  * mabafu@gmail.com<\/span><\/div><\/li>
  4.  * <\/span><\/div><\/li>
  5.  * To complainers:<\/span><\/div><\/li>
  6.  * You're free to use this code as you wish, take in mind altough that<\/span><\/div><\/li>
  7.  * it's provided "as is". I claim no credit over it - neither shame.<\/span><\/div><\/li>
  8.  * <\/span><\/div><\/li>
  9.  * To contributors:<\/span><\/div><\/li>
  10.  * Feel free to use this code in any creative and original way you wish.<\/span><\/div><\/li>
  11.  * Please e-mail me any issue\/bug\/error you detect on it.<\/span><\/div><\/li>
  12. *\/<\/span><\/div><\/li>
  13.  <\/div><\/li>
  14. #ifndef __VECTOR_TPP__<\/span><\/div><\/li>
  15. #define __VECTOR_TPP__<\/span><\/div><\/li>
  16.  <\/div><\/li>
  17. \/\/! comment the line bellow to wipe away unnecessary code<\/span><\/div><\/li>
  18. \/\/#define __VECTOR_TPP__DEBUG__ <\/span><\/div><\/li>
  19.  <\/div><\/li>
  20. #include <cmath><\/span><\/div><\/li>
  21.  <\/div><\/li>
  22. #ifdef __VECTOR_TPP__DEBUG__<\/span><\/div><\/li>
  23.  <\/div><\/li>
  24. #include <iostream><\/span><\/div><\/li>
  25. using<\/span> namespace<\/span> std;<\/span><\/div><\/li>
  26.  <\/div><\/li>
  27. #endif<\/span><\/div><\/li>
  28.  <\/div><\/li>
  29. \/\/! The vector class template<\/span><\/div><\/li>
  30. template<\/span><<\/span>class<\/span> T><\/span> class<\/span> tplVector;<\/span><\/div><\/li>
  31.  <\/div><\/li>
  32. \/\/! the dot product operator<\/span><\/div><\/li>
  33. template<\/span> <<\/span>class<\/span> T><\/span><\/div><\/li>
  34. T operator*<\/span>(<\/span>tplVector<<\/span>T><\/span>&<\/span> left, tplVector<<\/span>T><\/span>&<\/span> right)<\/span>;<\/span><\/div><\/li>
  35.  <\/div><\/li>
  36. \/\/! the cross product operator<\/span><\/div><\/li>
  37. template<\/span> <<\/span>class<\/span> T><\/span><\/div><\/li>
  38. tplVector<<\/span>T><\/span> operator%<\/span>(<\/span>tplVector<<\/span>T><\/span> left, tplVector<<\/span>T><\/span> right)<\/span>;<\/span><\/div><\/li>
  39.  <\/div><\/li>
  40. \/\/! the scalar multiplication operator 1<\/span><\/div><\/li>
  41. template<\/span> <<\/span>class<\/span> T><\/span><\/div><\/li>
  42. tplVector<<\/span>T><\/span>&<\/span> operator*<\/span>(<\/span>T scalar, tplVector<<\/span>T><\/span>&<\/span> vector)<\/span>;<\/span><\/div><\/li>
  43.  <\/div><\/li>
  44. \/\/! the scalar multiplication operator 2<\/span><\/div><\/li>
  45. template<\/span> <<\/span>class<\/span> T><\/span><\/div><\/li>
  46. tplVector<<\/span>T><\/span>&<\/span> operator*<\/span>(<\/span>tplVector<<\/span>T><\/span>&<\/span> vector, T scalar)<\/span>;<\/span><\/div><\/li>
  47.  <\/div><\/li>
  48. \/\/! the sum operator<\/span><\/div><\/li>
  49. template<\/span> <<\/span>class<\/span> T><\/span><\/div><\/li>
  50. tplVector<<\/span>T><\/span>&<\/span> operator+<\/span>(<\/span>tplVector<<\/span>T><\/span>&<\/span> left, tplVector<<\/span>T><\/span>&<\/span> right)<\/span>;<\/span><\/div><\/li>
  51.  <\/div><\/li>
  52. \/\/! the subtraction operator<\/span><\/div><\/li>
  53. template<\/span> <<\/span>class<\/span> T><\/span><\/div><\/li>
  54. tplVector<<\/span>T><\/span>&<\/span> operator-<\/span>(<\/span>tplVector<<\/span>T><\/span>&<\/span> left, tplVector<<\/span>T><\/span>&<\/span> right)<\/span>;<\/span><\/div><\/li>
  55.  <\/div><\/li>
  56. \/\/! the vector inversion operator<\/span><\/div><\/li>
  57. template<\/span> <<\/span>class<\/span> T><\/span><\/div><\/li>
  58. tplVector<<\/span>T><\/span>&<\/span> operator-<\/span>(<\/span>tplVector<<\/span>T><\/span>&<\/span> vector)<\/span>;<\/span><\/div><\/li>
  59.  <\/div><\/li>
  60. \/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/<\/span><\/div><\/li>
  61. \/\/! The vector class template<\/span><\/div><\/li>
  62. template<\/span><<\/span>class<\/span> T><\/span><\/div><\/li>
  63. class<\/span> tplVector {<\/span><\/div><\/li>
  64. private<\/span>:<\/span>\t<\/div><\/li>
  65. \tT ijk[<\/span>3<\/span>]<\/span>;<\/span><\/div><\/li>
  66.  <\/div><\/li>
  67. public<\/span>:<\/span><\/div><\/li>
  68.  <\/div><\/li>
  69. \t\/\/! the default constructor<\/span><\/div><\/li>
  70. \ttplVector<<\/span>T><\/span>(<\/span>)<\/span>{<\/span><\/div><\/li>
  71. \t\tijk[<\/span>0<\/span>]<\/span> =<\/span> T(<\/span>0<\/span>)<\/span>;<\/span><\/div><\/li>
  72. \t\tijk[<\/span>1<\/span>]<\/span> =<\/span> T(<\/span>0<\/span>)<\/span>;<\/span><\/div><\/li>
  73. \t\tijk[<\/span>2<\/span>]<\/span> =<\/span> T(<\/span>0<\/span>)<\/span>;<\/span><\/div><\/li>
  74. \t}<\/span>\t<\/div><\/li>
  75.  <\/div><\/li>
  76. \t\/\/! the coefficient constructor<\/span><\/div><\/li>
  77. \ttplVector<<\/span>T><\/span>(<\/span>const<\/span> T&<\/span> i, const<\/span> T&<\/span> j, const<\/span> T&<\/span> k)<\/span>{<\/span><\/div><\/li>
  78. \t\tijk[<\/span>0<\/span>]<\/span> =<\/span> i;<\/span><\/div><\/li>
  79. \t\tijk[<\/span>1<\/span>]<\/span> =<\/span> j;<\/span><\/div><\/li>
  80. \t\tijk[<\/span>2<\/span>]<\/span> =<\/span> k;<\/span><\/div><\/li>
  81. \t}<\/span><\/div><\/li>
  82.  <\/div><\/li>
  83.  <\/div><\/li>
  84. \t\/\/! the point subtraction constructor.<\/span><\/div><\/li>
  85. \t\/\/! constructs the ab vector<\/span><\/div><\/li>
  86. \ttplVector<<\/span>T><\/span>(<\/span>const<\/span> T*<\/span> a, const<\/span> T*<\/span> b)<\/span>{<\/span>\t\t<\/div><\/li>
  87. \t\tijk[<\/span>0<\/span>]<\/span> =<\/span> b[<\/span>0<\/span>]<\/span>-<\/span>a[<\/span>0<\/span>]<\/span>;<\/span><\/div><\/li>
  88. \t\tijk[<\/span>1<\/span>]<\/span> =<\/span> b[<\/span>1<\/span>]<\/span>-<\/span>a[<\/span>1<\/span>]<\/span>;<\/span><\/div><\/li>
  89. \t\tijk[<\/span>2<\/span>]<\/span> =<\/span> b[<\/span>2<\/span>]<\/span>-<\/span>a[<\/span>2<\/span>]<\/span>;<\/span><\/div><\/li>
  90. \t}<\/span><\/div><\/li>
  91.  <\/div><\/li>
  92. \t\/\/! the subscript operator\t<\/span><\/div><\/li>
  93. \tT&<\/span> operator[<\/span>]<\/span>(<\/span>const<\/span> int<\/span>&<\/span> index)<\/span>{<\/span>\t\t<\/div><\/li>
  94. \t\treturn<\/span> ijk[<\/span>index %<\/span> 3<\/span>]<\/span>;<\/span><\/div><\/li>
  95. \t}<\/span><\/div><\/li>
  96.  <\/div><\/li>
  97. \t\/\/! the assignment operator\t<\/span><\/div><\/li>
  98. \ttplVector<<\/span>T><\/span>&<\/span> operator=<\/span>(<\/span>tplVector<<\/span>T><\/span>&<\/span> vector)<\/span>{<\/span><\/div><\/li>
  99. \t\tijk[<\/span>0<\/span>]<\/span> =<\/span> vector[<\/span>0<\/span>]<\/span>;<\/span><\/div><\/li>
  100. \t\tijk[<\/span>1<\/span>]<\/span> =<\/span> vector[<\/span>1<\/span>]<\/span>;<\/span><\/div><\/li>
  101. \t\tijk[<\/span>2<\/span>]<\/span> =<\/span> vector[<\/span>2<\/span>]<\/span>;<\/span><\/div><\/li>
  102.  <\/div><\/li>
  103. \t\treturn<\/span> *<\/span>this<\/span>;<\/span><\/div><\/li>
  104. \t}<\/span><\/div><\/li>
  105.  <\/div><\/li>
  106. \t\/\/! the vector's length<\/span><\/div><\/li>
  107. \tT length(<\/span>)<\/span>{<\/span><\/div><\/li>
  108. \t\treturn<\/span> sqrt<\/span>(<\/span>ijk[<\/span>0<\/span>]<\/span>*<\/span>ijk[<\/span>0<\/span>]<\/span>+<\/span>ijk[<\/span>1<\/span>]<\/span>*<\/span>ijk[<\/span>1<\/span>]<\/span>+<\/span>ijk[<\/span>2<\/span>]<\/span>*<\/span>ijk[<\/span>2<\/span>]<\/span>)<\/span>;<\/span><\/div><\/li>
  109. \t}<\/span>\t<\/div><\/li>
  110. }<\/span>;<\/span><\/div><\/li>
  111.  <\/div><\/li>
  112. \/\/! the dot product operator<\/span><\/div><\/li>
  113. template<\/span> <<\/span>class<\/span> T><\/span><\/div><\/li>
  114. T operator*<\/span>(<\/span>tplVector<<\/span>T><\/span>&<\/span> left, tplVector<<\/span>T><\/span>&<\/span> right)<\/span>{<\/span><\/div><\/li>
  115. \treturn<\/span> left[<\/span>0<\/span>]<\/span>*<\/span>right[<\/span>0<\/span>]<\/span> +<\/span> left[<\/span>1<\/span>]<\/span>*<\/span>right[<\/span>1<\/span>]<\/span> +<\/span> left[<\/span>2<\/span>]<\/span>*<\/span>right[<\/span>2<\/span>]<\/span>;<\/span>\t<\/div><\/li>
  116. }<\/span><\/div><\/li>
  117.  <\/div><\/li>
  118. \/\/! the cross product operator<\/span><\/div><\/li>
  119. template<\/span> <<\/span>class<\/span> T><\/span><\/div><\/li>
  120. tplVector<<\/span>T><\/span> operator%<\/span>(<\/span>tplVector<<\/span>T><\/span> left, tplVector<<\/span>T><\/span> right)<\/span>{<\/span>\t<\/div><\/li>
  121. \ttplVector<<\/span>T><\/span> result;<\/span>\t<\/div><\/li>
  122. \tresult[<\/span>0<\/span>]<\/span> =<\/span> left[<\/span>1<\/span>]<\/span> *<\/span> right[<\/span>2<\/span>]<\/span> -<\/span> left[<\/span>2<\/span>]<\/span> *<\/span> right[<\/span>1<\/span>]<\/span>;<\/span><\/div><\/li>
  123. \tresult[<\/span>1<\/span>]<\/span> =<\/span> left[<\/span>2<\/span>]<\/span> *<\/span> right[<\/span>0<\/span>]<\/span> -<\/span> left[<\/span>0<\/span>]<\/span> *<\/span> right[<\/span>2<\/span>]<\/span>;<\/span><\/div><\/li>
  124. \tresult[<\/span>2<\/span>]<\/span> =<\/span> left[<\/span>0<\/span>]<\/span> *<\/span> right[<\/span>1<\/span>]<\/span> -<\/span> left[<\/span>1<\/span>]<\/span> *<\/span> right[<\/span>0<\/span>]<\/span>;<\/span>\t<\/div><\/li>
  125. \treturn<\/span> result;<\/span>\t<\/div><\/li>
  126. }<\/span><\/div><\/li>
  127.  <\/div><\/li>
  128. \/\/! the scalar multiplication operator 1<\/span><\/div><\/li>
  129. template<\/span> <<\/span>class<\/span> T><\/span><\/div><\/li>
  130. tplVector<<\/span>T><\/span>&<\/span> operator*<\/span>(<\/span>T scalar, tplVector<<\/span>T><\/span>&<\/span> vector)<\/span>{<\/span><\/div><\/li>
  131. \tvector[<\/span>0<\/span>]<\/span> *<\/span>=<\/span> scalar;<\/span><\/div><\/li>
  132. \tvector[<\/span>1<\/span>]<\/span> *<\/span>=<\/span> scalar;<\/span><\/div><\/li>
  133. \tvector[<\/span>2<\/span>]<\/span> *<\/span>=<\/span> scalar;<\/span><\/div><\/li>
  134. \treturn<\/span> vector;<\/span><\/div><\/li>
  135. }<\/span><\/div><\/li>
  136.  <\/div><\/li>
  137. \/\/! the scalar multiplication operator 2<\/span><\/div><\/li>
  138. template<\/span> <<\/span>class<\/span> T><\/span><\/div><\/li>
  139. tplVector<<\/span>T><\/span>&<\/span> operator*<\/span>(<\/span>tplVector<<\/span>T><\/span>&<\/span> vector, T scalar)<\/span>{<\/span><\/div><\/li>
  140. \tvector[<\/span>0<\/span>]<\/span> *<\/span>=<\/span> scalar;<\/span><\/div><\/li>
  141. \tvector[<\/span>1<\/span>]<\/span> *<\/span>=<\/span> scalar;<\/span><\/div><\/li>
  142. \tvector[<\/span>2<\/span>]<\/span> *<\/span>=<\/span> scalar;<\/span><\/div><\/li>
  143. \treturn<\/span> vector;<\/span><\/div><\/li>
  144. }<\/span><\/div><\/li>
  145.  <\/div><\/li>
  146. \/\/! the sum operator<\/span><\/div><\/li>
  147. template<\/span> <<\/span>class<\/span> T><\/span><\/div><\/li>
  148. tplVector<<\/span>T><\/span>&<\/span> operator+<\/span>(<\/span>tplVector<<\/span>T><\/span>&<\/span> left, tplVector<<\/span>T><\/span>&<\/span> right)<\/span>{<\/span><\/div><\/li>
  149. \tleft[<\/span>0<\/span>]<\/span> +<\/span>=<\/span> right[<\/span>0<\/span>]<\/span>;<\/span><\/div><\/li>
  150. \tleft[<\/span>1<\/span>]<\/span> +<\/span>=<\/span> right[<\/span>1<\/span>]<\/span>;<\/span><\/div><\/li>
  151. \tleft[<\/span>2<\/span>]<\/span> +<\/span>=<\/span> right[<\/span>2<\/span>]<\/span>;<\/span><\/div><\/li>
  152. \treturn<\/span> left;<\/span><\/div><\/li>
  153. }<\/span><\/div><\/li>
  154.  <\/div><\/li>
  155. \/\/! the subtraction operator<\/span><\/div><\/li>
  156. template<\/span> <<\/span>class<\/span> T><\/span><\/div><\/li>
  157. tplVector<<\/span>T><\/span>&<\/span> operator-<\/span>(<\/span>tplVector<<\/span>T><\/span>&<\/span> left, tplVector<<\/span>T><\/span>&<\/span> right)<\/span>{<\/span><\/div><\/li>
  158. \tleft[<\/span>0<\/span>]<\/span> -<\/span>=<\/span> right[<\/span>0<\/span>]<\/span>;<\/span><\/div><\/li>
  159. \tleft[<\/span>1<\/span>]<\/span> -<\/span>=<\/span> right[<\/span>1<\/span>]<\/span>;<\/span><\/div><\/li>
  160. \tleft[<\/span>2<\/span>]<\/span> -<\/span>=<\/span> right[<\/span>2<\/span>]<\/span>;<\/span><\/div><\/li>
  161. \treturn<\/span> left;<\/span><\/div><\/li>
  162. }<\/span><\/div><\/li>
  163.  <\/div><\/li>
  164. \/\/! the vector inversion operator<\/span><\/div><\/li>
  165. template<\/span> <<\/span>class<\/span> T><\/span><\/div><\/li>
  166. tplVector<<\/span>T><\/span>&<\/span> operator-<\/span>(<\/span>tplVector<<\/span>T><\/span>&<\/span> vector)<\/span>{<\/span>\t<\/div><\/li>
  167. \treturn<\/span> T(<\/span>-<\/span>1<\/span>)<\/span>*<\/span>vector;<\/span><\/div><\/li>
  168. }<\/span><\/div><\/li>
  169.  <\/div><\/li>
  170.  <\/div><\/li>
  171. #ifdef __VECTOR_TPP__DEBUG__<\/span><\/div><\/li>
  172. \/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/<\/span><\/div><\/li>
  173. \/\/! debug only:\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/<\/span><\/div><\/li>
  174.  <\/div><\/li>
  175. \/\/! the stream output operator<\/span><\/div><\/li>
  176. template<\/span> <<\/span>class<\/span> T><\/span><\/div><\/li>
  177. ostream&<\/span> operator<<<\/span> (<\/span>ostream&<\/span> out, const<\/span> tplVector<<\/span>T><\/span>&<\/span> vector)<\/span>{<\/span><\/div><\/li>
  178. \ttplVector<<\/span>T><\/span> aux =<\/span> vector;<\/span><\/div><\/li>
  179. \tout <<<\/span> "("<\/span> <<<\/span> aux[<\/span>0<\/span>]<\/span> <<<\/span> ", "<\/span> <<<\/span> aux[<\/span>1<\/span>]<\/span> <<<\/span> ", "<\/span> <<<\/span> aux[<\/span>2<\/span>]<\/span> <<<\/span> ")"<\/span>;<\/span><\/div><\/li>
  180. \treturn<\/span> out;<\/span> <\/div><\/li>
  181. }<\/span><\/div><\/li>
  182.  <\/div><\/li>
  183. int<\/span> main(<\/span>int<\/span> argc, char<\/span>**<\/span> argv)<\/span>{<\/span>\t<\/div><\/li>
  184. \tfloat<\/span> a[<\/span>3<\/span>]<\/span> =<\/span> {<\/span>1<\/span>,2<\/span>,3<\/span>}<\/span>, b[<\/span>3<\/span>]<\/span>=<\/span> {<\/span>4<\/span>,5<\/span>,6<\/span>}<\/span>;<\/span><\/div><\/li>
  185. \ttplVector<<\/span>float<\/span>><\/span> i(<\/span>1<\/span>,0<\/span>,0<\/span>)<\/span>, j(<\/span>0<\/span>,1<\/span>,0<\/span>)<\/span>, k(<\/span>0<\/span>,0<\/span>,1<\/span>)<\/span>, ab(<\/span>a,b)<\/span>;<\/span><\/div><\/li>
  186.  <\/div><\/li>
  187. \tcout<\/span> <<<\/span> "ab\\t<\/span>"<\/span> <<<\/span> ab <<<\/span> "\\n<\/span>"<\/span>;<\/span><\/div><\/li>
  188. \treturn<\/span> 0<\/span>;<\/span><\/div><\/li>
  189. }<\/span><\/div><\/li>
  190. #endif<\/span><\/div><\/li>
  191. \/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/<\/span><\/div><\/li>
  192.  <\/div><\/li>
  193. #endif<\/span><\/div><\/li><\/ol><\/pre>","link":"https:\/\/snipplr.com\/view\/12039\/tplvector"});