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

并行计算

开发平台:

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. #pragma once
  18. namespace Rune
  19. {
  20.     /**
  21.         Trida koule ve 3D
  22.     **************************************************************************************************/
  23.     template<typename T>
  24.     class RUNEMATH_API Sphere3
  25.     {
  26.     public:
  27.         Vec3<T> pos;
  28.         T radius;
  29.         Sphere3() {}
  30.         Sphere3(const Vec3<T> &position, T sphereradius): pos(position), radius(sphereradius) {}
  31.         void ApproximateBestOf3(const Vec3<T> *vertices, int count);
  32.         void ApproximateFromAABB(const Vec3<T> *vertices, int count);
  33.         void ApproximateFromAABB(const Sphere3<T> *spheres, int count);
  34.         void ApproximateFromAverage(const Vec3<T> *vertices, int count);
  35.         void ApproximateFromMostDistantVerts(const Vec3<T> *vertices, int count);
  36.     private:
  37.         static Vec3<T> FindAABBCenter(const Vec3<T> *vertices, int count);
  38.         static Vec3<T> FindAverageCenter(const Vec3<T> *vertices, int count);
  39.         static Vec3<T> FindCenterFromMostDistantVerts(const Vec3<T> *vertices, int count);
  40.         static T CalculateRadius(const Vec3<T> &center, const Vec3<T> *vertices, int count);
  41.     };
  42.     typedef Sphere3<float> Sphere3f;
  43.     typedef Sphere3<double> Sphere3d;
  44. }