12#ifndef ARCANE_UTILS_REAL3_H 
   13#define ARCANE_UTILS_REAL3_H 
   17#include "arcane/utils/Numeric.h" 
   18#include "arcane/utils/Real2.h" 
   50    ARCCORE_CHECK_AT(i, 3);
 
 
   65    ARCCORE_CHECK_AT(i, 3);
 
 
   80    ARCCORE_CHECK_AT(i,3);
 
 
   95    ARCCORE_CHECK_AT(i,3);
 
 
  102    ARCCORE_CHECK_AT(i, 3);
 
 
 
  136  constexpr ARCCORE_HOST_DEVICE 
Real3()
 
 
  199  constexpr ARCCORE_HOST_DEVICE 
static Real3 null() { 
return Real3(0., 0., 0.); }
 
  200  constexpr ARCCORE_HOST_DEVICE 
static Real3 zero() { 
return Real3(0., 0., 0.); }
 
  205  constexpr ARCCORE_HOST_DEVICE 
Real3 copy()
 const { 
return (*
this); }
 
  248  std::istream& assign(std::istream& i);
 
  250  std::ostream& print(std::ostream& o) 
const;
 
  252  std::ostream& printXyz(std::ostream& o) 
const;
 
  360    return Real3(vec.
x * sca, vec.
y * sca, vec.
z * sca);
 
 
  366    return Real3(vec.
x * sca, vec.
y * sca, vec.
z * sca);
 
 
  372    return Real3(vec.
x / sca, vec.
y / sca, vec.
z / sca);
 
 
  391    return (v1.
x < v2.
x);
 
 
  414    return _eq(
x, b.
x) && _eq(
y, b.
y) && _eq(
z, b.
z);
 
 
  433  inline ARCCORE_HOST_DEVICE 
Real normL2() 
const;
 
  436  ARCCORE_DEPRECATED_2021(
"Use math::squareNormL2(const Real3&) instead")
 
  437  constexpr ARCCORE_HOST_DEVICE 
Real abs2()
 const { 
return x * 
x + 
y * 
y + 
z * 
z; }
 
  440  ARCCORE_DEPRECATED_2021(
"Use math::normL2(const Real3&) instead")
 
  441  inline ARCCORE_HOST_DEVICE 
Real abs() const;
 
  444  inline constexpr ARCCORE_HOST_DEVICE 
bool isNearlyZero() const;
 
  446  ARCANE_DEPRECATED_REASON(
"Y2024: Use math::mutableNormalize(Real3&) instead")
 
  447  inline 
Real3& normalize();
 
  456  inline constexpr ARCCORE_HOST_DEVICE static 
bool _eq(
Real a, 
Real b);
 
  458  inline ARCCORE_HOST_DEVICE static 
Real _sqrt(
Real a);
 
 
  464inline constexpr ARCCORE_HOST_DEVICE 
Real2::
 
 
  480    return v.
x * v.
x + v.
y * v.
y + v.
z * v.
z;
 
 
  489  inline constexpr ARCCORE_HOST_DEVICE 
bool isNearlyZero(
const Real3& v)
 
  491    return math::isNearlyZero(v.
x) && math::isNearlyZero(v.
y) && math::isNearlyZero(v.
z);
 
 
  507    Real d = math::normL2(v);
 
 
  520  return math::mutableNormalize(*
this);
 
  523inline constexpr ARCCORE_HOST_DEVICE 
bool Real3::
 
  526  return math::isNearlyZero(*
this);
 
  529inline constexpr ARCCORE_HOST_DEVICE 
bool Real3::
 
  532  return math::isEqual(a, b);
 
  535ARCCORE_HOST_DEVICE 
inline Real Real3::
 
  538  return math::sqrt(a);
 
  541inline ARCCORE_HOST_DEVICE 
Real Real3::
 
  544  return math::normL2(*
this);
 
 
  547inline ARCCORE_HOST_DEVICE 
Real Real3::
 
  550  return math::normL2(*
this);
 
 
Vue modifiable d'un tableau d'un type T.
Vue constante d'un tableau de type T.
Classe gérant un vecteur de réel de dimension 2.
constexpr __host__ __device__ Real2()
Construit le vecteur nul.
Classe gérant un vecteur de réel de dimension 3.
constexpr __host__ __device__ void operator*=(Real b)
Multiple chaque composante du triplet par le réel b.
Real3(const Real3 &f)=default
Construit un triplet identique à f.
friend constexpr __host__ __device__ Real3 operator/(Real3 vec, Real sca)
Division par un scalaire.
Real3 & operator=(const Real3 &f)=default
Opérateur de recopie.
constexpr __host__ __device__ Real3 & operator/=(Real3 b)
Divise chaque composante du triplet par la composant correspondant de b.
constexpr __host__ __device__ Real3 operator*(Real3 b) const
Créé un triplet qui vaut ce triplet dont chaque composant a été multipliée par la composante correspo...
constexpr __host__ __device__ Real3(Real ax, Real ay, Real az)
Construit le triplet (ax,ay,az)
constexpr __host__ __device__ ArrayView< Real > view()
Retourne une vue sur les trois élements du vecteur.
constexpr __host__ __device__ Real3 & subSame(Real b)
Soustrait b à chaque composante du triplet.
friend constexpr __host__ __device__ Real3 operator*(Real3 vec, Real sca)
Multiplication par un scalaire.
constexpr __host__ __device__ Real3 operator-() const
Créé un triplet opposé au triplet actuel.
constexpr __host__ __device__ Real3 operator+(Real3 b) const
Créé un triplet qui vaut ce triplet ajouté à b.
constexpr __host__ __device__ Real3 & operator*=(Real3 b)
Multiple chaque composante du triplet par la composant correspondant de b.
constexpr __host__ __device__ bool operator!=(Real3 b) const
Compare deux triplets. Pour la notion d'égalité, voir operator==()
constexpr __host__ __device__ Real3 operator/(Real3 b) const
Créé un triplet qui vaut ce triplet dont chaque composant a été divisée par la composante corresponda...
constexpr __host__ __device__ bool operator==(Real3 b) const
Compare composant pas composante l'instance courante à b.
constexpr __host__ __device__ Real3 & mulSame(Real b)
Multiplie chaque composante du triplet par b.
constexpr __host__ __device__ Real3 & operator=(Real v)
Affecte à l'instance le triplet (v,v,v).
constexpr __host__ __device__ Real3 & add(Real3 b)
Ajoute b au triplet.
constexpr __host__ __device__ Real3(const Real3POD &f)
Construit un triplet identique à f.
friend constexpr __host__ __device__ Real3 operator*(Real sca, Real3 vec)
Multiplication par un scalaire.
constexpr __host__ __device__ Real3 & addSame(Real b)
Ajoute b à chaque composante du triplet.
constexpr __host__ __device__ Real3(Real v)
Construit l'instance avec le triplet (v,v,v).
constexpr __host__ __device__ ConstArrayView< Real > constView() const
Retourne une vue constante sur les trois élements du vecteur.
constexpr __host__ __device__ void operator/=(Real b)
Divise chaque composante du triplet par le réel b.
std::ostream & printXyz(std::ostream &o) const
Ecrit le triplet sur le flot o sous la forme (x,y,z)
constexpr __host__ __device__ Real3 & operator-=(Real3 b)
Soustrait b au triplet.
constexpr __host__ __device__ Real3(ConstArrayView< Real > av)
Construit le triplet (av[0], av[1], av[2])
friend constexpr __host__ __device__ bool operator<(Real3 v1, Real3 v2)
Opérateur de comparaison.
constexpr __host__ __device__ Real squareNormL2() const
Retourne la norme L2 au carré du triplet .
friend std::istream & operator>>(std::istream &i, Real3 &t)
Lit le triplet t à partir du flot o.
constexpr __host__ __device__ Real3(const Real2 &f)
Construit un triplet identique à f.
constexpr __host__ __device__ Real3 copy() const
Retourne une copie du triplet.
constexpr __host__ __device__ Real3 & reset()
Réinitialise le triplet avec les constructeurs par défaut.
constexpr __host__ __device__ Real3 & divSame(Real b)
Divise chaque composante du triplet par b.
constexpr __host__ __device__ Real3()
Construit le vecteur nul.
constexpr __host__ __device__ Real3 & sub(Real3 b)
Soustrait b au triplet.
__host__ __device__ Real3 absolute() const
Valeur absolue composante par composante.
constexpr __host__ __device__ Real3 & operator+=(Real3 b)
Ajoute b au triplet.
constexpr __host__ __device__ Real3 operator-(Real3 b) const
Créé un triplet qui vaut b soustrait de ce triplet.
constexpr __host__ __device__ Real3 & div(Real3 b)
Divise chaque composante du triplet par la composant correspondant de b.
constexpr __host__ __device__ Real3 & assign(Real ax, Real ay, Real az)
Affecte à l'instance le triplet (ax,ay,az)
constexpr __host__ __device__ Real abs2() const
Retourne la norme au carré du triplet .
constexpr __host__ __device__ Real3 & assign(Real3 f)
Copie le triplet f.
friend std::ostream & operator<<(std::ostream &o, Real3 t)
Ecrit le triplet t sur le flot o.
constexpr __host__ __device__ Real3 & mul(Real3 b)
Multiple chaque composante du triplet par la composant correspondant de b.
Espace de nom pour les fonctions mathématiques.
constexpr __host__ __device__ Real squareNormL2(const Real2 &v)
Retourne la norme au carré du couple .
__host__ __device__ double sqrt(double v)
Racine carrée de v.
bool isZero(const BuiltInProxy< _Type > &a)
Teste si une valeur est exactement égale à zéro.
Real2 & mutableNormalize(Real2 &v)
Normalise le couple.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
Int32 Integer
Type représentant un entier.
double Real
Type représentant un réel.
Real y
deuxième composante du couple
Real x
première composante du couple
__host__ __device__ Real & operator()(Integer i)
__host__ __device__ Real operator[](Integer i) const
Real y
deuxième composante du triplet
Real z
troisième composante du triplet
__host__ __device__ Real operator()(Integer i) const
__host__ __device__ void setComponent(Integer i, Real value)
Positionne la i-ème composante à value.
__host__ __device__ Real & operator[](Integer i)
Real x
première composante du triplet