ViewDesignEngine  3.1.0
高性能 CAD 计算几何引擎
mesh_quality.h
浏览该文件的文档.
1 #pragma once
3 #include <cmath>
4 #include <vector>
5 #include <string>
6 #include <array>
7 
8 namespace vde::mesh {
9 using core::Point2D;
10 using core::Point3D;
11 using core::Vector3D;
12 
13 // ════════════════════════════════════════════════════════
14 // Triangle quality
15 // ════════════════════════════════════════════════════════
16 
21 struct MeshQuality {
22  double min_angle_deg = 0;
23  double max_angle_deg = 0;
24  double avg_aspect_ratio = 0;
25  double max_aspect_ratio = 0;
26  size_t degenerate_faces = 0;
27 };
28 
50 
51 // ════════════════════════════════════════════════════════
52 // Tetrahedron quality
53 // ════════════════════════════════════════════════════════
54 
59 struct TetQuality {
60  double min_jacobian = 0.0;
61  double max_jacobian = 0.0;
62  double avg_jacobian = 0.0;
63  double min_dihedral_deg = 0.0;
64  double max_dihedral_deg = 0.0;
65  double max_aspect_ratio = 0.0;
66  size_t degenerate_tets = 0;
67  size_t total_tets = 0;
68 };
69 
83 
84 // ════════════════════════════════════════════════════════
85 // Generic element quality
86 // ════════════════════════════════════════════════════════
87 
92 enum class ElementType {
93  Tri,
94  Quad,
95  Tet,
96  Hex
97 };
98 
103 struct ElemQuality {
104  double min_jacobian = 0.0;
105  double max_jacobian = 0.0;
106  double avg_jacobian = 0.0;
107  size_t total_elements = 0;
108  size_t degenerate = 0;
109 };
110 
122 
123 // ════════════════════════════════════════════════════════
124 // Quality report
125 // ════════════════════════════════════════════════════════
126 
132  std::string element_type;
133 
134  size_t total = 0;
135  size_t degenerate = 0;
136 
138  static constexpr int kBins = 10;
139  std::array<size_t, kBins> histogram{};
140 
142  size_t grade_A = 0, grade_B = 0, grade_C = 0, grade_D = 0, grade_F = 0;
143 
144  double min_quality = 0.0;
145  double max_quality = 0.0;
146  double avg_quality = 0.0;
147  double stddev_quality = 0.0;
148 };
149 
167 
179 
180 // ════════════════════════════════════════════════════════
181 // Utility
182 // ════════════════════════════════════════════════════════
183 
198 double tri_scaled_jacobian(const Point3D& a, const Point3D& b, const Point3D& c);
199 
213 double tet_scaled_jacobian(const Point3D& a, const Point3D& b,
214  const Point3D& c, const Point3D& d);
215 
216 } // namespace vde::mesh
半边数据结构三角网格
Definition: halfedge_mesh.h:54
QualityReport mesh_quality_report_tet(const HalfedgeMesh &mesh)
生成四面体网格的完整质量报告
QualityReport mesh_quality_report(const HalfedgeMesh &mesh)
生成三角网格的完整质量报告
MeshQuality evaluate_mesh_quality(const HalfedgeMesh &mesh)
评估三角网格质量
TetQuality evaluate_tet_quality(const HalfedgeMesh &mesh)
评估三角网格作为四面体边界的质量
double tet_scaled_jacobian(const Point3D &a, const Point3D &b, const Point3D &c, const Point3D &d)
四面体归一化 Jacobian
ElementType
单元类型枚举
Definition: mesh_quality.h:92
ElemQuality evaluate_element_quality(const HalfedgeMesh &mesh, ElementType type)
按单元类型分派的网格质量评估
double tri_scaled_jacobian(const Point3D &a, const Point3D &b, const Point3D &c)
三角形归一化 Jacobian
@ Hex
六面体(Stub)
@ Quad
四边形(Stub)
foundation::Point2D Point2D
双精度二维点(重新导出)
Definition: point.h:29
foundation::Vector3D Vector3D
双精度三维向量(重新导出)
Definition: point.h:49
foundation::Point3D Point3D
双精度三维点(重新导出)
Definition: point.h:31
通用单元质量指标
Definition: mesh_quality.h:103
double avg_jacobian
平均归一化 Jacobian
Definition: mesh_quality.h:106
double max_jacobian
最大归一化 Jacobian
Definition: mesh_quality.h:105
size_t total_elements
单元总数
Definition: mesh_quality.h:107
size_t degenerate
退化单元数
Definition: mesh_quality.h:108
double min_jacobian
最小归一化 Jacobian
Definition: mesh_quality.h:104
三角网格质量指标
Definition: mesh_quality.h:21
double max_aspect_ratio
最大长宽比
Definition: mesh_quality.h:25
double avg_aspect_ratio
平均长宽比(外接圆半径 / 最短边)
Definition: mesh_quality.h:24
double min_angle_deg
最小三角形内角(度),≥ 0
Definition: mesh_quality.h:22
double max_angle_deg
最大三角形内角(度),≤ 180
Definition: mesh_quality.h:23
size_t degenerate_faces
退化面数(面积 ≈ 0)
Definition: mesh_quality.h:26
详细质量报告
Definition: mesh_quality.h:131
static constexpr int kBins
质量直方图(k=10 个区间,[0,0.1), [0.1,0.2), ..., [0.9,1.0])
Definition: mesh_quality.h:138
std::array< size_t, kBins > histogram
Definition: mesh_quality.h:139
size_t total
单元总数
Definition: mesh_quality.h:134
std::string element_type
"triangle" 或 "tetrahedron"
Definition: mesh_quality.h:132
double min_quality
最低质量值
Definition: mesh_quality.h:144
double max_quality
最高质量值
Definition: mesh_quality.h:145
size_t grade_A
分级计数(A=优秀 B=良好 C=合格 D=差 F=不合格)
Definition: mesh_quality.h:142
double avg_quality
平均质量值
Definition: mesh_quality.h:146
size_t degenerate
退化单元数
Definition: mesh_quality.h:135
double stddev_quality
质量标准差
Definition: mesh_quality.h:147
四面体网格质量指标
Definition: mesh_quality.h:59
double min_dihedral_deg
最小二面角(度),太小会导致刚度矩阵病态
Definition: mesh_quality.h:63
double avg_jacobian
平均归一化 Jacobian
Definition: mesh_quality.h:62
size_t total_tets
四面体总数
Definition: mesh_quality.h:67
double min_jacobian
最小归一化 Jacobian [0, 1],0=退化 1=正四面体
Definition: mesh_quality.h:60
double max_dihedral_deg
最大二面角(度),接近 180° 表示退化
Definition: mesh_quality.h:64
double max_aspect_ratio
最大长宽比(外接球半径 / 最短边)
Definition: mesh_quality.h:65
double max_jacobian
最大归一化 Jacobian
Definition: mesh_quality.h:61
size_t degenerate_tets
退化四面体数(体积 ≈ 0 或 Jacobian ≈ 0)
Definition: mesh_quality.h:66