12#ifndef ARCANE_DATATYPE_REAL2_H
13#define ARCANE_DATATYPE_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);
169 constexpr ARCCORE_HOST_DEVICE
static Real2 null() {
return Real2(0., 0.); }
174 constexpr ARCCORE_HOST_DEVICE
Real2 copy()
const {
return (*
this); }
203 std::istream& assign(std::istream& i);
205 std::ostream& print(std::ostream& o)
const;
207 std::ostream& printXy(std::ostream& o)
const;
305 return Real2(vec.
x * sca, vec.
y * sca);
311 return Real2(vec.
x * sca, vec.
y * sca);
317 return Real2(vec.
x / sca, vec.
y / sca);
331 return (v1.
x < v2.
x);
354 return _eq(
x, b.
x) && _eq(
y, b.
y);
372 ARCCORE_DEPRECATED_2021(
"Use math::squareNormL2(*this) instead")
376 ARCCORE_DEPRECATED_2021(
"Use math::normL2(*this) instead")
377 inline ARCCORE_HOST_DEVICE
Real abs() const;
386 inline constexpr ARCCORE_HOST_DEVICE
bool isNearlyZero() const;
390 ARCCORE_HOST_DEVICE
Real normL2() const;
399 ARCANE_DEPRECATED_REASON(
"Y2024: Use math::mutableNormalize(Real2&) instead")
400 inline
Real2& normalize();
409 constexpr ARCCORE_HOST_DEVICE static
bool _eq(
Real a,
Real b);
411 ARCCORE_HOST_DEVICE static
Real _sqrt(
Real a);
425 inline constexpr ARCCORE_HOST_DEVICE
bool isNearlyZero(
const Real2& v)
427 return math::isNearlyZero(v.
x) && math::isNearlyZero(v.
y);
433 return v.
x * v.
x + v.
y * v.
y;
451 Real d = math::normL2(v);
461inline constexpr ARCCORE_HOST_DEVICE
bool Real2::
464 return math::isNearlyZero(*
this);
467inline constexpr ARCCORE_HOST_DEVICE
bool Real2::
473inline ARCCORE_HOST_DEVICE Real Real2::
476 return math::sqrt(a);
479inline ARCCORE_HOST_DEVICE
Real Real2::
482 return math::normL2(*
this);
491inline ARCCORE_HOST_DEVICE
Real Real2::
494 return math::normL2(*
this);
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 & 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__ Real2 & add(Real2 b)
Ajoute b au couple.
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 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)