12#ifndef ARCANE_UTILS_REAL2_H
13#define ARCANE_UTILS_REAL2_H
17#include "arcane/utils/Numeric.h"
48 ARCCORE_CHECK_AT(i, 2);
63 ARCCORE_CHECK_AT(i, 2);
78 ARCCORE_CHECK_AT(i, 2);
93 ARCCORE_CHECK_AT(i, 2);
100 ARCCORE_CHECK_AT(i, 2);
125 constexpr ARCCORE_HOST_DEVICE
Real2()
156 inline constexpr ARCCORE_HOST_DEVICE
explicit Real2(
const Real3& v);
177 constexpr ARCCORE_HOST_DEVICE
static Real2 null() {
return Real2(0., 0.); }
182 constexpr ARCCORE_HOST_DEVICE
Real2 copy()
const {
return (*
this); }
223 std::istream& assign(std::istream& i);
225 std::ostream& print(std::ostream& o)
const;
227 std::ostream& printXy(std::ostream& o)
const;
325 return Real2(vec.
x * sca, vec.
y * sca);
331 return Real2(vec.
x * sca, vec.
y * sca);
337 return Real2(vec.
x / sca, vec.
y / sca);
351 return (v1.
x < v2.
x);
392 ARCCORE_DEPRECATED_2021(
"Use math::squareNormL2(*this) instead")
396 ARCCORE_DEPRECATED_2021(
"Use math::normL2(*this) instead")
397 inline ARCCORE_HOST_DEVICE
Real abs() const;
406 inline constexpr ARCCORE_HOST_DEVICE
bool isNearlyZero() const;
410 ARCCORE_HOST_DEVICE
Real normL2() const;
419 ARCANE_DEPRECATED_REASON(
"Y2024: Use math::mutableNormalize(Real2&) instead")
420 inline
Real2& normalize();
429 constexpr ARCCORE_HOST_DEVICE static
bool _eq(
Real a,
Real b);
431 ARCCORE_HOST_DEVICE static
Real _sqrt(
Real a);
445 inline constexpr ARCCORE_HOST_DEVICE
bool isNearlyZero(
const Real2& v)
447 return math::isNearlyZero(v.
x) && math::isNearlyZero(v.
y);
453 return v.
x * v.
x + v.
y * v.
y;
471 Real d = math::normL2(v);
481inline constexpr ARCCORE_HOST_DEVICE
bool Real2::
484 return math::isNearlyZero(*
this);
487inline constexpr ARCCORE_HOST_DEVICE
bool Real2::
493inline ARCCORE_HOST_DEVICE
Real Real2::
499inline ARCCORE_HOST_DEVICE
Real Real2::
502 return math::normL2(*
this);
511inline ARCCORE_HOST_DEVICE
Real Real2::
514 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 operator-() const
Créé un couple opposé au couple actuel.
std::ostream & printXy(std::ostream &o) const
Ecrit le couple sur le flot o sous la forme (x,y)
constexpr __host__ __device__ Real2 & operator-=(Real2 b)
Soustrait b au couple.
constexpr __host__ __device__ bool operator!=(Real2 b) const
Compare deux couples. Pour la notion d'égalité, voir operator==()
constexpr __host__ __device__ Real2 & operator=(Real v)
Affecte à l'instance le couple (v,v).
constexpr __host__ __device__ Real squareNormL2() const
Retourne la norme au carré du couple .
constexpr __host__ __device__ bool operator==(Real2 b) const
Compare composant pas composante l'instance courante à b.
constexpr __host__ __device__ Real2 & addSame(Real b)
Ajoute b à chaque composante du couple.
friend std::ostream & operator<<(std::ostream &o, Real2 t)
Ecrit le couple t sur le flot o.
constexpr __host__ __device__ Real2 & reset()
Réinitialise le couple avec les constructeurs par défaut.
constexpr __host__ __device__ Real2()
Construit le vecteur nul.
friend std::istream & operator>>(std::istream &i, Real2 &t)
Lit le couple t à partir du flot o.
constexpr __host__ __device__ Real2 & operator/=(Real2 b)
Divise chaque composante du couple par la composant correspondant de b.
__host__ __device__ Real2 absolute() const
Valeur absolue composante par composante.
constexpr __host__ __device__ Real2 & operator*=(Real2 b)
Multiplie chaque composante du couple par la composant correspondant de b.
constexpr __host__ __device__ Real2 & sub(Real2 b)
Soustrait b au couple.
constexpr __host__ __device__ Real2 operator*(Real2 b) const
Créé un couple qui vaut ce couple dont chaque composant a été multipliée par la composante correspond...
constexpr __host__ __device__ Real2(Real v)
Construit l'instance avec le triplet (v,v,v).
constexpr __host__ __device__ Real2(ConstArrayView< Real > av)
Construit le couplet (av[0], av[1])
constexpr __host__ __device__ Real2 & subSame(Real b)
Soustrait b à chaque composante du couple.
constexpr __host__ __device__ Real2 & assign(Real2 f)
Copie le couple f.
constexpr __host__ __device__ Real2 & div(Real2 b)
Divise chaque composante du couple par la composant correspondant de b.
constexpr __host__ __device__ Real2 & mul(Real2 b)
Multiple chaque composante du couple par la composant correspondant de b.
constexpr __host__ __device__ ConstArrayView< Real > constView() const
Retourne une vue constante sur les deux élements du vecteur.
constexpr __host__ __device__ Real2 & add(Real2 b)
Ajoute b au couple.
constexpr __host__ static __device__ bool _eq(Real a, Real b)
Compare les valeurs de a et b avec le comparateur TypeEqualT.
constexpr __host__ __device__ ArrayView< Real > view()
Retourne une vue sur les deux élements du vecteur.
constexpr __host__ __device__ Real2 operator/(Real2 b) const
Créé un couple qui vaut ce couple dont chaque composant a été divisée par la composante correspondant...
friend constexpr __host__ __device__ Real2 operator*(Real sca, Real2 vec)
Multiplication par un scalaire.
constexpr __host__ __device__ Real2 operator+(Real2 b) const
Créé un couple qui vaut ce couple ajouté à b.
constexpr __host__ __device__ Real2(const Real2POD &f)
Construit un coupe identique à f.
constexpr __host__ __device__ Real2 operator-(Real2 b) const
Créé un couple qui vaut b soustrait de ce couple.
constexpr __host__ __device__ Real2 copy() const
Retourne une copie du couple.
constexpr __host__ __device__ void operator/=(Real b)
Divise chaque composante du couple par le réel b.
__host__ __device__ Real abs2() const
Retourne la norme au carré du couple .
friend constexpr __host__ __device__ Real2 operator/(Real2 vec, Real sca)
Division par un scalaire.
friend constexpr __host__ __device__ bool operator<(Real2 v1, Real2 v2)
Opérateur de comparaison.
constexpr __host__ __device__ Real2 & mulSame(Real b)
Multiplie chaque composante du couple par b.
constexpr __host__ __device__ Real2(Real ax, Real ay)
Construit le couplet (ax,ay)
constexpr __host__ __device__ Real2 & operator+=(Real2 b)
Ajoute b au couple.
constexpr __host__ __device__ void operator*=(Real b)
Multiplie chaque composante du couple par le réel b.
constexpr __host__ __device__ Real2 & assign(Real ax, Real ay)
Affecte à l'instance le couple (ax,ay,az)
constexpr __host__ __device__ Real2 & divSame(Real b)
Divise chaque composante du couple par b.
Real2(const Real2 &f)=default
Construit un couple identique à f.
friend constexpr __host__ __device__ Real2 operator*(Real2 vec, Real sca)
Multiplication par un scalaire.
Classe gérant un vecteur de réel de dimension 3.
Espace de nom pour l'utilisation des accélérateurs.
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.
constexpr __host__ __device__ bool isEqual(const _Type &a, const _Type &b)
Teste l'égalité bit à bit entre deux valeurs.
-*- 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) const
__host__ __device__ void setComponent(Integer i, Real value)
Positionne la i-ème composante à value.
__host__ __device__ Real & operator()(Integer i)
__host__ __device__ Real operator()(Integer i) const
__host__ __device__ Real & operator[](Integer i)