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);
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::
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__ static __device__ bool _eq(Real a, Real b)
Compare les valeurs de a et b avec le comparateur TypeEqualT.
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)