Arcane  v3.14.10.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
GeometricUtilities.h
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2022 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/* GeometricUtilities.h (C) 2000-2018 */
9/* */
10/* Fonctions utilitaires sur la géométrie. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_GEOMETRICUTILITIES_H
13#define ARCANE_GEOMETRICUTILITIES_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/utils/Real3.h"
18#include "arcane/utils/Real3x3.h"
19
20/*---------------------------------------------------------------------------*/
21/*---------------------------------------------------------------------------*/
22
23ARCANE_BEGIN_NAMESPACE
24
25/*---------------------------------------------------------------------------*/
26/*---------------------------------------------------------------------------*/
27
28class IMesh;
29
30/*---------------------------------------------------------------------------*/
31/*---------------------------------------------------------------------------*/
32/*!
33 * \brief Fonctions utilitaires sur la géométrie
34 */
35namespace GeometricUtilities
36{
37 /*!
38 * \internal
39 * \brief Classe permettant de mapper les coordonnées cartésiennes en
40 * coordonnées barycentriques.
41 *
42 * Les coordonnées barycentriques sont comprises entre -1.0 et 1.0.
43 *
44 */
45 class ARCANE_CORE_EXPORT QuadMapping
46 {
47 public:
48 QuadMapping() : m_precision(1.0e-14)
49 {
50 }
51 public:
52 Real3 m_pos[4];
53 Real m_precision;
54
55 //! Calcule les coordonnées cartésiennes à partir des coordonnées iso-barycentriques
57 {
58 Real u = iso.x;
59 Real v = iso.y;
60
61 Real x0 = (1.0-u) * (1.0-v);
62 Real x1 = (1.0+u) * (1.0-v);
63 Real x2 = (1.0+u) * (1.0+v);
64 Real x3 = (1.0-u) * (1.0+v);
65
66 return 0.25 * (m_pos[0] * x0 + m_pos[1] * x1 + m_pos[2] * x2 + m_pos[3] * x3);
67 }
68 Real3x3 evaluateGradient(Real3 iso) const
69 {
70 Real u = iso.x;
71 Real v = iso.y;
72
73 Real t1 = 0.25 * ( v - 1.0);
74 Real t2 = 0.25 * ( v + 1.0);
75 Real t3 = 0.25 * ( u - 1.0);
76 Real t4 = 0.25 * (-u - 1.0);
77
78 return Real3x3(m_pos[0]*t1 - m_pos[1]*t1 + m_pos[2]*t2 - m_pos[3]*t2,
79 m_pos[0]*t3 + m_pos[1]*t4 - m_pos[2]*t4 - m_pos[3]*t3,
80 Real3::null());
81 }
82 Real computeInverseJacobian(Real3 uvw,Real3x3& matrix);
83 bool cartesianToIso(Real3 point,Real3& uvw,ITraceMng* tm);
84 bool cartesianToIso2(Real3 point,Real3& uvw,ITraceMng* tm);
85 Real3 normal();
86 private:
87 Real3 _normal();
88 };
89
90 /*!
91 * \internal
92 * \brief Informations sur la projection d'un point sur un segment
93 * ou un triangle.
94 */
95 class ARCANE_CORE_EXPORT ProjectionInfo
96 {
97 public:
98 ProjectionInfo(Real distance,int region,Real alpha,Real beta,Real3 aprojection)
99 : m_distance(distance), m_region(region), m_alpha(alpha)
100 , m_beta(beta), m_projection(aprojection) {}
102 : m_distance(FloatInfo<Real>::maxValue()), m_region(-1)
103 , m_alpha(-1.0), m_beta(-1.0) {}
104 public:
105 //! Distance du point à sa projection
107 //! Région dans laquelle se situe la projection (0 si intérieur au segment ou au triangle)
109 //! Coordonnées barycentrique x de la projection
111 //! Coordonnées barycentrique y de la projection
112 Real m_beta;
113 //! Position de la projection
115
116 public:
117 //! Projection du point \a point au triangle défini par \a v1, \a v2 et \a v3.
118 static ProjectionInfo projection(Real3 v1,Real3 v2,Real3 v3,Real3 point);
119
120 //! Projection du point \a point au segment défini par \a v1, \a v2.
121 static ProjectionInfo projection(Real3 v1,Real3 v2,Real3 point);
122
123 /*! \brief Indique si un la projection du point \a point est à l'intérieur du triangle défini
124 * par \a v1, \a v2 et \a v3.
125 */
126 static bool isInside(Real3 v1,Real3 v2,Real3 v3,Real3 point);
127 /*! \brief Indique si un la projection du point \a point est à l'intérieur du segment défini
128 * par \a v1 et \a v2.
129 */
130 static bool isInside(Real3 v1,Real3 v2,Real3 point);
131 };
132}
133
134/*---------------------------------------------------------------------------*/
135/*---------------------------------------------------------------------------*/
136
137ARCANE_END_NAMESPACE
138
139/*---------------------------------------------------------------------------*/
140/*---------------------------------------------------------------------------*/
141
142#endif
Informations sur le type flottant.
Definition Limits.h:48
Real3 m_projection
Position de la projection.
int m_region
Région dans laquelle se situe la projection (0 si intérieur au segment ou au triangle)
Real m_alpha
Coordonnées barycentrique x de la projection.
Real m_distance
Distance du point à sa projection.
Real m_beta
Coordonnées barycentrique y de la projection.
Real3 evaluatePosition(Real3 iso) const
Calcule les coordonnées cartésiennes à partir des coordonnées iso-barycentriques.
Classe gérant un vecteur de réel de dimension 3.
Definition Real3.h:132
Classe gérant une matrice de réel de dimension 3x3.
Definition Real3x3.h:66
Interface du gestionnaire de traces.
Real y
deuxième composante du triplet
Definition Real3.h:36
Real x
première composante du triplet
Definition Real3.h:35