LMCAS
Lamina Computer Algebra System
载入中...
搜索中...
未找到
LMCAS::geometry_detail 命名空间参考

函数

Result< void > checked_nonzero_numeric_or_exact (const std::shared_ptr< SymbolicExpr > &expr, ComputationContext &context, const std::string &operation, const std::string &domain_message, const std::string &inconclusive_message)
Result< void > checked_nonzero_numeric_vector (const std::vector< std::shared_ptr< SymbolicExpr > > &expressions, ComputationContext &context, const std::string &operation, const std::string &domain_message, const std::string &inconclusive_message)
Result< double > numeric_vector_scale_checked (const std::vector< std::shared_ptr< SymbolicExpr > > &expressions, ComputationContext &context, const std::string &operation, std::vector< double > *values=nullptr)
ExpressionResult simplify_checked (const std::shared_ptr< SymbolicExpr > &expr, const std::string &operation, const std::string &message, ComputationContext &context)
Result< void > validate_line_checked (const LineSymbolic &line, ComputationContext &context, const std::string &operation)
Result< void > validate_plane_checked (const PlaneSymbolic &plane, ComputationContext &context, const std::string &operation)
Result< void > validate_same_dimension_vectors (const std::vector< std::shared_ptr< SymbolicExpr > > &a, const std::vector< std::shared_ptr< SymbolicExpr > > &b, ComputationContext &context, const std::string &operation)
Result< void > validate_surface_point (const SurfaceSymbolic &surf, const std::vector< std::shared_ptr< SymbolicExpr > > &point, ComputationContext &context, const std::string &operation)
Result< void > validate_symbolic_vector (const std::vector< std::shared_ptr< SymbolicExpr > > &vector, const std::string &name, const std::string &operation)

函数说明

◆ checked_nonzero_numeric_or_exact()

Result< void > LMCAS::geometry_detail::checked_nonzero_numeric_or_exact ( const std::shared_ptr< SymbolicExpr > & expr,
ComputationContext & context,
const std::string & operation,
const std::string & domain_message,
const std::string & inconclusive_message )

在文件 symbolic_geometry_support.cpp 第 177 行定义.

183 {
184 detail::RewriteBudget transform_budget(context, (context).limits().max_recursion_depth,
185 (context).limits().max_ast_nodes, "transform");
186 if (!expr || !LMCAS::detail::node(expr)) {
188 inconclusive_message, operation);
189 }
190 auto simplified = detail::make_expression_ptr(detail::normalize_node(detail::node(expr), transform_budget));
191 if (!simplified || !LMCAS::detail::node(simplified)) {
193 inconclusive_message, operation);
194 }
195 if (simplified->is_zero()) {
197 domain_message, operation);
198 }
199 auto numeric = evaluate_numeric(*simplified, NumericBindings{}, context);
200 if (!numeric) {
201 if (numeric.error().code == CasErrc::Cancelled ||
202 numeric.error().code == CasErrc::ResourceLimit) {
203 return Result<void>::failure(numeric.error());
204 }
206 inconclusive_message, operation);
207 }
208 if (!numeric.value().is_finite() ||
209 !std::isfinite(numeric.value().value)) {
211 inconclusive_message, operation);
212 }
213 if (numeric.value().value == 0.0) {
215 domain_message, operation);
216 }
217 return Result<void>::success();
218} catch (const CasError& error) {
219 return Result<void>::failure(error);
220} catch (const std::bad_alloc&) {
221 return Result<void>::failure(CasErrc::ResourceLimit, "allocation failed", operation);
222} catch (const std::length_error& error) {
223 return Result<void>::failure(CasErrc::ResourceLimit, error.what(), operation);
224} catch (const std::exception& error) {
225 return Result<void>::failure(CasErrc::InternalInvariant, error.what(), operation);
226}
static Result failure(CasErrc code, std::string message, std::string operation={})
static Result success(T value)
std::shared_ptr<::LMCAS::SymbolicExpr > make_expression_ptr(SymbolicNodePtr root)
const SymbolicNodePtr & node(const ::LMCAS::SymbolicExpr &expression) noexcept
SymbolicNodePtr normalize_node(const SymbolicNodePtr &node, RewriteBudget &budget, const FactsQuery &facts, Domain domain)
const std::vector< Polynomial< BigInt > > const BigInt ComputationContext & context
Result< ApproxReal > evaluate_numeric(const SymbolicExpr &expression, const NumericBindings &bindings={})
std::unordered_map< std::string, double > NumericBindings

引用了 LMCAS::Cancelled, checked_nonzero_numeric_or_exact(), LMCAS::context, LMCAS::DomainError, LMCAS::evaluate_numeric(), LMCAS::Result< T >::failure(), LMCAS::Inconclusive, LMCAS::detail::make_expression_ptr(), LMCAS::detail::node(), LMCAS::detail::normalize_node(), LMCAS::NumericFailure, LMCAS::ResourceLimit , 以及 LMCAS::Result< T >::success().

被这些函数引用 LMCAS::anonymous_namespace{symbolic_geometry_plane.cpp}::check_plane_normal_nonzero(), checked_nonzero_numeric_or_exact() , 以及 LMCAS::anonymous_namespace{symbolic_geometry_line_plane.cpp}::symbolic_line_plane_intersection().

函数调用图:
这是这个函数的调用关系图:

◆ checked_nonzero_numeric_vector()

Result< void > LMCAS::geometry_detail::checked_nonzero_numeric_vector ( const std::vector< std::shared_ptr< SymbolicExpr > > & expressions,
ComputationContext & context,
const std::string & operation,
const std::string & domain_message,
const std::string & inconclusive_message )

在文件 symbolic_geometry_support.cpp 第 153 行定义.

159{
160 auto scaled = numeric_vector_scale_checked(
161 expressions, context, operation);
162 if (!scaled) {
163 if (scaled.error().code == CasErrc::Cancelled ||
164 scaled.error().code == CasErrc::ResourceLimit) {
165 return Result<void>::failure(scaled.error());
166 }
168 CasErrc::Inconclusive, inconclusive_message, operation);
169 }
170 if (scaled.value() == 0.0) {
172 CasErrc::DomainError, domain_message, operation);
173 }
174 return Result<void>::success();
175}
Result< double > numeric_vector_scale_checked(const std::vector< std::shared_ptr< SymbolicExpr > > &expressions, ComputationContext &context, const std::string &operation, std::vector< double > *values=nullptr)
NumberDomainSet expressions()

引用了 LMCAS::Cancelled, checked_nonzero_numeric_vector(), LMCAS::context, LMCAS::DomainError, LMCAS::expressions(), LMCAS::Result< T >::failure(), LMCAS::Inconclusive, numeric_vector_scale_checked(), LMCAS::ResourceLimit , 以及 LMCAS::Result< T >::success().

被这些函数引用 LMCAS::anonymous_namespace{symbolic_geometry_plane.cpp}::check_plane_normal_nonzero(), checked_nonzero_numeric_vector(), LMCAS::anonymous_namespace{symbolic_geometry_line.cpp}::skew_distance_from_directions(), validate_line_checked() , 以及 validate_plane_checked().

函数调用图:
这是这个函数的调用关系图:

◆ numeric_vector_scale_checked()

Result< double > LMCAS::geometry_detail::numeric_vector_scale_checked ( const std::vector< std::shared_ptr< SymbolicExpr > > & expressions,
ComputationContext & context,
const std::string & operation,
std::vector< double > * values = nullptr )

在文件 symbolic_geometry_support.cpp 第 108 行定义.

113{
114 double max_abs = 0.0;
115 if (values) {
116 values->clear();
117 values->reserve(expressions.size());
118 }
119 for (const auto& expression : expressions) {
120 if (!expression || !LMCAS::detail::node(expression)) {
123 "numeric vector contains a null expression",
124 operation);
125 }
126 auto evaluated = evaluate_numeric(
127 *expression, NumericBindings{}, context);
128 if (!evaluated) {
129 if (evaluated.error().code == CasErrc::Cancelled ||
130 evaluated.error().code == CasErrc::ResourceLimit) {
131 return Result<double>::failure(evaluated.error());
132 }
135 "vector is not finite numeric in the supported domain",
136 operation);
137 }
138 if (!evaluated.value().is_finite() ||
139 !std::isfinite(evaluated.value().value)) {
142 "vector is not finite numeric in the supported domain",
143 operation);
144 }
145 max_abs = std::max(max_abs, std::abs(evaluated.value().value));
146 if (values) {
147 values->push_back(evaluated.value().value);
148 }
149 }
150 return Result<double>::success(max_abs);
151}

引用了 LMCAS::Cancelled, LMCAS::context, LMCAS::evaluate_numeric(), LMCAS::expressions(), LMCAS::Result< T >::failure(), LMCAS::InvalidArgument, LMCAS::detail::node(), numeric_vector_scale_checked(), LMCAS::NumericFailure, LMCAS::ResourceLimit , 以及 LMCAS::Result< T >::success().

被这些函数引用 LMCAS::anonymous_namespace{symbolic_geometry_plane.cpp}::build_plane_edges(), checked_nonzero_numeric_vector(), LMCAS::line_plane_intersection_checked(), numeric_vector_scale_checked(), LMCAS::anonymous_namespace{symbolic_geometry_line.cpp}::point_difference_scale_checked(), LMCAS::point_plane_distance_checked(), LMCAS::anonymous_namespace{symbolic_geometry_plane.cpp}::scale_plane_edges_for_cross(), LMCAS::skew_lines_distance_checked(), LMCAS::anonymous_namespace{symbolic_geometry_surface.cpp}::surface_gradient_scale_checked() , 以及 LMCAS::tangent_plane_checked().

函数调用图:
这是这个函数的调用关系图:

◆ simplify_checked()

ExpressionResult LMCAS::geometry_detail::simplify_checked ( const std::shared_ptr< SymbolicExpr > & expr,
const std::string & operation,
const std::string & message,
ComputationContext & context )

在文件 symbolic_geometry_support.cpp 第 82 行定义.

86 {
87
88 detail::RewriteBudget transform_budget(context, (context).limits().max_recursion_depth,
89 (context).limits().max_ast_nodes, "transform");
90 if (!expr || !LMCAS::detail::node(expr)) {
91 return ExpressionResult::failure(CasErrc::Inconclusive, message, operation);
92 }
93 auto simplified = detail::make_expression_ptr(detail::normalize_node(detail::node(expr), transform_budget));
94 if (!simplified || !LMCAS::detail::node(simplified)) {
95 return ExpressionResult::failure(CasErrc::Inconclusive, message, operation);
96 }
97 return ExpressionResult::success(std::move(simplified));
98} catch (const CasError& error) {
99 return ExpressionResult::failure(error);
100} catch (const std::bad_alloc&) {
101 return ExpressionResult::failure(CasErrc::ResourceLimit, "allocation failed", operation);
102} catch (const std::length_error& error) {
103 return ExpressionResult::failure(CasErrc::ResourceLimit, error.what(), operation);
104} catch (const std::exception& error) {
105 return ExpressionResult::failure(CasErrc::InternalInvariant, error.what(), operation);
106}

引用了 LMCAS::context, LMCAS::Result< std::shared_ptr< SymbolicExpr > >::failure(), LMCAS::Inconclusive, LMCAS::detail::make_expression_ptr(), LMCAS::detail::node(), LMCAS::detail::normalize_node(), simplify_checked() , 以及 LMCAS::Result< std::shared_ptr< SymbolicExpr > >::success().

被这些函数引用 LMCAS::anonymous_namespace{symbolic_geometry_plane.cpp}::append_symbolic_plane_edges(), LMCAS::anonymous_namespace{symbolic_geometry_plane.cpp}::assemble_plane(), LMCAS::anonymous_namespace{symbolic_geometry_surface.cpp}::differentiate_surface_checked(), LMCAS::line_from_two_points_checked(), simplify_checked(), LMCAS::anonymous_namespace{symbolic_geometry_line.cpp}::skew_distance_from_directions(), LMCAS::anonymous_namespace{symbolic_geometry_surface.cpp}::surface_gradient_at_point_checked(), LMCAS::anonymous_namespace{symbolic_geometry_line_plane.cpp}::symbolic_line_plane_intersection(), LMCAS::anonymous_namespace{symbolic_geometry_line_plane.cpp}::symbolic_point_plane_distance() , 以及 LMCAS::tangent_plane_checked().

函数调用图:
这是这个函数的调用关系图:

◆ validate_line_checked()

Result< void > LMCAS::geometry_detail::validate_line_checked ( const LineSymbolic & line,
ComputationContext & context,
const std::string & operation )

在文件 symbolic_geometry_support.cpp 第 228 行定义.

231{
232 auto valid = validate_same_dimension_vectors(line.point, line.direction,
233 context, operation);
234 if (!valid) return valid;
235 if (line.point.size() != 3) {
237 "line geometry requires 3-dimensional data",
238 operation);
239 }
241 line.direction, context, operation,
242 "line direction cannot be zero",
243 "line direction nonzero condition cannot be verified");
244}
Result< void > validate_same_dimension_vectors(const std::vector< std::shared_ptr< SymbolicExpr > > &a, const std::vector< std::shared_ptr< SymbolicExpr > > &b, ComputationContext &context, const std::string &operation)
Result< void > checked_nonzero_numeric_vector(const std::vector< std::shared_ptr< SymbolicExpr > > &expressions, ComputationContext &context, const std::string &operation, const std::string &domain_message, const std::string &inconclusive_message)
std::vector< std::shared_ptr< SymbolicExpr > > point
直线上一点。
std::vector< std::shared_ptr< SymbolicExpr > > direction
方向向量。

引用了 checked_nonzero_numeric_vector(), LMCAS::context, LMCAS::LineSymbolic::direction, LMCAS::Result< T >::failure(), LMCAS::InvalidArgument, LMCAS::LineSymbolic::point, validate_line_checked() , 以及 validate_same_dimension_vectors().

被这些函数引用 LMCAS::line_from_two_points_checked(), LMCAS::skew_lines_distance_checked(), LMCAS::anonymous_namespace{symbolic_geometry_line_plane.cpp}::validate_intersection_inputs() , 以及 validate_line_checked().

函数调用图:
这是这个函数的调用关系图:

◆ validate_plane_checked()

Result< void > LMCAS::geometry_detail::validate_plane_checked ( const PlaneSymbolic & plane,
ComputationContext & context,
const std::string & operation )

在文件 symbolic_geometry_support.cpp 第 246 行定义.

249{
250 if (!plane.d || !LMCAS::detail::node(plane.d)) {
252 "plane constant cannot be null",
253 operation);
254 }
255 if (plane.normal.size() != 3) {
257 "plane geometry requires a 3-dimensional normal",
258 operation);
259 }
260 auto normal_valid = validate_symbolic_vector(plane.normal, "plane normal",
261 operation);
262 if (!normal_valid) return normal_valid;
264 plane.normal, context, operation,
265 "plane normal cannot be zero",
266 "plane normal nonzero condition cannot be verified");
267}
Result< void > validate_symbolic_vector(const std::vector< std::shared_ptr< SymbolicExpr > > &vector, const std::string &name, const std::string &operation)
const PlaneSymbolic & plane
std::vector< std::shared_ptr< SymbolicExpr > > normal
法向量。
std::shared_ptr< SymbolicExpr > d
常数项。

引用了 checked_nonzero_numeric_vector(), LMCAS::context, LMCAS::PlaneSymbolic::d, LMCAS::Result< T >::failure(), LMCAS::InvalidArgument, LMCAS::detail::node(), LMCAS::PlaneSymbolic::normal, LMCAS::plane, validate_plane_checked() , 以及 validate_symbolic_vector().

被这些函数引用 LMCAS::dihedral_angle_checked(), LMCAS::point_plane_distance_checked(), LMCAS::anonymous_namespace{symbolic_geometry_line_plane.cpp}::validate_intersection_inputs() , 以及 validate_plane_checked().

函数调用图:
这是这个函数的调用关系图:

◆ validate_same_dimension_vectors()

Result< void > LMCAS::geometry_detail::validate_same_dimension_vectors ( const std::vector< std::shared_ptr< SymbolicExpr > > & a,
const std::vector< std::shared_ptr< SymbolicExpr > > & b,
ComputationContext & context,
const std::string & operation )

在文件 symbolic_geometry_support.cpp 第 29 行定义.

34{
35 auto step = context.consume_steps(1, operation);
36 if (!step) return step;
37 if (a.empty() || b.empty()) {
39 CasErrc::InvalidArgument, "vectors cannot be empty", operation);
40 }
41 if (a.size() != b.size()) {
43 CasErrc::InvalidArgument, "vector dimensions do not match", operation);
44 }
45 auto a_check = validate_symbolic_vector(a, "left vector", operation);
46 if (!a_check) return a_check;
47 return validate_symbolic_vector(b, "right vector", operation);
48}
const MultiPoly & b
__attribute__((visibility("default"))) VectorCalculusExprResult curve_integral_scalar_checked(const std __attribute__((visibility("default"))) VectorCalculusExprResult curve_integral_scalar_checked(const std __attribute__((visibility("default"))) std const VectorField const std::string const std::shared_ptr< SymbolicExpr > & a

引用了 LMCAS::a, LMCAS::b, LMCAS::context, LMCAS::Result< T >::failure(), LMCAS::InvalidArgument, validate_same_dimension_vectors() , 以及 validate_symbolic_vector().

被这些函数引用 LMCAS::line_from_two_points_checked(), LMCAS::plane_from_three_points_checked(), validate_line_checked(), validate_same_dimension_vectors(), LMCAS::vector_angle_checked() , 以及 LMCAS::vector_dot_checked().

函数调用图:
这是这个函数的调用关系图:

◆ validate_surface_point()

Result< void > LMCAS::geometry_detail::validate_surface_point ( const SurfaceSymbolic & surf,
const std::vector< std::shared_ptr< SymbolicExpr > > & point,
ComputationContext & context,
const std::string & operation )

在文件 symbolic_geometry_support.cpp 第 50 行定义.

55{
56 auto step = context.consume_steps(1, operation);
57 if (!step) return step;
58 if (!surf.F || !LMCAS::detail::node(surf.F)) {
60 CasErrc::InvalidArgument, "surface equation cannot be null", operation);
61 }
62 if (surf.vars.empty()) {
64 CasErrc::InvalidArgument, "surface variables cannot be empty", operation);
65 }
66 if (surf.vars.size() != point.size()) {
69 "surface variable count must match point dimension",
70 operation);
71 }
72 for (const auto& var : surf.vars) {
73 if (var.empty()) {
75 CasErrc::InvalidArgument, "surface variable names cannot be empty",
76 operation);
77 }
78 }
79 return validate_symbolic_vector(point, "surface point", operation);
80}
const std::string const LimitExprPtr & point
std::shared_ptr< SymbolicExpr > F
曲面方程左端,等于零。
std::vector< std::string > vars
坐标变量名 {x,y,z}。

引用了 LMCAS::context, LMCAS::SurfaceSymbolic::F, LMCAS::Result< T >::failure(), LMCAS::InvalidArgument, LMCAS::detail::node(), LMCAS::point, validate_surface_point(), validate_symbolic_vector() , 以及 LMCAS::SurfaceSymbolic::vars.

被这些函数引用 LMCAS::classify_quadric_checked(), LMCAS::surface_normal_checked(), LMCAS::tangent_plane_checked() , 以及 validate_surface_point().

函数调用图:
这是这个函数的调用关系图:

◆ validate_symbolic_vector()

Result< void > LMCAS::geometry_detail::validate_symbolic_vector ( const std::vector< std::shared_ptr< SymbolicExpr > > & vector,
const std::string & name,
const std::string & operation )

在文件 symbolic_geometry_support.cpp 第 13 行定义.

17{
18 for (size_t i = 0; i < vector.size(); ++i) {
19 if (!vector[i] || !LMCAS::detail::node(vector[i])) {
22 name + " contains a null component at index " + std::to_string(i),
23 operation);
24 }
25 }
26 return Result<void>::success();
27}
__attribute__((visibility("default"))) Result< EqvProfile > eqv_profile_from_name(const std const std::string & name

引用了 LMCAS::Result< T >::failure(), LMCAS::InvalidArgument, LMCAS::name, LMCAS::detail::node(), LMCAS::Result< T >::success() , 以及 validate_symbolic_vector().

被这些函数引用 LMCAS::point_plane_distance_checked(), validate_plane_checked(), validate_same_dimension_vectors(), validate_surface_point(), validate_symbolic_vector() , 以及 LMCAS::vector_cross_checked().

函数调用图:
这是这个函数的调用关系图: