AxisAlignedBox3.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 kvadru ve 3D, ktery je rovnobezny s osami (AABB = axis-aligned bounding box)
  22.     **************************************************************************************************/
  23.     template<typename T>
  24.     class AxisAlignedBox3
  25.     {
  26.     public:
  27.         Vec3<T> min, max;
  28.         AxisAlignedBox3() {}
  29.         AxisAlignedBox3(const Vec3<T> &Min, const Vec3<T> &Max): min(Min), max(Max) {}
  30.         Vec3<T> GetCenter() const   { return Vec3<T>::Center(min, max); }
  31.         Vec3<T> GetExtents() const  { return (max - min) * T(0.5); }
  32.         RUNEMATH_API void GetVertices(Vec3<T> *vertices) const;
  33.         RUNEMATH_API void SetCenterAndExtents(const Vec3<T> &center, const Vec3<T> &extents);
  34.         RUNEMATH_API void Approximate(const Vec3<T> *vertices, int count);
  35.         RUNEMATH_API void Approximate(const AxisAlignedBox3 *boxes, int count);
  36.     };
  37.     typedef AxisAlignedBox3<float> AxisAlignedBox3f;
  38.     typedef AxisAlignedBox3<double> AxisAlignedBox3d;
  39. }