|
ViewDesignEngine
3.1.0
高性能 CAD 计算几何引擎
|
二维几何约束求解器 更多...
#include <constraint_solver.h>
Public 成员函数 | |
| int | add_point (double x, double y, bool fixed=false) |
| 添加自由点 更多... | |
| int | add_line (int p0, int p1) |
| 添加线段 更多... | |
| int | add_circle (int center, double radius) |
| 添加圆 更多... | |
| void | add_constraint (ConstraintType type, const std::vector< int > &elements, double val=0.0) |
| 添加约束 更多... | |
| void | fix_point (int pid) |
| 标记点为固定(硬约束) 更多... | |
| SolverResult | solve (int max_iter=100, double tol=1e-8) |
| 执行约束求解 更多... | |
| int | degrees_of_freedom () const |
| 计算自由度 更多... | |
| const std::vector< SketchPoint > & | points () const |
| 当前点集访问 更多... | |
| Point2D | get_point (int id) const |
| 查询点坐标 更多... | |
二维几何约束求解器
基于 Gauss-Newton 非线性最小二乘的 2D 草图约束求解器。 支持点、线段、圆元素的水平/垂直/平行/垂直/相切/距离/角度等约束。
求解流程:
自由度分析: DOF = 2·N_free_points - Σ(约束方程数) DOF > 0 → 欠约束(解不唯一) DOF = 0 → 恰定(应有唯一解) DOF < 0 → 过约束(最小二乘意义下求解)
在文件 constraint_solver.h 第 124 行定义.
| int vde::sketch::ConstraintSolver::add_circle | ( | int | center, |
| double | radius | ||
| ) |
添加圆
| center | 圆心点 ID |
| radius | 半径 |
| void vde::sketch::ConstraintSolver::add_constraint | ( | ConstraintType | type, |
| const std::vector< int > & | elements, | ||
| double | val = 0.0 |
||
| ) |
添加约束
| type | 约束类型 |
| elements | 约束涉及的元素 ID 列表 |
| val | 约束值(距离、角度等),默认 0 |
| int vde::sketch::ConstraintSolver::add_line | ( | int | p0, |
| int | p1 | ||
| ) |
添加线段
| p0 | 起点 ID |
| p1 | 终点 ID |
| int vde::sketch::ConstraintSolver::add_point | ( | double | x, |
| double | y, | ||
| bool | fixed = false |
||
| ) |
添加自由点
| x | X 坐标 |
| y | Y 坐标 |
| fixed | 是否固定(true 则排除变量) |
| int vde::sketch::ConstraintSolver::degrees_of_freedom | ( | ) | const |
计算自由度
|
inline |
| Point2D vde::sketch::ConstraintSolver::get_point | ( | int | id | ) | const |
查询点坐标
| id | 点 ID |
|
inline |
| SolverResult vde::sketch::ConstraintSolver::solve | ( | int | max_iter = 100, |
| double | tol = 1e-8 |
||
| ) |
执行约束求解
| max_iter | 最大 Gauss-Newton 迭代次数,默认 100 |
| tol | 收敛容差(梯度范数 < tol 时停止),默认 1e-8 |