Files
ViewDesignEngine/docs/api/constraint__solver_8h_source.html
T
茂之钳 2f111edcd5
CI / Build & Test (push) Failing after 33s
CI / Release Build (push) Failing after 31s
Build & Test / build-and-test (push) Has been cancelled
Build & Test / python-bindings (push) Has been cancelled
docs: generated API documentation (483 pages)
2026-07-24 11:55:47 +00:00

249 lines
45 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.9.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>ViewDesignEngine: include/vde/sketch/constraint_solver.h 源文件</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">ViewDesignEngine
&#160;<span id="projectnumber">3.1.0</span>
</div>
<div id="projectbrief">高性能 CAD 计算几何引擎</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- 制作者 Doxygen 1.9.1 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'搜索','.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','搜索');
$(document).ready(function() { init_search(); });
});
/* @license-end */</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(document).ready(function(){initNavTree('constraint__solver_8h_source.html',''); initResizable(); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="headertitle">
<div class="title">constraint_solver.h</div> </div>
</div><!--header-->
<div class="contents">
<a href="constraint__solver_8h.html">浏览该文件的文档.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="preprocessor">#pragma once</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="point_8h.html">vde/core/point.h</a>&quot;</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="preprocessor">#include &lt;vector&gt;</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="preprocessor">#include &lt;unordered_map&gt;</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160; </div>
<div class="line"><a name="l00007"></a><span class="lineno"><a class="line" href="namespacevde_1_1sketch.html"> 7</a></span>&#160;<span class="keyword">namespace </span><a class="code" href="namespacevde_1_1sketch.html">vde::sketch</a> {</div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="keyword">using</span> <a class="code" href="namespacevde_1_1core.html#a78483c599a40e4f333418667a77e3862">core::Point2D</a>;</div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="keyword">using</span> <a class="code" href="namespacevde_1_1core.html#ad9a16d9a4c7eba0f41fd91110c8e6381">core::Vector2D</a>;</div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160; </div>
<div class="line"><a name="l00015"></a><span class="lineno"><a class="line" href="structvde_1_1sketch_1_1SketchPoint.html"> 15</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structvde_1_1sketch_1_1SketchPoint.html">SketchPoint</a> {</div>
<div class="line"><a name="l00016"></a><span class="lineno"><a class="line" href="structvde_1_1sketch_1_1SketchPoint.html#acccc2685724fe5cb980e611418711204"> 16</a></span>&#160; <span class="keywordtype">int</span> <a class="code" href="structvde_1_1sketch_1_1SketchPoint.html#acccc2685724fe5cb980e611418711204">id</a>; </div>
<div class="line"><a name="l00017"></a><span class="lineno"><a class="line" href="structvde_1_1sketch_1_1SketchPoint.html#a2bc08ef95871e0e8d72f8429f5a242c4"> 17</a></span>&#160; <a class="code" href="namespacevde_1_1core.html#a78483c599a40e4f333418667a77e3862">Point2D</a> <a class="code" href="structvde_1_1sketch_1_1SketchPoint.html#a2bc08ef95871e0e8d72f8429f5a242c4">pos</a>; </div>
<div class="line"><a name="l00018"></a><span class="lineno"><a class="line" href="structvde_1_1sketch_1_1SketchPoint.html#a2a487c20a03599cb94ec7538c3e354aa"> 18</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="structvde_1_1sketch_1_1SketchPoint.html#a2a487c20a03599cb94ec7538c3e354aa">fixed</a> = <span class="keyword">false</span>; </div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;};</div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; </div>
<div class="line"><a name="l00025"></a><span class="lineno"><a class="line" href="structvde_1_1sketch_1_1SketchLine.html"> 25</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structvde_1_1sketch_1_1SketchLine.html">SketchLine</a> {</div>
<div class="line"><a name="l00026"></a><span class="lineno"><a class="line" href="structvde_1_1sketch_1_1SketchLine.html#a9a776c571c882655ec4eec92d112febc"> 26</a></span>&#160; <span class="keywordtype">int</span> <a class="code" href="structvde_1_1sketch_1_1SketchLine.html#a9a776c571c882655ec4eec92d112febc">id</a>; </div>
<div class="line"><a name="l00027"></a><span class="lineno"><a class="line" href="structvde_1_1sketch_1_1SketchLine.html#afcffab563825b270b7693c486e573812"> 27</a></span>&#160; <span class="keywordtype">int</span> <a class="code" href="structvde_1_1sketch_1_1SketchLine.html#afcffab563825b270b7693c486e573812">p0</a>, <a class="code" href="structvde_1_1sketch_1_1SketchLine.html#a120bc990adefeb2423eaf311f6db9673">p1</a>; </div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;};</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; </div>
<div class="line"><a name="l00034"></a><span class="lineno"><a class="line" href="structvde_1_1sketch_1_1SketchCircle.html"> 34</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structvde_1_1sketch_1_1SketchCircle.html">SketchCircle</a> {</div>
<div class="line"><a name="l00035"></a><span class="lineno"><a class="line" href="structvde_1_1sketch_1_1SketchCircle.html#a5f3fe16fd807834bc9767ea5379f66cf"> 35</a></span>&#160; <span class="keywordtype">int</span> <a class="code" href="structvde_1_1sketch_1_1SketchCircle.html#a5f3fe16fd807834bc9767ea5379f66cf">id</a>; </div>
<div class="line"><a name="l00036"></a><span class="lineno"><a class="line" href="structvde_1_1sketch_1_1SketchCircle.html#a6e7e40a8971eccfeb07d32b7db8a9225"> 36</a></span>&#160; <span class="keywordtype">int</span> <a class="code" href="structvde_1_1sketch_1_1SketchCircle.html#a6e7e40a8971eccfeb07d32b7db8a9225">center</a>; </div>
<div class="line"><a name="l00037"></a><span class="lineno"><a class="line" href="structvde_1_1sketch_1_1SketchCircle.html#a37b622c720a9d414e0d0fb27a3f28520"> 37</a></span>&#160; <span class="keywordtype">double</span> <a class="code" href="structvde_1_1sketch_1_1SketchCircle.html#a37b622c720a9d414e0d0fb27a3f28520">radius</a>; </div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;};</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; </div>
<div class="line"><a name="l00049"></a><span class="lineno"><a class="line" href="group__sketch.html#gaad27ecad61ea382a4ea2f61366fdd1b3"> 49</a></span>&#160;<span class="keyword">enum class</span> <a class="code" href="group__sketch.html#gaad27ecad61ea382a4ea2f61366fdd1b3">ConstraintType</a> {</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <a class="code" href="group__sketch.html#ggaad27ecad61ea382a4ea2f61366fdd1b3ac1b5fa03ecdb95d4a45dd1c40b02527f">Horizontal</a>, </div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <a class="code" href="group__sketch.html#ggaad27ecad61ea382a4ea2f61366fdd1b3a06ce2a25e5d12c166a36f654dbea6012">Vertical</a>, </div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <a class="code" href="group__sketch.html#ggaad27ecad61ea382a4ea2f61366fdd1b3a98402eecfbcefc336954458a01752131">Parallel</a>, </div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <a class="code" href="group__sketch.html#ggaad27ecad61ea382a4ea2f61366fdd1b3acd8b3187c4074a4bb810f1fef79fd52a">Perpendicular</a>, </div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <a class="code" href="group__sketch.html#ggaad27ecad61ea382a4ea2f61366fdd1b3a81126870f8ecd751b93a0f51d10a8945">Coincident</a>, </div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <a class="code" href="group__sketch.html#ggaad27ecad61ea382a4ea2f61366fdd1b3a75d5dcc04f38a8ba732bf65d0033af27">EqualLength</a>, </div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <a class="code" href="group__sketch.html#ggaad27ecad61ea382a4ea2f61366fdd1b3a0aa6f4210bf373c95eda00232e93cd98">Distance</a>, </div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <a class="code" href="group__sketch.html#ggaad27ecad61ea382a4ea2f61366fdd1b3ad1106ccca74e98877ed6d7890c70bb2c">Radius</a>, </div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <a class="code" href="group__sketch.html#ggaad27ecad61ea382a4ea2f61366fdd1b3a541671cb1be09d76a84ba1a873ec3fc8">Tangent</a>, </div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <a class="code" href="group__sketch.html#ggaad27ecad61ea382a4ea2f61366fdd1b3ae02297ae7a55ef0dcf7f1aab456e9c14">Concentric</a>, </div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <a class="code" href="group__sketch.html#ggaad27ecad61ea382a4ea2f61366fdd1b3a2a0ef66f3350a0347070e69501922e27">FixedPoint</a>, </div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <a class="code" href="group__sketch.html#ggaad27ecad61ea382a4ea2f61366fdd1b3a4457d440870ad6d42bab9082d9bf9b61">Fixed</a>, </div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <a class="code" href="group__sketch.html#ggaad27ecad61ea382a4ea2f61366fdd1b3a45f4ce6c3306644b1efe333f4f8d6929">Angle</a>, </div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;};</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; </div>
<div class="line"><a name="l00069"></a><span class="lineno"><a class="line" href="structvde_1_1sketch_1_1Constraint.html"> 69</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structvde_1_1sketch_1_1Constraint.html">Constraint</a> {</div>
<div class="line"><a name="l00070"></a><span class="lineno"><a class="line" href="structvde_1_1sketch_1_1Constraint.html#a5d2f91bcfeda0300dc519429e871ff31"> 70</a></span>&#160; <a class="code" href="group__sketch.html#gaad27ecad61ea382a4ea2f61366fdd1b3">ConstraintType</a> <a class="code" href="structvde_1_1sketch_1_1Constraint.html#a5d2f91bcfeda0300dc519429e871ff31">type</a>; </div>
<div class="line"><a name="l00071"></a><span class="lineno"><a class="line" href="structvde_1_1sketch_1_1Constraint.html#a84117061999964ad028555927a969c35"> 71</a></span>&#160; std::vector&lt;int&gt; <a class="code" href="structvde_1_1sketch_1_1Constraint.html#a84117061999964ad028555927a969c35">elements</a>; </div>
<div class="line"><a name="l00072"></a><span class="lineno"><a class="line" href="structvde_1_1sketch_1_1Constraint.html#a091a4281a6a2760024c06b55a0778d2d"> 72</a></span>&#160; <span class="keywordtype">double</span> <a class="code" href="structvde_1_1sketch_1_1Constraint.html#a091a4281a6a2760024c06b55a0778d2d">value</a> = 0.0; </div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;};</div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; </div>
<div class="line"><a name="l00079"></a><span class="lineno"><a class="line" href="structvde_1_1sketch_1_1SolverResult.html"> 79</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structvde_1_1sketch_1_1SolverResult.html">SolverResult</a> {</div>
<div class="line"><a name="l00080"></a><span class="lineno"><a class="line" href="structvde_1_1sketch_1_1SolverResult.html#a4534705cd9e13ad092d51a00c17cb3f7"> 80</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="structvde_1_1sketch_1_1SolverResult.html#a4534705cd9e13ad092d51a00c17cb3f7">converged</a> = <span class="keyword">false</span>; </div>
<div class="line"><a name="l00081"></a><span class="lineno"><a class="line" href="structvde_1_1sketch_1_1SolverResult.html#aa4bc55e6c1a6f14a6c53ec363f12168e"> 81</a></span>&#160; <span class="keywordtype">int</span> <a class="code" href="structvde_1_1sketch_1_1SolverResult.html#aa4bc55e6c1a6f14a6c53ec363f12168e">iterations</a> = 0; </div>
<div class="line"><a name="l00082"></a><span class="lineno"><a class="line" href="structvde_1_1sketch_1_1SolverResult.html#a556b507d063c6c588784fade9885890b"> 82</a></span>&#160; <span class="keywordtype">double</span> <a class="code" href="structvde_1_1sketch_1_1SolverResult.html#a556b507d063c6c588784fade9885890b">residual</a> = 0.0; </div>
<div class="line"><a name="l00083"></a><span class="lineno"><a class="line" href="structvde_1_1sketch_1_1SolverResult.html#acea0835132af8532c6685b399a261bcf"> 83</a></span>&#160; std::vector&lt;Point2D&gt; <a class="code" href="structvde_1_1sketch_1_1SolverResult.html#acea0835132af8532c6685b399a261bcf">points</a>; </div>
<div class="line"><a name="l00084"></a><span class="lineno"><a class="line" href="structvde_1_1sketch_1_1SolverResult.html#a73b4ec71c9e6ced2d0788f2b4de7656b"> 84</a></span>&#160; std::string <a class="code" href="structvde_1_1sketch_1_1SolverResult.html#a73b4ec71c9e6ced2d0788f2b4de7656b">message</a>; </div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160;};</div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; </div>
<div class="line"><a name="l00124"></a><span class="lineno"><a class="line" href="classvde_1_1sketch_1_1ConstraintSolver.html"> 124</a></span>&#160;<span class="keyword">class </span><a class="code" href="classvde_1_1sketch_1_1ConstraintSolver.html">ConstraintSolver</a> {</div>
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160;<span class="keyword">public</span>:</div>
<div class="line"><a name="l00133"></a><span class="lineno"><a class="line" href="classvde_1_1sketch_1_1ConstraintSolver.html#a2e7b997e006b4daa6c2243bf2131fc85"> 133</a></span>&#160; <span class="keywordtype">int</span> <a class="code" href="classvde_1_1sketch_1_1ConstraintSolver.html#a2e7b997e006b4daa6c2243bf2131fc85">add_point</a>(<span class="keywordtype">double</span> x, <span class="keywordtype">double</span> y, <span class="keywordtype">bool</span> fixed = <span class="keyword">false</span>);</div>
<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; </div>
<div class="line"><a name="l00141"></a><span class="lineno"><a class="line" href="classvde_1_1sketch_1_1ConstraintSolver.html#ac19676b3a70a8fa2a5e0379f0c5f721c"> 141</a></span>&#160; <span class="keywordtype">int</span> <a class="code" href="classvde_1_1sketch_1_1ConstraintSolver.html#ac19676b3a70a8fa2a5e0379f0c5f721c">add_line</a>(<span class="keywordtype">int</span> p0, <span class="keywordtype">int</span> p1);</div>
<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; </div>
<div class="line"><a name="l00149"></a><span class="lineno"><a class="line" href="classvde_1_1sketch_1_1ConstraintSolver.html#ad4e765480991df078531640548ea665b"> 149</a></span>&#160; <span class="keywordtype">int</span> <a class="code" href="classvde_1_1sketch_1_1ConstraintSolver.html#ad4e765480991df078531640548ea665b">add_circle</a>(<span class="keywordtype">int</span> center, <span class="keywordtype">double</span> radius);</div>
<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; </div>
<div class="line"><a name="l00166"></a><span class="lineno"><a class="line" href="classvde_1_1sketch_1_1ConstraintSolver.html#aa6842123b8a570cf802a26276a540d85"> 166</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classvde_1_1sketch_1_1ConstraintSolver.html#aa6842123b8a570cf802a26276a540d85">add_constraint</a>(<a class="code" href="group__sketch.html#gaad27ecad61ea382a4ea2f61366fdd1b3">ConstraintType</a> type, <span class="keyword">const</span> std::vector&lt;int&gt;&amp; elements, <span class="keywordtype">double</span> val = 0.0);</div>
<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; </div>
<div class="line"><a name="l00173"></a><span class="lineno"><a class="line" href="classvde_1_1sketch_1_1ConstraintSolver.html#a4053dee188a1d77c9633d7606e304dba"> 173</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classvde_1_1sketch_1_1ConstraintSolver.html#a4053dee188a1d77c9633d7606e304dba">fix_point</a>(<span class="keywordtype">int</span> pid) {</div>
<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; <span class="keywordflow">if</span> (pid &gt;= 0 &amp;&amp; pid &lt; <span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span>(points_.size()))</div>
<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; points_[pid].fixed = <span class="keyword">true</span>;</div>
<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; }</div>
<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; </div>
<div class="line"><a name="l00187"></a><span class="lineno"><a class="line" href="classvde_1_1sketch_1_1ConstraintSolver.html#a4ee3bc183f2d651f89c584675b8c10d9"> 187</a></span>&#160; [[nodiscard]] <a class="code" href="structvde_1_1sketch_1_1SolverResult.html">SolverResult</a> <a class="code" href="classvde_1_1sketch_1_1ConstraintSolver.html#a4ee3bc183f2d651f89c584675b8c10d9">solve</a>(<span class="keywordtype">int</span> max_iter = 100, <span class="keywordtype">double</span> tol = 1e-8);</div>
<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; </div>
<div class="line"><a name="l00195"></a><span class="lineno"><a class="line" href="classvde_1_1sketch_1_1ConstraintSolver.html#a91d17aa7e2f52755b4af5dd424b34120"> 195</a></span>&#160; [[nodiscard]] <span class="keywordtype">int</span> <a class="code" href="classvde_1_1sketch_1_1ConstraintSolver.html#a91d17aa7e2f52755b4af5dd424b34120">degrees_of_freedom</a>() <span class="keyword">const</span>;</div>
<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; </div>
<div class="line"><a name="l00201"></a><span class="lineno"><a class="line" href="classvde_1_1sketch_1_1ConstraintSolver.html#a9d03d290c64a652a98245552583919f9"> 201</a></span>&#160; [[nodiscard]] <span class="keyword">const</span> std::vector&lt;SketchPoint&gt;&amp; <a class="code" href="classvde_1_1sketch_1_1ConstraintSolver.html#a9d03d290c64a652a98245552583919f9">points</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> points_; }</div>
<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; </div>
<div class="line"><a name="l00208"></a><span class="lineno"><a class="line" href="classvde_1_1sketch_1_1ConstraintSolver.html#a11d82c59907150da286cafe0f52cc62a"> 208</a></span>&#160; [[nodiscard]] <a class="code" href="namespacevde_1_1core.html#a78483c599a40e4f333418667a77e3862">Point2D</a> <a class="code" href="classvde_1_1sketch_1_1ConstraintSolver.html#a11d82c59907150da286cafe0f52cc62a">get_point</a>(<span class="keywordtype">int</span> <span class="keywordtype">id</span>) <span class="keyword">const</span>;</div>
<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; </div>
<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160;<span class="keyword">private</span>:</div>
<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; std::vector&lt;SketchPoint&gt; points_; </div>
<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; std::vector&lt;SketchLine&gt; lines_; </div>
<div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; std::vector&lt;SketchCircle&gt; circles_; </div>
<div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; std::vector&lt;Constraint&gt; constraints_; </div>
<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; </div>
<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; <span class="keywordtype">void</span> sync_from_vars(<span class="keyword">const</span> <span class="keywordtype">double</span>* vars, <span class="keywordtype">int</span> nv);</div>
<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; </div>
<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; <span class="keywordtype">double</span> eval_constraint(<span class="keyword">const</span> <a class="code" href="structvde_1_1sketch_1_1Constraint.html">Constraint</a>&amp; c) <span class="keyword">const</span>;</div>
<div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; </div>
<div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; <span class="keywordtype">int</span> count_equations(<span class="keyword">const</span> <a class="code" href="structvde_1_1sketch_1_1Constraint.html">Constraint</a>&amp; c) <span class="keyword">const</span>;</div>
<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; </div>
<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; <span class="keywordtype">void</span> fill_jacobian_rows(<span class="keyword">const</span> <a class="code" href="structvde_1_1sketch_1_1Constraint.html">Constraint</a>&amp; c, <span class="keywordtype">int</span> ci,</div>
<div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; <span class="keyword">const</span> std::vector&lt;int&gt;&amp; row_map,</div>
<div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; <span class="keywordtype">double</span>* J_data, <span class="keywordtype">int</span> nv, <span class="keywordtype">int</span> stride) <span class="keyword">const</span>;</div>
<div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160;};</div>
<div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; </div>
<div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160;} <span class="comment">// namespace vde::sketch</span></div>
<div class="ttc" id="aclassvde_1_1sketch_1_1ConstraintSolver_html"><div class="ttname"><a href="classvde_1_1sketch_1_1ConstraintSolver.html">vde::sketch::ConstraintSolver</a></div><div class="ttdoc">二维几何约束求解器</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00124">constraint_solver.h:124</a></div></div>
<div class="ttc" id="aclassvde_1_1sketch_1_1ConstraintSolver_html_a11d82c59907150da286cafe0f52cc62a"><div class="ttname"><a href="classvde_1_1sketch_1_1ConstraintSolver.html#a11d82c59907150da286cafe0f52cc62a">vde::sketch::ConstraintSolver::get_point</a></div><div class="ttdeci">Point2D get_point(int id) const</div><div class="ttdoc">查询点坐标</div></div>
<div class="ttc" id="aclassvde_1_1sketch_1_1ConstraintSolver_html_a2e7b997e006b4daa6c2243bf2131fc85"><div class="ttname"><a href="classvde_1_1sketch_1_1ConstraintSolver.html#a2e7b997e006b4daa6c2243bf2131fc85">vde::sketch::ConstraintSolver::add_point</a></div><div class="ttdeci">int add_point(double x, double y, bool fixed=false)</div><div class="ttdoc">添加自由点</div></div>
<div class="ttc" id="aclassvde_1_1sketch_1_1ConstraintSolver_html_a4053dee188a1d77c9633d7606e304dba"><div class="ttname"><a href="classvde_1_1sketch_1_1ConstraintSolver.html#a4053dee188a1d77c9633d7606e304dba">vde::sketch::ConstraintSolver::fix_point</a></div><div class="ttdeci">void fix_point(int pid)</div><div class="ttdoc">标记点为固定(硬约束)</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00173">constraint_solver.h:173</a></div></div>
<div class="ttc" id="aclassvde_1_1sketch_1_1ConstraintSolver_html_a4ee3bc183f2d651f89c584675b8c10d9"><div class="ttname"><a href="classvde_1_1sketch_1_1ConstraintSolver.html#a4ee3bc183f2d651f89c584675b8c10d9">vde::sketch::ConstraintSolver::solve</a></div><div class="ttdeci">SolverResult solve(int max_iter=100, double tol=1e-8)</div><div class="ttdoc">执行约束求解</div></div>
<div class="ttc" id="aclassvde_1_1sketch_1_1ConstraintSolver_html_a91d17aa7e2f52755b4af5dd424b34120"><div class="ttname"><a href="classvde_1_1sketch_1_1ConstraintSolver.html#a91d17aa7e2f52755b4af5dd424b34120">vde::sketch::ConstraintSolver::degrees_of_freedom</a></div><div class="ttdeci">int degrees_of_freedom() const</div><div class="ttdoc">计算自由度</div></div>
<div class="ttc" id="aclassvde_1_1sketch_1_1ConstraintSolver_html_a9d03d290c64a652a98245552583919f9"><div class="ttname"><a href="classvde_1_1sketch_1_1ConstraintSolver.html#a9d03d290c64a652a98245552583919f9">vde::sketch::ConstraintSolver::points</a></div><div class="ttdeci">const std::vector&lt; SketchPoint &gt; &amp; points() const</div><div class="ttdoc">当前点集访问</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00201">constraint_solver.h:201</a></div></div>
<div class="ttc" id="aclassvde_1_1sketch_1_1ConstraintSolver_html_aa6842123b8a570cf802a26276a540d85"><div class="ttname"><a href="classvde_1_1sketch_1_1ConstraintSolver.html#aa6842123b8a570cf802a26276a540d85">vde::sketch::ConstraintSolver::add_constraint</a></div><div class="ttdeci">void add_constraint(ConstraintType type, const std::vector&lt; int &gt; &amp;elements, double val=0.0)</div><div class="ttdoc">添加约束</div></div>
<div class="ttc" id="aclassvde_1_1sketch_1_1ConstraintSolver_html_ac19676b3a70a8fa2a5e0379f0c5f721c"><div class="ttname"><a href="classvde_1_1sketch_1_1ConstraintSolver.html#ac19676b3a70a8fa2a5e0379f0c5f721c">vde::sketch::ConstraintSolver::add_line</a></div><div class="ttdeci">int add_line(int p0, int p1)</div><div class="ttdoc">添加线段</div></div>
<div class="ttc" id="aclassvde_1_1sketch_1_1ConstraintSolver_html_ad4e765480991df078531640548ea665b"><div class="ttname"><a href="classvde_1_1sketch_1_1ConstraintSolver.html#ad4e765480991df078531640548ea665b">vde::sketch::ConstraintSolver::add_circle</a></div><div class="ttdeci">int add_circle(int center, double radius)</div><div class="ttdoc">添加圆</div></div>
<div class="ttc" id="agroup__sketch_html_gaad27ecad61ea382a4ea2f61366fdd1b3"><div class="ttname"><a href="group__sketch.html#gaad27ecad61ea382a4ea2f61366fdd1b3">vde::sketch::ConstraintType</a></div><div class="ttdeci">ConstraintType</div><div class="ttdoc">约束类型枚举</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00049">constraint_solver.h:49</a></div></div>
<div class="ttc" id="agroup__sketch_html_ggaad27ecad61ea382a4ea2f61366fdd1b3a06ce2a25e5d12c166a36f654dbea6012"><div class="ttname"><a href="group__sketch.html#ggaad27ecad61ea382a4ea2f61366fdd1b3a06ce2a25e5d12c166a36f654dbea6012">vde::sketch::ConstraintType::Vertical</a></div><div class="ttdeci">@ Vertical</div><div class="ttdoc">垂直线: x1 - x0 = 0 [1 eq]</div></div>
<div class="ttc" id="agroup__sketch_html_ggaad27ecad61ea382a4ea2f61366fdd1b3a0aa6f4210bf373c95eda00232e93cd98"><div class="ttname"><a href="group__sketch.html#ggaad27ecad61ea382a4ea2f61366fdd1b3a0aa6f4210bf373c95eda00232e93cd98">vde::sketch::ConstraintType::Distance</a></div><div class="ttdeci">@ Distance</div><div class="ttdoc">距离约束: |p1-p0| - d = 0 [1 eq]</div></div>
<div class="ttc" id="agroup__sketch_html_ggaad27ecad61ea382a4ea2f61366fdd1b3a2a0ef66f3350a0347070e69501922e27"><div class="ttname"><a href="group__sketch.html#ggaad27ecad61ea382a4ea2f61366fdd1b3a2a0ef66f3350a0347070e69501922e27">vde::sketch::ConstraintType::FixedPoint</a></div><div class="ttdeci">@ FixedPoint</div><div class="ttdoc">固定点(硬约束,排除变量)[0 eq — 系统预处理]</div></div>
<div class="ttc" id="agroup__sketch_html_ggaad27ecad61ea382a4ea2f61366fdd1b3a4457d440870ad6d42bab9082d9bf9b61"><div class="ttname"><a href="group__sketch.html#ggaad27ecad61ea382a4ea2f61366fdd1b3a4457d440870ad6d42bab9082d9bf9b61">vde::sketch::ConstraintType::Fixed</a></div><div class="ttdeci">@ Fixed</div><div class="ttdoc">固定点位置: x-x0=0, y-y0=0 [2 eqs]</div></div>
<div class="ttc" id="agroup__sketch_html_ggaad27ecad61ea382a4ea2f61366fdd1b3a45f4ce6c3306644b1efe333f4f8d6929"><div class="ttname"><a href="group__sketch.html#ggaad27ecad61ea382a4ea2f61366fdd1b3a45f4ce6c3306644b1efe333f4f8d6929">vde::sketch::ConstraintType::Angle</a></div><div class="ttdeci">@ Angle</div><div class="ttdoc">角度约束: atan2(cross(d0,d1), dot(d0,d1)) - θ = 0 [1 eq]</div></div>
<div class="ttc" id="agroup__sketch_html_ggaad27ecad61ea382a4ea2f61366fdd1b3a541671cb1be09d76a84ba1a873ec3fc8"><div class="ttname"><a href="group__sketch.html#ggaad27ecad61ea382a4ea2f61366fdd1b3a541671cb1be09d76a84ba1a873ec3fc8">vde::sketch::ConstraintType::Tangent</a></div><div class="ttdeci">@ Tangent</div><div class="ttdoc">相切 [1 eq]</div></div>
<div class="ttc" id="agroup__sketch_html_ggaad27ecad61ea382a4ea2f61366fdd1b3a75d5dcc04f38a8ba732bf65d0033af27"><div class="ttname"><a href="group__sketch.html#ggaad27ecad61ea382a4ea2f61366fdd1b3a75d5dcc04f38a8ba732bf65d0033af27">vde::sketch::ConstraintType::EqualLength</a></div><div class="ttdeci">@ EqualLength</div><div class="ttdoc">等长度: |d0| - |d1| = 0 [1 eq]</div></div>
<div class="ttc" id="agroup__sketch_html_ggaad27ecad61ea382a4ea2f61366fdd1b3a81126870f8ecd751b93a0f51d10a8945"><div class="ttname"><a href="group__sketch.html#ggaad27ecad61ea382a4ea2f61366fdd1b3a81126870f8ecd751b93a0f51d10a8945">vde::sketch::ConstraintType::Coincident</a></div><div class="ttdeci">@ Coincident</div><div class="ttdoc">两点重合: |p1-p0| = 0 [2 eqs: Δx=0, Δy=0]</div></div>
<div class="ttc" id="agroup__sketch_html_ggaad27ecad61ea382a4ea2f61366fdd1b3a98402eecfbcefc336954458a01752131"><div class="ttname"><a href="group__sketch.html#ggaad27ecad61ea382a4ea2f61366fdd1b3a98402eecfbcefc336954458a01752131">vde::sketch::ConstraintType::Parallel</a></div><div class="ttdeci">@ Parallel</div><div class="ttdoc">两线平行: cross(d0, d1) = 0 [1 eq]</div></div>
<div class="ttc" id="agroup__sketch_html_ggaad27ecad61ea382a4ea2f61366fdd1b3ac1b5fa03ecdb95d4a45dd1c40b02527f"><div class="ttname"><a href="group__sketch.html#ggaad27ecad61ea382a4ea2f61366fdd1b3ac1b5fa03ecdb95d4a45dd1c40b02527f">vde::sketch::ConstraintType::Horizontal</a></div><div class="ttdeci">@ Horizontal</div><div class="ttdoc">水平线: y1 - y0 = 0 [1 eq]</div></div>
<div class="ttc" id="agroup__sketch_html_ggaad27ecad61ea382a4ea2f61366fdd1b3acd8b3187c4074a4bb810f1fef79fd52a"><div class="ttname"><a href="group__sketch.html#ggaad27ecad61ea382a4ea2f61366fdd1b3acd8b3187c4074a4bb810f1fef79fd52a">vde::sketch::ConstraintType::Perpendicular</a></div><div class="ttdeci">@ Perpendicular</div><div class="ttdoc">两线垂直: dot(d0, d1) = 0 [1 eq]</div></div>
<div class="ttc" id="agroup__sketch_html_ggaad27ecad61ea382a4ea2f61366fdd1b3ad1106ccca74e98877ed6d7890c70bb2c"><div class="ttname"><a href="group__sketch.html#ggaad27ecad61ea382a4ea2f61366fdd1b3ad1106ccca74e98877ed6d7890c70bb2c">vde::sketch::ConstraintType::Radius</a></div><div class="ttdeci">@ Radius</div><div class="ttdoc">半径约束 [1 eq]</div></div>
<div class="ttc" id="agroup__sketch_html_ggaad27ecad61ea382a4ea2f61366fdd1b3ae02297ae7a55ef0dcf7f1aab456e9c14"><div class="ttname"><a href="group__sketch.html#ggaad27ecad61ea382a4ea2f61366fdd1b3ae02297ae7a55ef0dcf7f1aab456e9c14">vde::sketch::ConstraintType::Concentric</a></div><div class="ttdeci">@ Concentric</div><div class="ttdoc">同心 [2 eqs]</div></div>
<div class="ttc" id="anamespacevde_1_1core_html_a78483c599a40e4f333418667a77e3862"><div class="ttname"><a href="namespacevde_1_1core.html#a78483c599a40e4f333418667a77e3862">vde::core::Point2D</a></div><div class="ttdeci">foundation::Point2D Point2D</div><div class="ttdoc">双精度二维点(重新导出)</div><div class="ttdef"><b>Definition:</b> <a href="point_8h_source.html#l00029">point.h:29</a></div></div>
<div class="ttc" id="anamespacevde_1_1core_html_ad9a16d9a4c7eba0f41fd91110c8e6381"><div class="ttname"><a href="namespacevde_1_1core.html#ad9a16d9a4c7eba0f41fd91110c8e6381">vde::core::Vector2D</a></div><div class="ttdeci">foundation::Vector2D Vector2D</div><div class="ttdoc">双精度二维向量(重新导出)</div><div class="ttdef"><b>Definition:</b> <a href="point_8h_source.html#l00047">point.h:47</a></div></div>
<div class="ttc" id="anamespacevde_1_1sketch_html"><div class="ttname"><a href="namespacevde_1_1sketch.html">vde::sketch</a></div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00007">constraint_solver.h:7</a></div></div>
<div class="ttc" id="apoint_8h_html"><div class="ttname"><a href="point_8h.html">point.h</a></div></div>
<div class="ttc" id="astructvde_1_1sketch_1_1Constraint_html"><div class="ttname"><a href="structvde_1_1sketch_1_1Constraint.html">vde::sketch::Constraint</a></div><div class="ttdoc">约束实例</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00069">constraint_solver.h:69</a></div></div>
<div class="ttc" id="astructvde_1_1sketch_1_1Constraint_html_a091a4281a6a2760024c06b55a0778d2d"><div class="ttname"><a href="structvde_1_1sketch_1_1Constraint.html#a091a4281a6a2760024c06b55a0778d2d">vde::sketch::Constraint::value</a></div><div class="ttdeci">double value</div><div class="ttdoc">距离/角度值</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00072">constraint_solver.h:72</a></div></div>
<div class="ttc" id="astructvde_1_1sketch_1_1Constraint_html_a5d2f91bcfeda0300dc519429e871ff31"><div class="ttname"><a href="structvde_1_1sketch_1_1Constraint.html#a5d2f91bcfeda0300dc519429e871ff31">vde::sketch::Constraint::type</a></div><div class="ttdeci">ConstraintType type</div><div class="ttdoc">约束类型</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00070">constraint_solver.h:70</a></div></div>
<div class="ttc" id="astructvde_1_1sketch_1_1Constraint_html_a84117061999964ad028555927a969c35"><div class="ttname"><a href="structvde_1_1sketch_1_1Constraint.html#a84117061999964ad028555927a969c35">vde::sketch::Constraint::elements</a></div><div class="ttdeci">std::vector&lt; int &gt; elements</div><div class="ttdoc">引用的元素索引(点/线/圆 ID</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00071">constraint_solver.h:71</a></div></div>
<div class="ttc" id="astructvde_1_1sketch_1_1SketchCircle_html"><div class="ttname"><a href="structvde_1_1sketch_1_1SketchCircle.html">vde::sketch::SketchCircle</a></div><div class="ttdoc">草图圆元素</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00034">constraint_solver.h:34</a></div></div>
<div class="ttc" id="astructvde_1_1sketch_1_1SketchCircle_html_a37b622c720a9d414e0d0fb27a3f28520"><div class="ttname"><a href="structvde_1_1sketch_1_1SketchCircle.html#a37b622c720a9d414e0d0fb27a3f28520">vde::sketch::SketchCircle::radius</a></div><div class="ttdeci">double radius</div><div class="ttdoc">半径</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00037">constraint_solver.h:37</a></div></div>
<div class="ttc" id="astructvde_1_1sketch_1_1SketchCircle_html_a5f3fe16fd807834bc9767ea5379f66cf"><div class="ttname"><a href="structvde_1_1sketch_1_1SketchCircle.html#a5f3fe16fd807834bc9767ea5379f66cf">vde::sketch::SketchCircle::id</a></div><div class="ttdeci">int id</div><div class="ttdoc">唯一标识</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00035">constraint_solver.h:35</a></div></div>
<div class="ttc" id="astructvde_1_1sketch_1_1SketchCircle_html_a6e7e40a8971eccfeb07d32b7db8a9225"><div class="ttname"><a href="structvde_1_1sketch_1_1SketchCircle.html#a6e7e40a8971eccfeb07d32b7db8a9225">vde::sketch::SketchCircle::center</a></div><div class="ttdeci">int center</div><div class="ttdoc">圆心点 ID</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00036">constraint_solver.h:36</a></div></div>
<div class="ttc" id="astructvde_1_1sketch_1_1SketchLine_html"><div class="ttname"><a href="structvde_1_1sketch_1_1SketchLine.html">vde::sketch::SketchLine</a></div><div class="ttdoc">草图线段元素</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00025">constraint_solver.h:25</a></div></div>
<div class="ttc" id="astructvde_1_1sketch_1_1SketchLine_html_a120bc990adefeb2423eaf311f6db9673"><div class="ttname"><a href="structvde_1_1sketch_1_1SketchLine.html#a120bc990adefeb2423eaf311f6db9673">vde::sketch::SketchLine::p1</a></div><div class="ttdeci">int p1</div><div class="ttdoc">起止点 ID</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00027">constraint_solver.h:27</a></div></div>
<div class="ttc" id="astructvde_1_1sketch_1_1SketchLine_html_a9a776c571c882655ec4eec92d112febc"><div class="ttname"><a href="structvde_1_1sketch_1_1SketchLine.html#a9a776c571c882655ec4eec92d112febc">vde::sketch::SketchLine::id</a></div><div class="ttdeci">int id</div><div class="ttdoc">唯一标识</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00026">constraint_solver.h:26</a></div></div>
<div class="ttc" id="astructvde_1_1sketch_1_1SketchLine_html_afcffab563825b270b7693c486e573812"><div class="ttname"><a href="structvde_1_1sketch_1_1SketchLine.html#afcffab563825b270b7693c486e573812">vde::sketch::SketchLine::p0</a></div><div class="ttdeci">int p0</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00027">constraint_solver.h:27</a></div></div>
<div class="ttc" id="astructvde_1_1sketch_1_1SketchPoint_html"><div class="ttname"><a href="structvde_1_1sketch_1_1SketchPoint.html">vde::sketch::SketchPoint</a></div><div class="ttdoc">草图点元素</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00015">constraint_solver.h:15</a></div></div>
<div class="ttc" id="astructvde_1_1sketch_1_1SketchPoint_html_a2a487c20a03599cb94ec7538c3e354aa"><div class="ttname"><a href="structvde_1_1sketch_1_1SketchPoint.html#a2a487c20a03599cb94ec7538c3e354aa">vde::sketch::SketchPoint::fixed</a></div><div class="ttdeci">bool fixed</div><div class="ttdoc">是否固定(排除自由度)</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00018">constraint_solver.h:18</a></div></div>
<div class="ttc" id="astructvde_1_1sketch_1_1SketchPoint_html_a2bc08ef95871e0e8d72f8429f5a242c4"><div class="ttname"><a href="structvde_1_1sketch_1_1SketchPoint.html#a2bc08ef95871e0e8d72f8429f5a242c4">vde::sketch::SketchPoint::pos</a></div><div class="ttdeci">Point2D pos</div><div class="ttdoc">2D 坐标</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00017">constraint_solver.h:17</a></div></div>
<div class="ttc" id="astructvde_1_1sketch_1_1SketchPoint_html_acccc2685724fe5cb980e611418711204"><div class="ttname"><a href="structvde_1_1sketch_1_1SketchPoint.html#acccc2685724fe5cb980e611418711204">vde::sketch::SketchPoint::id</a></div><div class="ttdeci">int id</div><div class="ttdoc">唯一标识</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00016">constraint_solver.h:16</a></div></div>
<div class="ttc" id="astructvde_1_1sketch_1_1SolverResult_html"><div class="ttname"><a href="structvde_1_1sketch_1_1SolverResult.html">vde::sketch::SolverResult</a></div><div class="ttdoc">求解器返回结果</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00079">constraint_solver.h:79</a></div></div>
<div class="ttc" id="astructvde_1_1sketch_1_1SolverResult_html_a4534705cd9e13ad092d51a00c17cb3f7"><div class="ttname"><a href="structvde_1_1sketch_1_1SolverResult.html#a4534705cd9e13ad092d51a00c17cb3f7">vde::sketch::SolverResult::converged</a></div><div class="ttdeci">bool converged</div><div class="ttdoc">是否收敛</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00080">constraint_solver.h:80</a></div></div>
<div class="ttc" id="astructvde_1_1sketch_1_1SolverResult_html_a556b507d063c6c588784fade9885890b"><div class="ttname"><a href="structvde_1_1sketch_1_1SolverResult.html#a556b507d063c6c588784fade9885890b">vde::sketch::SolverResult::residual</a></div><div class="ttdeci">double residual</div><div class="ttdoc">最终残差(均方根)</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00082">constraint_solver.h:82</a></div></div>
<div class="ttc" id="astructvde_1_1sketch_1_1SolverResult_html_a73b4ec71c9e6ced2d0788f2b4de7656b"><div class="ttname"><a href="structvde_1_1sketch_1_1SolverResult.html#a73b4ec71c9e6ced2d0788f2b4de7656b">vde::sketch::SolverResult::message</a></div><div class="ttdeci">std::string message</div><div class="ttdoc">诊断信息(成功或失败原因)</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00084">constraint_solver.h:84</a></div></div>
<div class="ttc" id="astructvde_1_1sketch_1_1SolverResult_html_aa4bc55e6c1a6f14a6c53ec363f12168e"><div class="ttname"><a href="structvde_1_1sketch_1_1SolverResult.html#aa4bc55e6c1a6f14a6c53ec363f12168e">vde::sketch::SolverResult::iterations</a></div><div class="ttdeci">int iterations</div><div class="ttdoc">实际迭代次数</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00081">constraint_solver.h:81</a></div></div>
<div class="ttc" id="astructvde_1_1sketch_1_1SolverResult_html_acea0835132af8532c6685b399a261bcf"><div class="ttname"><a href="structvde_1_1sketch_1_1SolverResult.html#acea0835132af8532c6685b399a261bcf">vde::sketch::SolverResult::points</a></div><div class="ttdeci">std::vector&lt; Point2D &gt; points</div><div class="ttdoc">求解后的点坐标</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00083">constraint_solver.h:83</a></div></div>
</div><!-- fragment --></div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li><li class="navelem"><a class="el" href="dir_36dfe8171299c47a6036082559f11ede.html">vde</a></li><li class="navelem"><a class="el" href="dir_23dccc78e6da89ae3b212c16b4df1bfc.html">sketch</a></li><li class="navelem"><a class="el" href="constraint__solver_8h.html">constraint_solver.h</a></li>
<li class="footer">生成于 2026年 七月 24日 星期五 11:21:23 , 为 ViewDesignEngine使用 <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1 </li>
</ul>
</div>
</body>
</html>