Arcane  v3.16.6.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
GeometricUtilities.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/* GeometricUtilities.h (C) 2000-2025 */
9/* */
10/* Fonctions utilitaires sur la géométrie. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_CORE_GEOMETRICUTILITIES_H
13#define ARCANE_CORE_GEOMETRICUTILITIES_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/utils/Real3.h"
18#include "arcane/utils/Real3x3.h"
19
20/*---------------------------------------------------------------------------*/
21/*---------------------------------------------------------------------------*/
26{
27
28/*---------------------------------------------------------------------------*/
29/*---------------------------------------------------------------------------*/
38class ARCANE_CORE_EXPORT QuadMapping
39{
40 public:
41
42 QuadMapping() = default;
43
44 public:
45
46 Real3 m_pos[4];
47 Real m_precision = 1.0e-14;
48
49 public:
50
53 {
54 Real u = iso.x;
55 Real v = iso.y;
56
57 Real x0 = (1.0 - u) * (1.0 - v);
58 Real x1 = (1.0 + u) * (1.0 - v);
59 Real x2 = (1.0 + u) * (1.0 + v);
60 Real x3 = (1.0 - u) * (1.0 + v);
61
62 return 0.25 * (m_pos[0] * x0 + m_pos[1] * x1 + m_pos[2] * x2 + m_pos[3] * x3);
63 }
64 Real3x3 evaluateGradient(Real3 iso) const
65 {
66 Real u = iso.x;
67 Real v = iso.y;
68
69 Real t1 = 0.25 * (v - 1.0);
70 Real t2 = 0.25 * (v + 1.0);
71 Real t3 = 0.25 * (u - 1.0);
72 Real t4 = 0.25 * (-u - 1.0);
73
74 return Real3x3(m_pos[0] * t1 - m_pos[1] * t1 + m_pos[2] * t2 - m_pos[3] * t2,
75 m_pos[0] * t3 + m_pos[1] * t4 - m_pos[2] * t4 - m_pos[3] * t3,
76 Real3::null());
77 }
78 Real computeInverseJacobian(Real3 uvw, Real3x3& matrix);
79 bool cartesianToIso(Real3 point, Real3& uvw, ITraceMng* tm);
80 bool cartesianToIso2(Real3 point, Real3& uvw, ITraceMng* tm);
81 Real3 normal();
82
83 private:
84
85 Real3 _normal();
86};
87
88/*---------------------------------------------------------------------------*/
89/*---------------------------------------------------------------------------*/
95class ARCANE_CORE_EXPORT ProjectionInfo
96{
97 public:
98
99 ProjectionInfo(Real distance, int region, Real alpha, Real beta, Real3 aprojection)
100 : m_distance(distance)
101 , m_region(region)
102 , m_alpha(alpha)
103 , m_beta(beta)
104 , m_projection(aprojection)
105 {}
106 ProjectionInfo() = default;
107
108 public:
109
113 int m_region = -1;
115 Real m_alpha = -1.0;
117 Real m_beta = -1.0;
120
121 public:
122
124 static ProjectionInfo projection(Real3 v1, Real3 v2, Real3 v3, Real3 point);
125
127 static ProjectionInfo projection(Real3 v1, Real3 v2, Real3 point);
128
132 static bool isInside(Real3 v1, Real3 v2, Real3 v3, Real3 point);
136 static bool isInside(Real3 v1, Real3 v2, Real3 point);
137};
138
139/*---------------------------------------------------------------------------*/
140/*---------------------------------------------------------------------------*/
141
142} // namespace Arcane::GeometricUtilities
143
144/*---------------------------------------------------------------------------*/
145/*---------------------------------------------------------------------------*/
146
147#endif
Informations sur le type flottant.
Definition Limits.h:48
Real3 m_projection
Position de la projection.
static ProjectionInfo projection(Real3 v1, Real3 v2, Real3 v3, Real3 point)
Projection du point point au triangle défini par v1, v2 et v3.
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.
static bool isInside(Real3 v1, Real3 v2, Real3 v3, Real3 point)
Indique si un la projection du point point est à l'intérieur du triangle défini par v1,...
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.
Interface du gestionnaire de traces.
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
Fonctions utilitaires sur la géométrie.
double Real
Type représentant un réel.
Real y
deuxième composante du triplet
Definition Real3.h:36
Real x
première composante du triplet
Definition Real3.h:35