Arcane  v3.16.6.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
Real2.h
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2025 CEA (www.cea.fr) IFPEN (www.ifpenergiesnouvelles.com)
4// See the top-level COPYRIGHT file for details.
5// SPDX-License-Identifier: Apache-2.0
6//-----------------------------------------------------------------------------
7/*---------------------------------------------------------------------------*/
8/* Real2.h (C) 2000-2025 */
9/* */
10/* Vecteur à 2 dimensions de 'Real'. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_UTILS_REAL2_H
13#define ARCANE_UTILS_REAL2_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/utils/Numeric.h"
18
19#include <iosfwd>
20
21/*---------------------------------------------------------------------------*/
22/*---------------------------------------------------------------------------*/
23
24namespace Arcane
25{
26
27/*---------------------------------------------------------------------------*/
28/*---------------------------------------------------------------------------*/
29
31{
32 public:
33
34 Real x; //!< première composante du couple
35 Real y; //!< deuxième composante du couple
36
37 /*!
38 * Accès en lecture seule à la @a i eme composante du Real2POD
39 *
40 * @note ne fonctionne que pour x, y ordonnées dans le POD
41 *
42 * @param i numéro de la composante à retourner
43 *
44 * @return (&x)[i]
45 */
46 ARCCORE_HOST_DEVICE Real operator[](Integer i) const
47 {
48 ARCCORE_CHECK_AT(i, 2);
49 return (&x)[i];
50 }
51
52 /*!
53 * Accès en lecture seule à la @a i eme composante du Real2POD
54 *
55 * @note ne fonctionne que pour x, y ordonnées dans le POD
56 *
57 * @param i numéro de la composante à retourner
58 *
59 * @return (&x)[i]
60 */
61 ARCCORE_HOST_DEVICE Real operator()(Integer i) const
62 {
63 ARCCORE_CHECK_AT(i, 2);
64 return (&x)[i];
65 }
66
67 /*!
68 * Accès à la @a i eme composante du Real2POD
69 *
70 * @note ne fonctionne que pour x, y ordonnées dans le POD
71 *
72 * @param i numéro de la composante à retourner
73 *
74 * @return (&x)[i]
75 */
76 ARCCORE_HOST_DEVICE Real& operator[](Integer i)
77 {
78 ARCCORE_CHECK_AT(i, 2);
79 return (&x)[i];
80 }
81
82 /*!
83 * Accès à la @a i eme composante du Real2POD
84 *
85 * @note ne fonctionne que pour x, y ordonnées dans le POD
86 *
87 * @param i numéro de la composante à retourner
88 *
89 * @return (&x)[i]
90 */
91 ARCCORE_HOST_DEVICE Real& operator()(Integer i)
92 {
93 ARCCORE_CHECK_AT(i, 2);
94 return (&x)[i];
95 }
96
97 //! Positionne la \a i-ème composante à \a value
98 ARCCORE_HOST_DEVICE void setComponent(Integer i, Real value)
99 {
100 ARCCORE_CHECK_AT(i, 2);
101 (&x)[i] = value;
102 }
103};
104
105/*---------------------------------------------------------------------------*/
106/*---------------------------------------------------------------------------*/
107/*!
108 * \brief Classe gérant un vecteur de réel de dimension 2.
109
110 Le vecteur comprend deuxs composantes \a x et \a y qui sont du
111 type \b Real.
112
113 \code
114 Real2 value (1.0,2.3); // Créé un couple (x=1.0, y=2.3)
115 cout << value.x; // Imprime la composante x
116 value.y += 3.2; // Ajoute 3.2 à la composante \b y
117 \endcode
118 */
119class ARCANE_UTILS_EXPORT Real2
120: public Real2POD
121{
122 public:
123
124 //! Construit le vecteur nul.
125 constexpr ARCCORE_HOST_DEVICE Real2()
126 : Real2POD()
127 {
128 x = 0.;
129 y = 0.;
130 }
131 //! Construit le couplet (ax,ay)
132 constexpr ARCCORE_HOST_DEVICE Real2(Real ax, Real ay)
133 : Real2POD()
134 {
135 x = ax;
136 y = ay;
137 }
138 //! Construit un couple identique à \a f
139 Real2(const Real2& f) = default;
140 //! Construit un coupe identique à \a f
141 constexpr ARCCORE_HOST_DEVICE explicit Real2(const Real2POD& f)
142 : Real2POD()
143 {
144 x = f.x;
145 y = f.y;
146 }
147
148 //! Construit l'instance avec le triplet (v,v,v).
149 constexpr ARCCORE_HOST_DEVICE explicit Real2(Real v)
150 : Real2POD()
151 {
152 x = y = v;
153 }
154
155 //! Construit l'instance en premier les deux premières composantes de Real3.
156 inline constexpr ARCCORE_HOST_DEVICE explicit Real2(const Real3& v);
157
158 //! Construit le couplet (av[0], av[1])
159 constexpr ARCCORE_HOST_DEVICE Real2(ConstArrayView<Real> av)
160 : Real2POD()
161 {
162 x = av[0];
163 y = av[1];
164 }
165
166 Real2& operator=(const Real2& f) = default;
167
168 //! Affecte à l'instance le couple (v,v).
169 constexpr ARCCORE_HOST_DEVICE Real2& operator=(Real v)
170 {
171 x = y = v;
172 return (*this);
173 }
174
175 public:
176
177 constexpr ARCCORE_HOST_DEVICE static Real2 null() { return Real2(0., 0.); }
178
179 public:
180
181 //! Retourne une copie du couple.
182 constexpr ARCCORE_HOST_DEVICE Real2 copy() const { return (*this); }
183 //! Réinitialise le couple avec les constructeurs par défaut.
184 constexpr ARCCORE_HOST_DEVICE Real2& reset()
185 {
186 x = y = 0.0;
187 return (*this);
188 }
189 //! Affecte à l'instance le couple (ax,ay,az)
190 constexpr ARCCORE_HOST_DEVICE Real2& assign(Real ax, Real ay)
191 {
192 x = ax;
193 y = ay;
194 return (*this);
195 }
196 //! Copie le couple \a f
197 constexpr ARCCORE_HOST_DEVICE Real2& assign(Real2 f)
198 {
199 x = f.x;
200 y = f.y;
201 return (*this);
202 }
203
204 //! Retourne une vue sur les deux élements du vecteur.
205 constexpr ARCCORE_HOST_DEVICE ArrayView<Real> view()
206 {
207 return { 2, &x };
208 }
209
210 //! Retourne une vue constante sur les deux élements du vecteur.
211 constexpr ARCCORE_HOST_DEVICE ConstArrayView<Real> constView() const
212 {
213 return { 2, &x };
214 }
215
216 //! Valeur absolue composante par composante.
217 ARCCORE_HOST_DEVICE Real2 absolute() const { return Real2(math::abs(x), math::abs(y)); }
218
219 /*!
220 * \brief Lit un couple sur le flot \a i
221 * Le couple est lu sous la forme de trois valeur de type #value_type.
222 */
223 std::istream& assign(std::istream& i);
224 //! Ecrit le couple sur le flot \a o lisible par un assign()
225 std::ostream& print(std::ostream& o) const;
226 //! Ecrit le couple sur le flot \a o sous la forme (x,y)
227 std::ostream& printXy(std::ostream& o) const;
228
229 //! Ajoute \a b au couple
230 constexpr ARCCORE_HOST_DEVICE Real2& add(Real2 b)
231 {
232 x += b.x;
233 y += b.y;
234 return (*this);
235 }
236 //! Soustrait \a b au couple
237 constexpr ARCCORE_HOST_DEVICE Real2& sub(Real2 b)
238 {
239 x -= b.x;
240 y -= b.y;
241 return (*this);
242 }
243 //! Multiple chaque composante du couple par la composant correspondant de \a b
244 constexpr ARCCORE_HOST_DEVICE Real2& mul(Real2 b)
245 {
246 x *= b.x;
247 y *= b.y;
248 return (*this);
249 }
250 //! Divise chaque composante du couple par la composant correspondant de \a b
251 constexpr ARCCORE_HOST_DEVICE Real2& div(Real2 b)
252 {
253 x /= b.x;
254 y /= b.y;
255 return (*this);
256 }
257 //! Ajoute \a b à chaque composante du couple
258 constexpr ARCCORE_HOST_DEVICE Real2& addSame(Real b)
259 {
260 x += b;
261 y += b;
262 return (*this);
263 }
264 //! Soustrait \a b à chaque composante du couple
265 constexpr ARCCORE_HOST_DEVICE Real2& subSame(Real b)
266 {
267 x -= b;
268 y -= b;
269 return (*this);
270 }
271 //! Multiplie chaque composante du couple par \a b
272 constexpr ARCCORE_HOST_DEVICE Real2& mulSame(Real b)
273 {
274 x *= b;
275 y *= b;
276 return (*this);
277 }
278 //! Divise chaque composante du couple par \a b
279 constexpr ARCCORE_HOST_DEVICE Real2& divSame(Real b)
280 {
281 x /= b;
282 y /= b;
283 return (*this);
284 }
285 //! Ajoute \a b au couple.
286 constexpr ARCCORE_HOST_DEVICE Real2& operator+=(Real2 b) { return add(b); }
287 //! Soustrait \a b au couple
288 constexpr ARCCORE_HOST_DEVICE Real2& operator-=(Real2 b) { return sub(b); }
289 //! Multiplie chaque composante du couple par la composant correspondant de \a b
290 constexpr ARCCORE_HOST_DEVICE Real2& operator*=(Real2 b) { return mul(b); }
291 //! Multiplie chaque composante du couple par le réel \a b
292 constexpr ARCCORE_HOST_DEVICE void operator*=(Real b)
293 {
294 x *= b;
295 y *= b;
296 }
297 //! Divise chaque composante du couple par la composant correspondant de \a b
298 constexpr ARCCORE_HOST_DEVICE Real2& operator/=(Real2 b) { return div(b); }
299 //! Divise chaque composante du couple par le réel \a b
300 constexpr ARCCORE_HOST_DEVICE void operator/=(Real b)
301 {
302 x /= b;
303 y /= b;
304 }
305 //! Créé un couple qui vaut ce couple ajouté à \a b
306 constexpr ARCCORE_HOST_DEVICE Real2 operator+(Real2 b) const { return Real2(x + b.x, y + b.y); }
307 //! Créé un couple qui vaut \a b soustrait de ce couple
308 constexpr ARCCORE_HOST_DEVICE Real2 operator-(Real2 b) const { return Real2(x - b.x, y - b.y); }
309 //! Créé un couple opposé au couple actuel
310 constexpr ARCCORE_HOST_DEVICE Real2 operator-() const { return Real2(-x, -y); }
311 /*!
312 * \brief Créé un couple qui vaut ce couple dont chaque composant a été
313 * multipliée par la composante correspondante de \a b.
314 */
315 constexpr ARCCORE_HOST_DEVICE Real2 operator*(Real2 b) const { return Real2(x * b.x, y * b.y); }
316 /*!
317 * \brief Créé un couple qui vaut ce couple dont chaque composant a été divisée
318 * par la composante correspondante de \a b.
319 */
320 constexpr ARCCORE_HOST_DEVICE Real2 operator/(Real2 b) const { return Real2(x / b.x, y / b.y); }
321
322 //! Multiplication par un scalaire.
323 friend constexpr ARCCORE_HOST_DEVICE Real2 operator*(Real sca, Real2 vec)
324 {
325 return Real2(vec.x * sca, vec.y * sca);
326 }
327
328 //! Multiplication par un scalaire.
329 friend constexpr ARCCORE_HOST_DEVICE Real2 operator*(Real2 vec, Real sca)
330 {
331 return Real2(vec.x * sca, vec.y * sca);
332 }
333
334 //! Division par un scalaire.
335 friend constexpr ARCCORE_HOST_DEVICE Real2 operator/(Real2 vec, Real sca)
336 {
337 return Real2(vec.x / sca, vec.y / sca);
338 }
339
340 /*!
341 * \brief Opérateur de comparaison.
342 *
343 * Cet opérateur permet de trier les Real2 pour les utiliser par exemple
344 * dans les std::set
345 */
346 friend constexpr ARCCORE_HOST_DEVICE bool operator<(Real2 v1, Real2 v2)
347 {
348 if (v1.x == v2.x) {
349 return v1.y < v2.y;
350 }
351 return (v1.x < v2.x);
352 }
353
354 //! Ecrit le couple \a t sur le flot \a o.
355 friend std::ostream& operator<<(std::ostream& o, Real2 t)
356 {
357 return t.printXy(o);
358 }
359
360 //! Lit le couple \a t à partir du flot \a o.
361 friend std::istream& operator>>(std::istream& i, Real2& t)
362 {
363 return t.assign(i);
364 }
365
366 /*!
367 * \brief Compare composant pas composante l'instance courante à \a b.
368 *
369 * \retval true si this.x==b.x et this.y==b.y.
370 * \retval false sinon.
371 */
372 constexpr ARCCORE_HOST_DEVICE bool operator==(Real2 b) const
373 {
374 return _eq(x, b.x) && _eq(y, b.y);
375 }
376
377 /*!
378 * \brief Compare deux couples.
379 * Pour la notion d'égalité, voir operator==()
380 * \retval true si les deux couples sont différents,
381 * \retval false sinon.
382 */
383 constexpr ARCCORE_HOST_DEVICE bool operator!=(Real2 b) const { return !operator==(b); }
384
385 public:
386
387 //! Retourne la norme au carré du couple \f$x^2+y^2+z^2\f$
388 // TODO: rendre obsolète mi-2025: ARCANE_DEPRECATED_REASON("Y2024: Use math::squareNormL2(*this) instead")
389 constexpr ARCCORE_HOST_DEVICE Real squareNormL2() const { return x * x + y * y; }
390
391 //! Retourne la norme au carré du couple \f$x^2+y^2+z^2\f$
392 ARCCORE_DEPRECATED_2021("Use math::squareNormL2(*this) instead")
393 ARCCORE_HOST_DEVICE Real abs2() const { return x * x + y * y; }
394
395 //! Retourne la norme du couple \f$\sqrt{x^2+y^2+z^2}\f$
396 ARCCORE_DEPRECATED_2021("Use math::normL2(*this) instead")
397 inline ARCCORE_HOST_DEVICE Real abs() const;
398
399 /*!
400 * \brief Indique si l'instance est proche de l'instance nulle.
401 *
402 * \retval true si math::isNearlyZero() est vrai pour chaque composante.
403 * \retval false sinon.
404 */
405 // TODO: rendre obsolète mi-2025: ARCANE_DEPRECATED_REASON("Y2024: Use math::isNearlyZero(const Real2&) instead")
406 inline constexpr ARCCORE_HOST_DEVICE bool isNearlyZero() const;
407
408 //! Retourne la norme du couple \f$\sqrt{x^2+y^2+z^2}\f$
409 // TODO: rendre obsolète mi-2025: ARCANE_DEPRECATED_REASON("Y2024: Use math::normL2(const Real2&) instead")
410 ARCCORE_HOST_DEVICE Real normL2() const;
411
412 /*!
413 * \brief Normalise le couple.
414 *
415 * Si le couple est non nul, divise chaque composante par la norme du couple
416 * (abs()), de telle sorte qu'après l'appel à cette méthode, abs() valent \a 1.
417 * Si le couple est nul, ne fait rien.
418 */
419 ARCANE_DEPRECATED_REASON("Y2024: Use math::mutableNormalize(Real2&) instead")
420 inline Real2& normalize();
421
422 private:
423
424 /*!
425 * \brief Compare les valeurs de \a a et \a b avec le comparateur TypeEqualT
426 * \retval true si \a a et \a b sont égaux,
427 * \retval false sinon.
428 */
429 constexpr ARCCORE_HOST_DEVICE static bool _eq(Real a, Real b);
430 //! Retourne la racine carrée de \a a
431 ARCCORE_HOST_DEVICE static Real _sqrt(Real a);
432};
433
434/*---------------------------------------------------------------------------*/
435/*---------------------------------------------------------------------------*/
436
437namespace math
438{
439 /*!
440 * \brief Indique si l'instance est proche de l'instance nulle.
441 *
442 * \retval true si math::isNearlyZero() est vrai pour chaque composante.
443 * \retval false sinon.
444 */
445 inline constexpr ARCCORE_HOST_DEVICE bool isNearlyZero(const Real2& v)
446 {
447 return math::isNearlyZero(v.x) && math::isNearlyZero(v.y);
448 }
449
450 //! Retourne la norme au carré du couple \f$x^2+y^2+z^2\f$
451 inline constexpr ARCCORE_HOST_DEVICE Real squareNormL2(const Real2& v)
452 {
453 return v.x * v.x + v.y * v.y;
454 }
455
456 //! Retourne la norme du couple \f$\sqrt{x^2+y^2+z^2}\f$
457 inline ARCCORE_HOST_DEVICE Real normL2(const Real2& v)
458 {
460 }
461
462 /*!
463 * \brief Normalise le couple.
464 *
465 * Si le couple est non nul, divise chaque composante par la norme du couple
466 * (abs()), de telle sorte qu'après l'appel à cette méthode, abs() valent \a 1.
467 * Si le couple est nul, ne fait rien.
468 */
470 {
471 Real d = math::normL2(v);
472 if (!math::isZero(d))
473 v.divSame(d);
474 return v;
475 }
476} // namespace math
477
478/*---------------------------------------------------------------------------*/
479/*---------------------------------------------------------------------------*/
480
481inline constexpr ARCCORE_HOST_DEVICE bool Real2::
482isNearlyZero() const
483{
484 return math::isNearlyZero(*this);
485}
486
487inline constexpr ARCCORE_HOST_DEVICE bool Real2::
488_eq(Real a, Real b)
489{
490 return math::isEqual(a, b);
491}
492
493inline ARCCORE_HOST_DEVICE Real Real2::
494_sqrt(Real a)
495{
496 return math::sqrt(a);
497}
498
499inline ARCCORE_HOST_DEVICE Real Real2::
500normL2() const
501{
502 return math::normL2(*this);
503}
504
505inline Real2& Real2::
506normalize()
507{
508 return math::mutableNormalize(*this);
509}
510
511inline ARCCORE_HOST_DEVICE Real Real2::
512abs() const
513{
514 return math::normL2(*this);
515}
516
517/*---------------------------------------------------------------------------*/
518/*---------------------------------------------------------------------------*/
519
520} // End namespace Arcane
521
522/*---------------------------------------------------------------------------*/
523/*---------------------------------------------------------------------------*/
524
525#endif
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.
Definition Real2.h:121
constexpr __host__ __device__ Real2 operator-() const
Créé un couple opposé au couple actuel.
Definition Real2.h:310
std::ostream & printXy(std::ostream &o) const
Ecrit le couple sur le flot o sous la forme (x,y)
Definition Real2.cc:47
constexpr __host__ __device__ Real2 & operator-=(Real2 b)
Soustrait b au couple.
Definition Real2.h:288
constexpr __host__ __device__ bool operator!=(Real2 b) const
Compare deux couples. Pour la notion d'égalité, voir operator==()
Definition Real2.h:383
constexpr __host__ __device__ Real2 & operator=(Real v)
Affecte à l'instance le couple (v,v).
Definition Real2.h:169
constexpr __host__ __device__ Real squareNormL2() const
Retourne la norme au carré du couple .
Definition Real2.h:389
constexpr __host__ __device__ bool operator==(Real2 b) const
Compare composant pas composante l'instance courante à b.
Definition Real2.h:372
constexpr __host__ __device__ Real2 & addSame(Real b)
Ajoute b à chaque composante du couple.
Definition Real2.h:258
friend std::ostream & operator<<(std::ostream &o, Real2 t)
Ecrit le couple t sur le flot o.
Definition Real2.h:355
constexpr __host__ __device__ Real2 & reset()
Réinitialise le couple avec les constructeurs par défaut.
Definition Real2.h:184
constexpr __host__ __device__ Real2()
Construit le vecteur nul.
Definition Real2.h:125
friend std::istream & operator>>(std::istream &i, Real2 &t)
Lit le couple t à partir du flot o.
Definition Real2.h:361
constexpr __host__ __device__ Real2 & operator/=(Real2 b)
Divise chaque composante du couple par la composant correspondant de b.
Definition Real2.h:298
__host__ __device__ Real2 absolute() const
Valeur absolue composante par composante.
Definition Real2.h:217
constexpr __host__ __device__ Real2 & operator*=(Real2 b)
Multiplie chaque composante du couple par la composant correspondant de b.
Definition Real2.h:290
constexpr __host__ __device__ Real2 & sub(Real2 b)
Soustrait b au couple.
Definition Real2.h:237
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...
Definition Real2.h:315
constexpr __host__ __device__ Real2(Real v)
Construit l'instance avec le triplet (v,v,v).
Definition Real2.h:149
constexpr __host__ __device__ Real2(ConstArrayView< Real > av)
Construit le couplet (av[0], av[1])
Definition Real2.h:159
constexpr __host__ __device__ Real2 & subSame(Real b)
Soustrait b à chaque composante du couple.
Definition Real2.h:265
constexpr __host__ __device__ Real2 & assign(Real2 f)
Copie le couple f.
Definition Real2.h:197
constexpr __host__ __device__ Real2 & div(Real2 b)
Divise chaque composante du couple par la composant correspondant de b.
Definition Real2.h:251
constexpr __host__ __device__ Real2 & mul(Real2 b)
Multiple chaque composante du couple par la composant correspondant de b.
Definition Real2.h:244
constexpr __host__ __device__ ConstArrayView< Real > constView() const
Retourne une vue constante sur les deux élements du vecteur.
Definition Real2.h:211
constexpr __host__ __device__ Real2 & add(Real2 b)
Ajoute b au couple.
Definition Real2.h:230
constexpr __host__ __device__ ArrayView< Real > view()
Retourne une vue sur les deux élements du vecteur.
Definition Real2.h:205
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...
Definition Real2.h:320
friend constexpr __host__ __device__ Real2 operator*(Real sca, Real2 vec)
Multiplication par un scalaire.
Definition Real2.h:323
constexpr __host__ __device__ Real2 operator+(Real2 b) const
Créé un couple qui vaut ce couple ajouté à b.
Definition Real2.h:306
constexpr __host__ __device__ Real2(const Real2POD &f)
Construit un coupe identique à f.
Definition Real2.h:141
constexpr __host__ __device__ Real2 operator-(Real2 b) const
Créé un couple qui vaut b soustrait de ce couple.
Definition Real2.h:308
constexpr __host__ __device__ Real2 copy() const
Retourne une copie du couple.
Definition Real2.h:182
constexpr __host__ __device__ void operator/=(Real b)
Divise chaque composante du couple par le réel b.
Definition Real2.h:300
__host__ __device__ Real abs2() const
Retourne la norme au carré du couple .
Definition Real2.h:393
friend constexpr __host__ __device__ Real2 operator/(Real2 vec, Real sca)
Division par un scalaire.
Definition Real2.h:335
friend constexpr __host__ __device__ bool operator<(Real2 v1, Real2 v2)
Opérateur de comparaison.
Definition Real2.h:346
constexpr __host__ __device__ Real2 & mulSame(Real b)
Multiplie chaque composante du couple par b.
Definition Real2.h:272
constexpr __host__ __device__ Real2(Real ax, Real ay)
Construit le couplet (ax,ay)
Definition Real2.h:132
constexpr __host__ __device__ Real2 & operator+=(Real2 b)
Ajoute b au couple.
Definition Real2.h:286
constexpr __host__ __device__ void operator*=(Real b)
Multiplie chaque composante du couple par le réel b.
Definition Real2.h:292
constexpr __host__ __device__ Real2 & assign(Real ax, Real ay)
Affecte à l'instance le couple (ax,ay,az)
Definition Real2.h:190
constexpr __host__ __device__ Real2 & divSame(Real b)
Divise chaque composante du couple par b.
Definition Real2.h:279
Real2(const Real2 &f)=default
Construit un couple identique à f.
friend constexpr __host__ __device__ Real2 operator*(Real2 vec, Real sca)
Multiplication par un scalaire.
Definition Real2.h:329
Classe gérant un vecteur de réel de dimension 3.
Definition Real3.h:132
Espace de nom pour les fonctions mathématiques.
Definition MathUtils.h:41
constexpr __host__ __device__ Real squareNormL2(const Real2 &v)
Retourne la norme au carré du couple .
Definition Real2.h:451
__host__ __device__ double sqrt(double v)
Racine carrée de v.
Definition Math.h:135
bool isZero(const BuiltInProxy< _Type > &a)
Teste si une valeur est exactement égale à zéro.
Real2 & mutableNormalize(Real2 &v)
Normalise le couple.
Definition Real2.h:469
constexpr __host__ __device__ bool isEqual(const _Type &a, const _Type &b)
Teste l'égalité bit à bit entre deux valeurs.
Definition Numeric.h:253
-*- 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
Definition Real2.h:35
Real x
première composante du couple
Definition Real2.h:34
__host__ __device__ Real operator[](Integer i) const
Definition Real2.h:46
__host__ __device__ void setComponent(Integer i, Real value)
Positionne la i-ème composante à value.
Definition Real2.h:98
__host__ __device__ Real & operator()(Integer i)
Definition Real2.h:91
__host__ __device__ Real operator()(Integer i) const
Definition Real2.h:61
__host__ __device__ Real & operator[](Integer i)
Definition Real2.h:76