Vec4.cpp
上传用户:chinafayin
上传日期:2022-04-05
资源大小:153k
文件大小:3k
源码类别:

并行计算

开发平台:

Visual C++

  1. /*
  2.     Linear Algebra / Math library
  3.     Copyright (C) 2003-2009, Marek Olsak (maraeo@gmail.com), All Rights Reserved.
  4.     Copyright (C) 2003-2005, Tomas Pastorek (tomas@tomaspastorek.cz), All Rights Reserved.
  5.     This program is free software; you can redistribute it and/or
  6.     modify it under the terms of the GNU General Public License
  7.     as published by the Free Software Foundation; either version 2
  8.     of the License, or (at your option) any later version.
  9.     This program is distributed in the hope that it will be useful,
  10.     but WITHOUT ANY WARRANTY; without even the implied warranty of
  11.     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12.     GNU General Public License for more details.
  13.     You should have received a copy of the GNU General Public License
  14.     along with this program; if not, write to the Free Software
  15.     Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  16. */
  17. #include "../All.h"
  18. namespace Rune
  19. {
  20.     template<typename T>
  21.     RUNEMATH_API bool Vec4<T>::SafeIsEqual(const Vec4 &v) const
  22.     {
  23.         return Math<T>::SafeIsEqual(x, v.x) && Math<T>::SafeIsEqual(y, v.y) &&
  24.                Math<T>::SafeIsEqual(z, v.z) && Math<T>::SafeIsEqual(w, v.w);
  25.     }
  26.     template RUNEMATH_API bool Vec4<float>::SafeIsEqual(const Vec4 &v) const;
  27.     template RUNEMATH_API bool Vec4<double>::SafeIsEqual(const Vec4 &v) const;
  28.     template<typename T>
  29.     RUNEMATH_API T Vec4<T>::Dot(const Vec4<T> &v1, const Vec4<T> &v2)
  30.     {
  31.         return v1.x*v2.x + v1.y*v2.y + v1.z*v2.z + v1.w*v2.w;
  32.     }
  33.     template RUNEMATH_API float Vec4<float>::Dot(const Vec4<float> &v1, const Vec4<float> &v2);
  34.     template RUNEMATH_API double Vec4<double>::Dot(const Vec4<double> &v1, const Vec4<double> &v2);
  35.     template<typename T>
  36.     RUNEMATH_API Vec4<T> Vec4<T>::Cross(const Vec4<T> &a, const Vec4<T> &b, const Vec4<T> &c)
  37.     {
  38.         // BTW nejsou matice jednodussi? :)
  39.         return Vec4<T>(a.w*b.z*c.y + a.z*b.w*c.y + a.w*b.y*c.z - a.y*b.w*c.z - a.z*b.y*c.w + a.y*b.z*c.w,
  40.                        a.w*b.z*c.x - a.z*b.w*c.x - a.w*b.x*c.z + a.x*b.w*c.z + a.z*b.x*c.w - a.x*b.z*c.w,
  41.                       -a.w*b.y*c.x + a.y*b.w*c.x + a.w*b.x*c.y - a.x*b.w*c.y - a.y*b.x*c.w + a.x*b.y*c.w,
  42.                        a.z*b.y*c.x - a.y*b.z*c.x - a.z*b.x*c.y + a.x*b.z*c.y + a.y*b.x*c.z - a.x*b.y*c.z);
  43.     }
  44.     template RUNEMATH_API Vec4<float> Vec4<float>::Cross(const Vec4<float> &a, const Vec4<float> &b, const Vec4<float> &c);
  45.     template RUNEMATH_API Vec4<double> Vec4<double>::Cross(const Vec4<double> &a, const Vec4<double> &b, const Vec4<double> &c);
  46. }