mirror of
https://github.com/mpusz/mp-units.git
synced 2025-07-30 02:17:16 +02:00
docs: the affine space chapter rewritten
This commit is contained in:
216
docs/users_guide/framework_basics/affine_space_1.svg
Normal file
216
docs/users_guide/framework_basics/affine_space_1.svg
Normal file
@ -0,0 +1,216 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="96.519447mm"
|
||||
height="18.977507mm"
|
||||
viewBox="0 0 96.519447 18.977507"
|
||||
version="1.1"
|
||||
id="svg1"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs1">
|
||||
<marker
|
||||
style="overflow:visible"
|
||||
id="DartArrow-7"
|
||||
refX="0"
|
||||
refY="0"
|
||||
orient="auto-start-reverse"
|
||||
markerWidth="1"
|
||||
markerHeight="1"
|
||||
viewBox="0 0 1 1"
|
||||
preserveAspectRatio="xMidYMid">
|
||||
<path
|
||||
style="fill:context-stroke;fill-rule:evenodd;stroke:none"
|
||||
d="M 0,0 5,-5 -12.5,0 5,5 Z"
|
||||
transform="scale(-0.5)"
|
||||
id="path6-4" />
|
||||
</marker>
|
||||
</defs>
|
||||
<g
|
||||
id="layer1"
|
||||
transform="translate(-25.688031,-5.1378845)">
|
||||
<path
|
||||
style="fill:#000000;stroke:#000000;stroke-width:0.5;stroke-dasharray:none;marker-end:url(#DartArrow-7)"
|
||||
d="M 25.688031,20.190804 H 118.68548"
|
||||
id="path4-1" />
|
||||
<path
|
||||
style="fill:#000000;stroke:#000000;stroke-width:0.381298;stroke-dasharray:none"
|
||||
d="m 38.972582,19.150746 v 2.080116"
|
||||
id="path7-6" />
|
||||
<path
|
||||
style="fill:#000000;stroke:#a4a4a4;stroke-width:0.297823;stroke-dasharray:1.19129, 0.297823;stroke-dashoffset:0;stroke-opacity:1"
|
||||
d="M 38.972582,6.4770492 V 18.940594"
|
||||
id="path2-2-2" />
|
||||
<path
|
||||
style="fill:#000000;stroke:#a4a4a4;stroke-width:0.298;stroke-dasharray:1.192, 0.298;stroke-dashoffset:0;stroke-opacity:1"
|
||||
d="M 106.70024,6.477049 V 18.940594"
|
||||
id="path2-2-1-0" />
|
||||
<path
|
||||
style="fill:#000000;stroke:#a4a4a4;stroke-width:0.298;stroke-dasharray:1.192, 0.298;stroke-dashoffset:0;stroke-opacity:1"
|
||||
d="M 94.493026,6.4770489 V 18.940594"
|
||||
id="path2-2-1-0-0" />
|
||||
<path
|
||||
style="fill:#000000;stroke:#000000;stroke-width:0.381298;stroke-dasharray:none"
|
||||
d="m 94.493026,19.150746 v 2.080116"
|
||||
id="path2-5-2" />
|
||||
<path
|
||||
style="fill:#000000;stroke:#000000;stroke-width:0.381298;stroke-dasharray:none"
|
||||
d="m 106.70024,19.150746 v 2.080116"
|
||||
id="path2-5-7-8" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-weight:bold;font-size:2.46944px;font-family:Arial;-inkscape-font-specification:'Arial Bold';fill:#000000;stroke:#000000;stroke-width:0;stroke-dasharray:none"
|
||||
x="38.294933"
|
||||
y="23.605515"
|
||||
id="text2-1"><tspan
|
||||
id="tspan2-4"
|
||||
style="font-size:2.46944px;stroke-width:0;stroke-dasharray:none"
|
||||
x="38.294933"
|
||||
y="23.605515">0</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-weight:bold;font-size:2.46944px;font-family:Arial;-inkscape-font-specification:'Arial Bold';fill:#d40000;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-dasharray:none"
|
||||
x="92.443802"
|
||||
y="23.628254"
|
||||
id="text2-2-9"><tspan
|
||||
id="tspan2-9-9"
|
||||
style="font-size:2.46944px;fill:#d40000;fill-opacity:1;stroke-width:0;stroke-dasharray:none"
|
||||
x="92.443802"
|
||||
y="23.628254">qp1</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-weight:bold;font-size:2.11667px;font-family:Arial;-inkscape-font-specification:'Arial Bold';fill:#d40000;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-dasharray:none"
|
||||
x="65.724129"
|
||||
y="15.90378"
|
||||
id="text2-2-7-49"><tspan
|
||||
id="tspan2-9-0-96"
|
||||
style="font-size:2.11667px;fill:#d40000;fill-opacity:1;stroke-width:0;stroke-dasharray:none"
|
||||
x="65.724129"
|
||||
y="15.90378">q1</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-weight:bold;font-size:2.46944px;font-family:Arial;-inkscape-font-specification:'Arial Bold';fill:#0000dd;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-dasharray:none"
|
||||
x="104.51233"
|
||||
y="23.628254"
|
||||
id="text2-2-2-31"><tspan
|
||||
id="tspan2-9-6-4"
|
||||
style="font-size:2.46944px;fill:#0000dd;fill-opacity:1;stroke-width:0;stroke-dasharray:none"
|
||||
x="104.51233"
|
||||
y="23.628254">qp2</tspan></text>
|
||||
<g
|
||||
id="path8-0">
|
||||
<path
|
||||
style="color:#000000;fill:#0000dd;-inkscape-stroke:none"
|
||||
d="M 38.859025,16.958625 H 93.883213"
|
||||
id="path19" />
|
||||
<path
|
||||
style="color:#000000;fill:#d40000;-inkscape-stroke:none"
|
||||
d="m 38.859375,16.833984 v 0.25 h 55.023437 v -0.25 z"
|
||||
id="path20" />
|
||||
<g
|
||||
id="g18">
|
||||
<path
|
||||
style="color:#000000;fill:#d40000;-inkscape-stroke:none"
|
||||
d="m 92.587891,16.050781 -0.158204,0.316406 1.183594,0.591797 -1.183594,0.591797 0.158204,0.316406 1.816406,-0.908203 z"
|
||||
id="path18" />
|
||||
</g>
|
||||
</g>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-weight:bold;font-size:2.11667px;font-family:Arial;-inkscape-font-specification:'Arial Bold';mix-blend-mode:normal;fill:#a4a4a4;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-dasharray:none"
|
||||
x="96.030548"
|
||||
y="6.683012"
|
||||
id="text2-2-7-49-5"><tspan
|
||||
id="tspan2-9-0-96-4"
|
||||
style="font-size:2.11667px;fill:#a4a4a4;fill-opacity:1;stroke-width:0;stroke-dasharray:none"
|
||||
x="96.030548"
|
||||
y="6.683012">qp2 - qp1</tspan></text>
|
||||
<g
|
||||
id="path8-0-9">
|
||||
<path
|
||||
style="color:#000000;fill:#a4a4a4;fill-opacity:0.960784;-inkscape-stroke:none"
|
||||
d="M 94.668605,8.1347259 H 106.1527"
|
||||
id="path13" />
|
||||
<path
|
||||
style="color:#000000;fill:#a4a4a4;fill-opacity:0.960784;-inkscape-stroke:none"
|
||||
d="m 94.667969,8.0097656 v 0.25 h 11.484371 v -0.25 z"
|
||||
id="path14" />
|
||||
<g
|
||||
id="g12">
|
||||
<path
|
||||
style="color:#000000;fill:#a4a4a4;-inkscape-stroke:none"
|
||||
d="m 104.85742,7.2265625 -0.1582,0.3164062 1.18359,0.5917969 -1.18359,0.5917969 0.1582,0.3164063 1.81641,-0.9082032 z"
|
||||
id="path12" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
id="path3-2-6">
|
||||
<path
|
||||
style="color:#000000;fill:#0000dd;-inkscape-stroke:none"
|
||||
d="M 38.947347,12.639233 H 106.08562"
|
||||
id="path16" />
|
||||
<path
|
||||
style="color:#000000;fill:#0000dd;-inkscape-stroke:none"
|
||||
d="m 38.947266,12.513672 v 0.25 h 67.138674 v -0.25 z"
|
||||
id="path17" />
|
||||
<g
|
||||
id="g15">
|
||||
<path
|
||||
style="color:#000000;fill:#0000dd;-inkscape-stroke:none"
|
||||
d="m 104.78906,11.730469 -0.1582,0.316406 1.18359,0.591797 -1.18359,0.591797 0.1582,0.316406 1.81641,-0.908203 z"
|
||||
id="path15" />
|
||||
</g>
|
||||
</g>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-weight:bold;font-size:2.11667px;font-family:Arial;-inkscape-font-specification:'Arial Bold';fill:#0000dd;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-dasharray:none"
|
||||
x="71.684494"
|
||||
y="11.65577"
|
||||
id="text2-2-2-5-1"><tspan
|
||||
id="tspan2-9-6-2-85"
|
||||
style="font-size:2.11667px;fill:#0000dd;fill-opacity:1;stroke-width:0;stroke-dasharray:none"
|
||||
x="71.684494"
|
||||
y="11.65577">q2</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-weight:bold;font-size:2.82222px;font-family:Arial;-inkscape-font-specification:'Arial Bold';fill:#000000;stroke:#000000;stroke-width:0"
|
||||
x="120.04948"
|
||||
y="23.910408"
|
||||
id="text1"><tspan
|
||||
id="tspan1"
|
||||
style="font-size:2.82222px;stroke-width:0"
|
||||
x="120.04948"
|
||||
y="23.910408">Q</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-weight:bold;font-size:2.11667px;font-family:Arial;-inkscape-font-specification:'Arial Bold';mix-blend-mode:normal;fill:#a4a4a4;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-dasharray:none"
|
||||
x="54.035492"
|
||||
y="6.6788778"
|
||||
id="text2-2-7-49-5-3-2-6-2"><tspan
|
||||
id="tspan2-9-0-96-4-1-8-8-1"
|
||||
style="font-size:2.11667px;fill:#a4a4a4;fill-opacity:1;stroke-width:0;stroke-dasharray:none"
|
||||
x="54.035492"
|
||||
y="6.6788778">qp1.quantity_from_zero()</tspan></text>
|
||||
<g
|
||||
id="path8-0-9-8-0-0-0"
|
||||
transform="translate(-0.21367231,-90.9375)">
|
||||
<path
|
||||
style="color:#000000;fill:#a4a4a4;fill-opacity:0.960784;-inkscape-stroke:none"
|
||||
d="M 39.107719,99.071826 H 94.115772"
|
||||
id="path56-0" />
|
||||
<path
|
||||
style="color:#000000;fill:#a4a4a4;fill-opacity:0.960784;-inkscape-stroke:none"
|
||||
d="m 39.107422,98.947266 v 0.25 h 55.007812 v -0.25 z"
|
||||
id="path57-8" />
|
||||
<g
|
||||
id="g55-4">
|
||||
<path
|
||||
style="color:#000000;fill:#a4a4a4;-inkscape-stroke:none"
|
||||
d="m 92.820312,98.164062 -0.158203,0.316407 1.183594,0.591797 -1.183594,0.591796 0.158203,0.316407 1.816407,-0.908203 z"
|
||||
id="path55-9" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 8.6 KiB |
216
docs/users_guide/framework_basics/affine_space_2.svg
Normal file
216
docs/users_guide/framework_basics/affine_space_2.svg
Normal file
@ -0,0 +1,216 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="96.403236mm"
|
||||
height="18.904934mm"
|
||||
viewBox="0 0 96.403236 18.904934"
|
||||
version="1.1"
|
||||
id="svg1"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs1">
|
||||
<marker
|
||||
style="overflow:visible"
|
||||
id="DartArrow"
|
||||
refX="0"
|
||||
refY="0"
|
||||
orient="auto-start-reverse"
|
||||
markerWidth="1"
|
||||
markerHeight="1"
|
||||
viewBox="0 0 1 1"
|
||||
preserveAspectRatio="xMidYMid">
|
||||
<path
|
||||
style="fill:context-stroke;fill-rule:evenodd;stroke:none"
|
||||
d="M 0,0 5,-5 -12.5,0 5,5 Z"
|
||||
transform="scale(-0.5)"
|
||||
id="path6" />
|
||||
</marker>
|
||||
</defs>
|
||||
<g
|
||||
id="layer1"
|
||||
transform="translate(-25.804236,-30.190578)">
|
||||
<path
|
||||
style="fill:#000000;stroke:#000000;stroke-width:0.5;stroke-dasharray:none;marker-end:url(#DartArrow)"
|
||||
d="M 25.804236,45.161105 H 118.80168"
|
||||
id="path1" />
|
||||
<path
|
||||
style="fill:#000000;stroke:#000000;stroke-width:0.381298;stroke-dasharray:none"
|
||||
d="m 39.088787,44.121047 v 2.080116"
|
||||
id="path2" />
|
||||
<path
|
||||
style="fill:#000000;stroke:#a4a4a4;stroke-width:0.297823;stroke-dasharray:1.19129, 0.297823;stroke-dashoffset:0;stroke-opacity:1"
|
||||
d="M 39.088787,32.382797 V 43.910895"
|
||||
id="path2-2" />
|
||||
<path
|
||||
style="fill:#000000;stroke:#000000;stroke-width:0.381298;stroke-dasharray:none"
|
||||
d="m 94.609231,44.121047 v 2.080116"
|
||||
id="path2-5" />
|
||||
<path
|
||||
style="fill:#000000;stroke:#000000;stroke-width:0.381298;stroke-dasharray:none"
|
||||
d="m 106.81644,44.121047 v 2.080116"
|
||||
id="path2-5-7" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-weight:bold;font-size:2.46944px;font-family:Arial;-inkscape-font-specification:'Arial Bold';fill:#000000;stroke:#000000;stroke-width:0;stroke-dasharray:none"
|
||||
x="35.693306"
|
||||
y="48.575817"
|
||||
id="text2"><tspan
|
||||
id="tspan2"
|
||||
style="font-size:2.46944px;stroke-width:0;stroke-dasharray:none"
|
||||
x="35.693306"
|
||||
y="48.575817">origin</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-weight:bold;font-size:2.46944px;font-family:Arial;-inkscape-font-specification:'Arial Bold';fill:#d40000;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-dasharray:none"
|
||||
x="92.560005"
|
||||
y="48.598557"
|
||||
id="text2-2"><tspan
|
||||
id="tspan2-9"
|
||||
style="font-size:2.46944px;fill:#d40000;fill-opacity:1;stroke-width:0;stroke-dasharray:none"
|
||||
x="92.560005"
|
||||
y="48.598557">qp1</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-weight:bold;font-size:2.11667px;font-family:Arial;-inkscape-font-specification:'Arial Bold';fill:#d40000;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-dasharray:none"
|
||||
x="65.840332"
|
||||
y="40.874092"
|
||||
id="text2-2-7"><tspan
|
||||
id="tspan2-9-0"
|
||||
style="font-size:2.11667px;fill:#d40000;fill-opacity:1;stroke-width:0;stroke-dasharray:none"
|
||||
x="65.840332"
|
||||
y="40.874092">q1</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-weight:bold;font-size:2.46944px;font-family:Arial;-inkscape-font-specification:'Arial Bold';fill:#0000dd;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-dasharray:none"
|
||||
x="104.62855"
|
||||
y="48.598557"
|
||||
id="text2-2-2"><tspan
|
||||
id="tspan2-9-6"
|
||||
style="font-size:2.46944px;fill:#0000dd;fill-opacity:1;stroke-width:0;stroke-dasharray:none"
|
||||
x="104.62855"
|
||||
y="48.598557">qp2</tspan></text>
|
||||
<g
|
||||
id="path3">
|
||||
<path
|
||||
style="color:#000000;fill:#0000dd;-inkscape-stroke:none"
|
||||
d="M 39.107522,41.928926 H 93.999418"
|
||||
id="path28" />
|
||||
<path
|
||||
style="color:#000000;fill:#d40000;-inkscape-stroke:none"
|
||||
d="m 39.107422,41.804687 v 0.25 H 94 v -0.25 z"
|
||||
id="path29" />
|
||||
<g
|
||||
id="g27">
|
||||
<path
|
||||
style="color:#000000;fill:#d40000;-inkscape-stroke:none"
|
||||
d="m 92.703125,41.021484 -0.158203,0.316407 1.183594,0.591796 -1.183594,0.591797 0.158203,0.316407 1.816406,-0.908204 z"
|
||||
id="path27" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
id="path3-2">
|
||||
<path
|
||||
style="color:#000000;fill:#0000dd;-inkscape-stroke:none"
|
||||
d="M 38.997406,37.609536 H 106.20182"
|
||||
id="path22" />
|
||||
<path
|
||||
style="color:#000000;fill:#0000dd;-inkscape-stroke:none"
|
||||
d="m 38.998047,37.484375 v 0.25 h 67.203123 v -0.25 z"
|
||||
id="path23" />
|
||||
<g
|
||||
id="g21">
|
||||
<path
|
||||
style="color:#000000;fill:#0000dd;-inkscape-stroke:none"
|
||||
d="m 104.90625,36.701172 -0.1582,0.316406 1.18359,0.591797 -1.18359,0.591797 0.1582,0.316406 1.81641,-0.908203 z"
|
||||
id="path21" />
|
||||
</g>
|
||||
</g>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-weight:bold;font-size:2.11667px;font-family:Arial;-inkscape-font-specification:'Arial Bold';fill:#0000dd;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-dasharray:none"
|
||||
x="71.800697"
|
||||
y="36.626076"
|
||||
id="text2-2-2-5"><tspan
|
||||
id="tspan2-9-6-2"
|
||||
style="font-size:2.11667px;fill:#0000dd;fill-opacity:1;stroke-width:0;stroke-dasharray:none"
|
||||
x="71.800697"
|
||||
y="36.626076">q2</tspan></text>
|
||||
<path
|
||||
style="fill:#000000;stroke:#a4a4a4;stroke-width:0.298;stroke-dasharray:1.192, 0.298;stroke-dashoffset:0;stroke-opacity:1"
|
||||
d="M 106.77479,31.529741 V 43.993285"
|
||||
id="path2-2-1-0-3" />
|
||||
<path
|
||||
style="fill:#000000;stroke:#a4a4a4;stroke-width:0.298;stroke-dasharray:1.192, 0.298;stroke-dashoffset:0;stroke-opacity:1"
|
||||
d="M 94.567582,31.529741 V 43.993285"
|
||||
id="path2-2-1-0-0-3" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-weight:bold;font-size:2.11667px;font-family:Arial;-inkscape-font-specification:'Arial Bold';mix-blend-mode:normal;fill:#a4a4a4;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-dasharray:none"
|
||||
x="96.105103"
|
||||
y="31.735704"
|
||||
id="text2-2-7-49-5-3"><tspan
|
||||
id="tspan2-9-0-96-4-1"
|
||||
style="font-size:2.11667px;fill:#a4a4a4;fill-opacity:1;stroke-width:0;stroke-dasharray:none"
|
||||
x="96.105103"
|
||||
y="31.735704">qp2 - qp1</tspan></text>
|
||||
<g
|
||||
id="path8-0-9-8">
|
||||
<path
|
||||
style="color:#000000;fill:#a4a4a4;fill-opacity:0.960784;-inkscape-stroke:none"
|
||||
d="M 94.677011,33.187418 H 106.22725"
|
||||
id="path25" />
|
||||
<path
|
||||
style="color:#000000;fill:#a4a4a4;fill-opacity:0.960784;-inkscape-stroke:none"
|
||||
d="m 94.677734,33.0625 v 0.25 h 11.548826 v -0.25 z"
|
||||
id="path26" />
|
||||
<g
|
||||
id="g24">
|
||||
<path
|
||||
style="color:#000000;fill:#a4a4a4;-inkscape-stroke:none"
|
||||
d="m 104.93164,32.279297 -0.1582,0.316406 1.18359,0.591797 -1.18359,0.591797 0.1582,0.316406 1.81641,-0.908203 z"
|
||||
id="path24" />
|
||||
</g>
|
||||
</g>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-weight:bold;font-size:2.82222px;font-family:Arial;-inkscape-font-specification:'Arial Bold';fill:#000000;stroke:#000000;stroke-width:0"
|
||||
x="120.04948"
|
||||
y="48.880711"
|
||||
id="text1-1"><tspan
|
||||
id="tspan1-0"
|
||||
style="font-size:2.82222px;stroke-width:0"
|
||||
x="120.04948"
|
||||
y="48.880711">Q</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-weight:bold;font-size:2.11667px;font-family:Arial;-inkscape-font-specification:'Arial Bold';mix-blend-mode:normal;fill:#a4a4a4;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-dasharray:none"
|
||||
x="53.892708"
|
||||
y="31.731571"
|
||||
id="text2-2-7-49-5-3-2-6-2-8"><tspan
|
||||
id="tspan2-9-0-96-4-1-8-8-1-5"
|
||||
style="font-size:2.11667px;fill:#a4a4a4;fill-opacity:1;stroke-width:0;stroke-dasharray:none"
|
||||
x="53.892708"
|
||||
y="31.731571">qp1.quantity_from(origin)</tspan></text>
|
||||
<g
|
||||
id="path8-0-9-8-0-0-0-5"
|
||||
transform="translate(-0.11139435,-65.884765)">
|
||||
<path
|
||||
style="color:#000000;fill:#a4a4a4;fill-opacity:0.960784;-inkscape-stroke:none"
|
||||
d="M 39.107719,99.071826 H 94.115772"
|
||||
id="path56-0-5" />
|
||||
<path
|
||||
style="color:#000000;fill:#a4a4a4;fill-opacity:0.960784;-inkscape-stroke:none"
|
||||
d="m 39.107422,98.947266 v 0.25 h 55.007812 v -0.25 z"
|
||||
id="path57-8-2" />
|
||||
<g
|
||||
id="g55-4-6">
|
||||
<path
|
||||
style="color:#000000;fill:#a4a4a4;-inkscape-stroke:none"
|
||||
d="m 92.820312,98.164062 -0.158203,0.316407 1.183594,0.591797 -1.183594,0.591796 0.158203,0.316407 1.816407,-0.908203 z"
|
||||
id="path55-9-4" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 8.6 KiB |
291
docs/users_guide/framework_basics/affine_space_3.svg
Normal file
291
docs/users_guide/framework_basics/affine_space_3.svg
Normal file
@ -0,0 +1,291 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="96.999374mm"
|
||||
height="21.958826mm"
|
||||
viewBox="0 0 96.999374 21.958826"
|
||||
version="1.1"
|
||||
id="svg1"
|
||||
inkscape:version="1.3.2 (091e20e, 2023-11-25, custom)"
|
||||
sodipodi:docname="affine space.svg"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<sodipodi:namedview
|
||||
id="namedview1"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#000000"
|
||||
borderopacity="0.25"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:document-units="mm"
|
||||
inkscape:zoom="2.8284271"
|
||||
inkscape:cx="314.13219"
|
||||
inkscape:cy="405.87929"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1018"
|
||||
inkscape:window-x="-6"
|
||||
inkscape:window-y="-6"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="layer1" />
|
||||
<defs
|
||||
id="defs1">
|
||||
<marker
|
||||
style="overflow:visible"
|
||||
id="DartArrow-4"
|
||||
refX="0"
|
||||
refY="0"
|
||||
orient="auto-start-reverse"
|
||||
inkscape:stockid="Dart arrow"
|
||||
markerWidth="1"
|
||||
markerHeight="1"
|
||||
viewBox="0 0 1 1"
|
||||
inkscape:isstock="true"
|
||||
inkscape:collect="always"
|
||||
preserveAspectRatio="xMidYMid">
|
||||
<path
|
||||
style="fill:context-stroke;fill-rule:evenodd;stroke:none"
|
||||
d="M 0,0 5,-5 -12.5,0 5,5 Z"
|
||||
transform="scale(-0.5)"
|
||||
id="path6-0" />
|
||||
</marker>
|
||||
<marker
|
||||
style="overflow:visible"
|
||||
id="DartArrow-4-63"
|
||||
refX="0"
|
||||
refY="0"
|
||||
orient="auto-start-reverse"
|
||||
inkscape:stockid="Dart arrow"
|
||||
markerWidth="1"
|
||||
markerHeight="1"
|
||||
viewBox="0 0 1 1"
|
||||
inkscape:isstock="true"
|
||||
inkscape:collect="always"
|
||||
preserveAspectRatio="xMidYMid">
|
||||
<path
|
||||
style="fill:context-stroke;fill-rule:evenodd;stroke:none"
|
||||
d="M 0,0 5,-5 -12.5,0 5,5 Z"
|
||||
transform="scale(-0.5)"
|
||||
id="path6-0-1" />
|
||||
</marker>
|
||||
</defs>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(-25.208098,-62.799826)">
|
||||
<path
|
||||
style="fill:#000000;stroke:#000000;stroke-width:0.5;stroke-dasharray:none;marker-end:url(#DartArrow-4)"
|
||||
d="M 25.836095,69.152022 H 118.83353"
|
||||
id="path4"
|
||||
inkscape:export-filename="\\wsl.localhost\Ubuntu\home\mpusz\repos\wg21-papers\src\img\affine_space_3.svg"
|
||||
inkscape:export-xdpi="96"
|
||||
inkscape:export-ydpi="96" />
|
||||
<path
|
||||
style="fill:#000000;stroke:#000000;stroke-width:0.5;stroke-dasharray:none;marker-end:url(#DartArrow-4-63)"
|
||||
d="m 25.8361,75.031614 h 92.99743"
|
||||
id="path4-19" />
|
||||
<path
|
||||
style="fill:#000000;stroke:#000000;stroke-width:0.381298;stroke-dasharray:none"
|
||||
d="M 39.120646,68.111964 V 70.19208"
|
||||
id="path7" />
|
||||
<path
|
||||
style="fill:#000000;stroke:#a4a4a4;stroke-width:0.297823;stroke-dasharray:1.19129, 0.297823;stroke-dashoffset:0;stroke-opacity:1"
|
||||
d="m 39.120646,63.483088 v 4.418724"
|
||||
id="path2-2-7" />
|
||||
<path
|
||||
style="fill:#000000;stroke:#a4a4a4;stroke-width:0.297823;stroke-dasharray:1.19129, 0.297823;stroke-dashoffset:0;stroke-opacity:1"
|
||||
d="m 106.8483,63.483088 v 4.418724"
|
||||
id="path2-2-1-5" />
|
||||
<g
|
||||
id="g2"
|
||||
transform="matrix(1,0,0,-1,0,144.1511)">
|
||||
<path
|
||||
style="fill:#000000;stroke:#a4a4a4;stroke-width:0.298;stroke-dasharray:1.192, 0.298;stroke-dashoffset:0;stroke-opacity:1"
|
||||
d="m 94.64109,64.101259 v 3.800547"
|
||||
id="path2-2-4-4-0" />
|
||||
<path
|
||||
style="fill:#000000;stroke:#000000;stroke-width:0.381298;stroke-dasharray:none"
|
||||
d="m 94.64109,68.111958 v 2.080116"
|
||||
id="path2-5-4-1" />
|
||||
</g>
|
||||
<g
|
||||
id="g2-0"
|
||||
transform="matrix(1,0,0,-1,-40.851506,144.1511)">
|
||||
<path
|
||||
style="fill:#000000;stroke:#a4a4a4;stroke-width:0.298;stroke-dasharray:1.192, 0.298;stroke-dashoffset:0;stroke-opacity:1"
|
||||
d="m 94.64109,64.101259 v 3.800547"
|
||||
id="path2-2-4-4-0-9" />
|
||||
<path
|
||||
style="fill:#000000;stroke:#000000;stroke-width:0.381298;stroke-dasharray:none"
|
||||
d="m 94.64109,68.111958 v 2.080116"
|
||||
id="path2-5-4-1-1" />
|
||||
</g>
|
||||
<path
|
||||
style="fill:#000000;stroke:#000000;stroke-width:0.381298;stroke-dasharray:none"
|
||||
d="M 106.8483,68.111964 V 70.19208"
|
||||
id="path2-5-7-5" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-weight:bold;font-size:2.46944px;font-family:Arial;-inkscape-font-specification:'Arial Bold';fill:#0000df;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-dasharray:none;stroke-opacity:0"
|
||||
x="35.017372"
|
||||
y="72.566734"
|
||||
id="text2-8"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan2-6"
|
||||
style="font-size:2.46944px;fill:#0000df;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-dasharray:none;stroke-opacity:0"
|
||||
x="35.017372"
|
||||
y="72.566734">origin2</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-weight:bold;font-size:2.46944px;font-family:Arial;-inkscape-font-specification:'Arial Bold';fill:#d40000;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-dasharray:none"
|
||||
x="49.824974"
|
||||
y="72.469109"
|
||||
id="text2-8-7"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan2-6-4"
|
||||
style="font-size:2.46944px;fill:#d40000;fill-opacity:1;stroke-width:0;stroke-dasharray:none"
|
||||
x="49.824974"
|
||||
y="72.469109">origin1</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-weight:bold;font-size:2.46944px;font-family:Arial;-inkscape-font-specification:'Arial Bold';fill:#d40000;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-dasharray:none"
|
||||
x="92.591866"
|
||||
y="72.58947"
|
||||
id="text2-2-8"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan2-9-3"
|
||||
style="font-size:2.46944px;fill:#d40000;fill-opacity:1;stroke-width:0;stroke-dasharray:none"
|
||||
x="92.591866"
|
||||
y="72.58947">qp1</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-weight:bold;font-size:2.11667px;font-family:Arial;-inkscape-font-specification:'Arial Bold';fill:#d40000;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-dasharray:none"
|
||||
x="73.215424"
|
||||
y="77.620125"
|
||||
id="text2-2-7-4"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan2-9-0-9"
|
||||
style="font-size:2.11667px;fill:#d40000;fill-opacity:1;stroke-width:0;stroke-dasharray:none"
|
||||
x="73.215424"
|
||||
y="77.620125">q1</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-weight:bold;font-size:2.46944px;font-family:Arial;-inkscape-font-specification:'Arial Bold';fill:#0000dd;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-dasharray:none"
|
||||
x="104.66041"
|
||||
y="72.58947"
|
||||
id="text2-2-2-3"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan2-9-6-28"
|
||||
style="font-size:2.46944px;fill:#0000dd;fill-opacity:1;stroke-width:0;stroke-dasharray:none"
|
||||
x="104.66041"
|
||||
y="72.58947">qp2</tspan></text>
|
||||
<g
|
||||
id="path8">
|
||||
<path
|
||||
style="color:#000000;fill:#0000dd;-inkscape-stroke:none"
|
||||
d="M 53.742163,78.674945 H 94.247248"
|
||||
id="path34" />
|
||||
<path
|
||||
style="color:#000000;fill:#d40000;-inkscape-stroke:none"
|
||||
d="m 53.742187,78.550781 v 0.25 h 40.50586 v -0.25 z"
|
||||
id="path35" />
|
||||
<g
|
||||
id="g33">
|
||||
<path
|
||||
style="color:#000000;fill:#d40000;-inkscape-stroke:none"
|
||||
d="m 92.951172,77.767578 -0.158203,0.316406 1.183593,0.591797 -1.183593,0.591797 0.158203,0.316406 1.816406,-0.908203 z"
|
||||
id="path33" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
id="path3-2-9"
|
||||
transform="translate(0,3.7041668)">
|
||||
<path
|
||||
style="color:#000000;fill:#0000dd;-inkscape-stroke:none"
|
||||
d="M 38.897633,61.600455 H 106.32656"
|
||||
id="path31" />
|
||||
<path
|
||||
style="color:#000000;fill:#0000dd;-inkscape-stroke:none"
|
||||
d="m 38.898437,61.474609 v 0.25 h 67.427733 v -0.25 z"
|
||||
id="path32" />
|
||||
<g
|
||||
id="g30">
|
||||
<path
|
||||
style="color:#000000;fill:#0000dd;-inkscape-stroke:none"
|
||||
d="m 105.03125,60.691406 -0.1582,0.316406 1.18359,0.591797 -1.18359,0.591797 0.1582,0.316406 1.81641,-0.908203 z"
|
||||
id="path30" />
|
||||
</g>
|
||||
</g>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-weight:bold;font-size:2.11667px;font-family:Arial;-inkscape-font-specification:'Arial Bold';fill:#0000dd;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-dasharray:none"
|
||||
x="71.879326"
|
||||
y="64.321182"
|
||||
id="text2-2-2-5-6"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan2-9-6-2-8"
|
||||
style="font-size:2.11667px;fill:#0000dd;fill-opacity:1;stroke-width:0;stroke-dasharray:none"
|
||||
x="71.879326"
|
||||
y="64.321182">q2</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-weight:bold;font-size:2.11667px;font-family:Arial;-inkscape-font-specification:'Arial Bold';text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.298;stroke-miterlimit:4;stroke-dasharray:1.192, 0.298;stroke-dashoffset:0;stroke-opacity:0"
|
||||
x="36.593639"
|
||||
y="81.518364"
|
||||
id="text5"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan5"
|
||||
style="font-size:2.11667px;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:0.298"
|
||||
x="36.593639"
|
||||
y="81.518364">unrelated</tspan><tspan
|
||||
sodipodi:role="line"
|
||||
style="font-size:2.11667px;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:0.298"
|
||||
x="36.593639"
|
||||
y="84.1642"
|
||||
id="tspan6">(no known translation)</tspan></text>
|
||||
<g
|
||||
id="path9">
|
||||
<path
|
||||
style="color:#000000;fill:#000000;-inkscape-stroke:none"
|
||||
d="m 29.181641,69.78125 -0.177735,0.08789 4.957031,9.822265 0.177735,-0.08789 z"
|
||||
id="path39" />
|
||||
<g
|
||||
id="g38">
|
||||
<path
|
||||
style="color:#000000;fill:#000000;-inkscape-stroke:none"
|
||||
d="m 28.90625,69.457031 0.0059,1.609375 0.28125,-0.002 -0.0039,-1.048828 0.839844,0.626953 0.167969,-0.224609 z"
|
||||
id="path38" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
id="path9-0">
|
||||
<path
|
||||
style="color:#000000;fill:#000000;-inkscape-stroke:none"
|
||||
d="m 43.837891,75.837891 -3.462891,3.648437 0.144531,0.134766 3.460938,-3.646485 z"
|
||||
id="path37" />
|
||||
<g
|
||||
id="g36">
|
||||
<path
|
||||
style="color:#000000;fill:#000000;-inkscape-stroke:none"
|
||||
d="m 44.193359,75.607422 -1.511718,0.548828 0.09375,0.261719 0.986328,-0.357422 -0.304688,1.003906 0.267578,0.08008 z"
|
||||
id="path36" />
|
||||
</g>
|
||||
</g>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-weight:bold;font-size:2.82222px;font-family:Arial;-inkscape-font-specification:'Arial Bold';fill:#000000;stroke:#000000;stroke-width:0"
|
||||
x="120.04948"
|
||||
y="72.87162"
|
||||
id="text1-0"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan1-1"
|
||||
style="font-size:2.82222px;stroke-width:0"
|
||||
x="120.04948"
|
||||
y="72.87162">Q</tspan></text>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 11 KiB |
449
docs/users_guide/framework_basics/affine_space_4.svg
Normal file
449
docs/users_guide/framework_basics/affine_space_4.svg
Normal file
@ -0,0 +1,449 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="96.326935mm"
|
||||
height="29.734055mm"
|
||||
viewBox="0 0 96.326935 29.734055"
|
||||
version="1.1"
|
||||
id="svg1"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs1">
|
||||
<marker
|
||||
style="overflow:visible"
|
||||
id="DartArrow-4-6"
|
||||
refX="0"
|
||||
refY="0"
|
||||
orient="auto-start-reverse"
|
||||
markerWidth="1"
|
||||
markerHeight="1"
|
||||
viewBox="0 0 1 1"
|
||||
preserveAspectRatio="xMidYMid">
|
||||
<path
|
||||
style="fill:context-stroke;fill-rule:evenodd;stroke:none"
|
||||
d="M 0,0 5,-5 -12.5,0 5,5 Z"
|
||||
transform="scale(-0.5)"
|
||||
id="path6-0-2" />
|
||||
</marker>
|
||||
</defs>
|
||||
<g
|
||||
id="layer1"
|
||||
transform="translate(-25.880545,-96.604283)">
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-weight:bold;font-size:2.11667px;font-family:Arial;-inkscape-font-specification:'Arial Bold';text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.298;stroke-miterlimit:4;stroke-dasharray:1.192, 0.298;stroke-dashoffset:0;stroke-opacity:0"
|
||||
x="38.968349"
|
||||
y="123.09805"
|
||||
id="text5-7"><tspan
|
||||
style="font-size:2.11667px;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:0.298"
|
||||
x="38.968349"
|
||||
y="123.09805"
|
||||
id="tspan4">absolute</tspan><tspan
|
||||
style="font-size:2.11667px;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:0.298"
|
||||
x="38.968349"
|
||||
y="125.74389"
|
||||
id="tspan7">point origin</tspan></text>
|
||||
<g
|
||||
id="path9-0-6">
|
||||
<path
|
||||
style="color:#000000;fill:#000000;-inkscape-stroke:none"
|
||||
d="m 38.974609,116.68945 -0.08789,4.44141 0.199218,0.004 0.08594,-4.44141 z"
|
||||
id="path62" />
|
||||
<g
|
||||
id="g61">
|
||||
<path
|
||||
style="color:#000000;fill:#000000;-inkscape-stroke:none"
|
||||
d="m 39.082031,116.2793 -0.748047,1.42383 0.248047,0.13085 0.488281,-0.92773 0.449219,0.94531 0.253906,-0.11914 z"
|
||||
id="path61" />
|
||||
</g>
|
||||
</g>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-weight:bold;font-size:2.11667px;font-family:Arial;-inkscape-font-specification:'Arial Bold';mix-blend-mode:normal;fill:#a4a4a4;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-dasharray:none"
|
||||
x="96.202194"
|
||||
y="98.149414"
|
||||
id="text2-2-7-49-5-3-2"><tspan
|
||||
id="tspan2-9-0-96-4-1-8"
|
||||
style="font-size:2.11667px;fill:#a4a4a4;fill-opacity:1;stroke-width:0;stroke-dasharray:none"
|
||||
x="96.202194"
|
||||
y="98.149414">qp2 - qp1</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-weight:bold;font-size:2.11667px;font-family:Arial;-inkscape-font-specification:'Arial Bold';mix-blend-mode:normal;fill:#a4a4a4;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-dasharray:none"
|
||||
x="70.745201"
|
||||
y="98.145279"
|
||||
id="text2-2-7-49-5-3-2-6"><tspan
|
||||
id="tspan2-9-0-96-4-1-8-8"
|
||||
style="font-size:2.11667px;fill:#a4a4a4;fill-opacity:1;stroke-width:0;stroke-dasharray:none"
|
||||
x="70.745201"
|
||||
y="98.145279">qp1.quantity_from(D)</tspan></text>
|
||||
<g
|
||||
id="path8-0-9-8-0"
|
||||
transform="translate(0,0.52916663)">
|
||||
<path
|
||||
style="color:#000000;fill:#a4a4a4;fill-opacity:0.960784;-inkscape-stroke:none"
|
||||
d="M 94.707954,99.071826 H 106.32434"
|
||||
id="path59" />
|
||||
<path
|
||||
style="color:#000000;fill:#a4a4a4;fill-opacity:0.960784;-inkscape-stroke:none"
|
||||
d="m 94.707031,98.947266 v 0.25 h 11.617189 v -0.25 z"
|
||||
id="path60" />
|
||||
<g
|
||||
id="g58">
|
||||
<path
|
||||
style="color:#000000;fill:#a4a4a4;-inkscape-stroke:none"
|
||||
d="m 105.0293,98.164062 -0.15821,0.316407 1.1836,0.591797 -1.1836,0.591796 0.15821,0.316407 1.81445,-0.908203 z"
|
||||
id="path58" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
id="path8-0-9-8-0-0">
|
||||
<path
|
||||
style="color:#000000;fill:#a4a4a4;fill-opacity:0.960784;stroke-width:1;-inkscape-stroke:none"
|
||||
d="m 68.760977,99.476433 v 0.25 h 25.354258 v -0.25 z"
|
||||
id="path57" />
|
||||
<g
|
||||
id="g55"
|
||||
transform="translate(0,0.52916663)">
|
||||
<path
|
||||
style="color:#000000;fill:#a4a4a4;-inkscape-stroke:none"
|
||||
d="m 92.820312,98.164062 -0.158203,0.316407 1.183594,0.591797 -1.183594,0.591796 0.158203,0.316407 1.816407,-0.908203 z"
|
||||
id="path55" />
|
||||
</g>
|
||||
</g>
|
||||
<path
|
||||
style="fill:#000000;stroke:#000000;stroke-width:0.5;stroke-dasharray:none;marker-end:url(#DartArrow-4-6)"
|
||||
d="M 25.880545,111.83708 H 118.87798"
|
||||
id="path4-5" />
|
||||
<path
|
||||
style="fill:#000000;stroke:#000000;stroke-width:0.381298;stroke-dasharray:none"
|
||||
d="m 39.165096,110.79701 v 2.08013"
|
||||
id="path7-68" />
|
||||
<path
|
||||
style="fill:#000000;stroke:#a4a4a4;stroke-width:0.297823;stroke-dasharray:1.19129, 0.297823;stroke-dashoffset:0;stroke-opacity:1"
|
||||
d="m 39.165096,102.98758 v 7.59928"
|
||||
id="path2-2-7-4" />
|
||||
<g
|
||||
id="g3"
|
||||
transform="matrix(1,0,0,0.92845207,0,8.0761204)"
|
||||
style="stroke-width:1.03782">
|
||||
<path
|
||||
style="fill:#000000;stroke:#a4a4a4;stroke-width:0.309085;stroke-dasharray:1.23634, 0.309085;stroke-dashoffset:0;stroke-opacity:1"
|
||||
d="M 106.89275,97.421693 V 110.58686"
|
||||
id="path2-2-1-5-6" />
|
||||
<g
|
||||
id="g5-8"
|
||||
transform="translate(14.169645,72.847502)"
|
||||
style="stroke-width:1.03782">
|
||||
<path
|
||||
style="fill:#000000;stroke:#a4a4a4;stroke-width:0.309269;stroke-dasharray:1.23708, 0.309269;stroke-dashoffset:0;stroke-opacity:1"
|
||||
d="m 80.515895,24.584313 v 13.15498"
|
||||
id="path2-2-4-4-5" />
|
||||
<path
|
||||
style="fill:#000000;stroke:#000000;stroke-width:0.395717;stroke-dasharray:none"
|
||||
d="m 80.515895,37.949445 v 2.080116"
|
||||
id="path2-5-4-8" />
|
||||
</g>
|
||||
</g>
|
||||
<path
|
||||
style="fill:#000000;stroke:#a4a4a4;stroke-width:0.298;stroke-dasharray:1.192, 0.298;stroke-dashoffset:0;stroke-opacity:1"
|
||||
d="m 51.027704,106.78628 v 3.80057"
|
||||
id="path2-2-4-4-9-8" />
|
||||
<path
|
||||
style="fill:#000000;stroke:#000000;stroke-width:0.381298;stroke-dasharray:none"
|
||||
d="m 51.027704,110.797 v 2.08012"
|
||||
id="path2-5-4-7-5" />
|
||||
<g
|
||||
id="g5-7-5-0"
|
||||
transform="translate(-18.987307,72.847502)">
|
||||
<path
|
||||
style="fill:#000000;stroke:#a4a4a4;stroke-width:0.298;stroke-dasharray:1.192, 0.298;stroke-dashoffset:0;stroke-opacity:1"
|
||||
d="m 80.515895,33.938746 v 3.800547"
|
||||
id="path2-2-4-4-9-8-3" />
|
||||
<path
|
||||
style="fill:#000000;stroke:#000000;stroke-width:0.381298;stroke-dasharray:none"
|
||||
d="m 80.515895,37.949445 v 2.080116"
|
||||
id="path2-5-4-7-5-8" />
|
||||
</g>
|
||||
<path
|
||||
style="fill:#000000;stroke:#000000;stroke-width:0.381298;stroke-dasharray:none"
|
||||
d="m 106.89275,110.79701 v 2.08013"
|
||||
id="path2-5-7-5-2" />
|
||||
<path
|
||||
style="fill:#000000;stroke:#a4a4a4;stroke-width:0.297823;stroke-dasharray:1.19129, 0.297823;stroke-dashoffset:0;stroke-opacity:1"
|
||||
d="M 68.944416,98.684542 V 110.75072"
|
||||
id="path2-2-1-5-6-6" />
|
||||
<path
|
||||
style="fill:#000000;stroke:#000000;stroke-width:0.381298;stroke-dasharray:none"
|
||||
d="m 68.944417,110.79699 v 2.08013"
|
||||
id="path2-5-7-5-2-1" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-weight:bold;font-size:2.46944px;font-family:Arial;-inkscape-font-specification:'Arial Bold';fill:#0000df;fill-opacity:1;stroke:#0000e0;stroke-width:0;stroke-dasharray:none;stroke-opacity:0.607843"
|
||||
x="50.122463"
|
||||
y="115.51437"
|
||||
id="text2-8-5"><tspan
|
||||
id="tspan2-6-7"
|
||||
style="font-size:2.46944px;fill:#0000df;fill-opacity:1;stroke:#0000e0;stroke-width:0;stroke-dasharray:none;stroke-opacity:0.607843"
|
||||
x="50.122463"
|
||||
y="115.51437">B</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-weight:bold;font-size:2.46944px;font-family:Arial;-inkscape-font-specification:'Arial Bold';fill:#000000;fill-opacity:1;stroke:#279b14;stroke-width:0;stroke-dasharray:none;stroke-opacity:0.818182"
|
||||
x="38.291954"
|
||||
y="115.51437"
|
||||
id="text2-8-7-4"><tspan
|
||||
id="tspan2-6-4-4"
|
||||
style="font-size:2.46944px;fill:#000000;fill-opacity:1;stroke:#279b14;stroke-width:0;stroke-dasharray:none;stroke-opacity:0.818182"
|
||||
x="38.291954"
|
||||
y="115.51437">A</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-weight:bold;font-size:2.46944px;font-family:Arial;-inkscape-font-specification:'Arial Bold';fill:#0000df;fill-opacity:1;stroke:#0000e0;stroke-width:0;stroke-dasharray:none;stroke-opacity:0.607843"
|
||||
x="92.636322"
|
||||
y="115.27438"
|
||||
id="text2-2-8-9"><tspan
|
||||
id="tspan2-9-3-8"
|
||||
style="font-size:2.46944px;fill:#0000df;fill-opacity:1;stroke:#0000e0;stroke-width:0;stroke-dasharray:none;stroke-opacity:0.607843"
|
||||
x="92.636322"
|
||||
y="115.27438">qp1</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-weight:bold;font-size:2.11667px;font-family:Arial;-inkscape-font-specification:'Arial Bold';fill:#0000df;fill-opacity:1;stroke:#0000e0;stroke-width:0;stroke-dasharray:none;stroke-opacity:0.607843"
|
||||
x="77.075813"
|
||||
y="107.54999"
|
||||
id="text2-2-7-4-6"><tspan
|
||||
id="tspan2-9-0-9-4"
|
||||
style="font-size:2.11667px;fill:#0000df;fill-opacity:1;stroke:#0000e0;stroke-width:0;stroke-dasharray:none;stroke-opacity:0.607843"
|
||||
x="77.075813"
|
||||
y="107.54999">q1</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-weight:bold;font-size:2.11667px;font-family:Arial;-inkscape-font-specification:'Arial Bold';fill:#0000df;fill-opacity:1;stroke:#0000e0;stroke-width:0;stroke-dasharray:none;stroke-opacity:0.607843"
|
||||
x="42.750381"
|
||||
y="107.54689"
|
||||
id="text2-2-7-4-6-45"><tspan
|
||||
id="tspan2-9-0-9-4-5"
|
||||
style="font-size:2.11667px;fill:#0000df;fill-opacity:1;stroke:#0000e0;stroke-width:0;stroke-dasharray:none;stroke-opacity:0.607843"
|
||||
x="42.750381"
|
||||
y="107.54689">qAB</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-weight:bold;font-size:2.11667px;font-family:Arial;-inkscape-font-specification:'Arial Bold';fill:#0000df;fill-opacity:1;stroke:#0000e0;stroke-width:0;stroke-dasharray:none;stroke-opacity:0.607843"
|
||||
x="54.042065"
|
||||
y="107.55981"
|
||||
id="text2-2-7-4-6-45-3"><tspan
|
||||
id="tspan2-9-0-9-4-5-3"
|
||||
style="font-size:2.11667px;fill:#0000df;fill-opacity:1;stroke:#0000e0;stroke-width:0;stroke-dasharray:none;stroke-opacity:0.607843"
|
||||
x="54.042065"
|
||||
y="107.55981">qBC</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-weight:bold;font-size:2.46944px;font-family:Arial;-inkscape-font-specification:'Arial Bold';fill:#d40000;fill-opacity:1;stroke:#d40000;stroke-width:0;stroke-dasharray:none;stroke-opacity:1"
|
||||
x="104.70486"
|
||||
y="115.27438"
|
||||
id="text2-2-2-3-0"><tspan
|
||||
id="tspan2-9-6-28-2"
|
||||
style="font-size:2.46944px;fill:#d40000;fill-opacity:1;stroke:#d40000;stroke-width:0;stroke-dasharray:none;stroke-opacity:1"
|
||||
x="104.70486"
|
||||
y="115.27438">qp2</tspan></text>
|
||||
<g
|
||||
id="path8-2">
|
||||
<path
|
||||
style="color:#000000;fill:#0000df;-inkscape-stroke:none"
|
||||
d="M 61.486653,108.60488 H 94.289686"
|
||||
id="path50" />
|
||||
<path
|
||||
style="color:#000000;fill:#0000e0;fill-opacity:0.607843;-inkscape-stroke:none"
|
||||
d="m 61.486328,108.49219 v 0.22461 h 32.802734 v -0.22461 z"
|
||||
id="path51" />
|
||||
<g
|
||||
id="g49">
|
||||
<path
|
||||
style="color:#000000;fill:#0000e0;-inkscape-stroke:none"
|
||||
d="m 93.126953,107.79102 -0.142578,0.2832 1.0625,0.53125 -1.0625,0.53125 0.142578,0.2832 1.628906,-0.81445 z"
|
||||
id="path49" />
|
||||
</g>
|
||||
</g>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-weight:bold;font-size:2.11667px;font-family:Arial;-inkscape-font-specification:'Arial Bold';fill:#d40000;fill-opacity:1;stroke:#d40000;stroke-width:0;stroke-dasharray:none;stroke-opacity:1"
|
||||
x="86.728935"
|
||||
y="102.98244"
|
||||
id="text2-2-7-4-6-4"><tspan
|
||||
id="tspan2-9-0-9-4-4"
|
||||
style="font-size:2.11667px;fill:#d40000;fill-opacity:1;stroke:#d40000;stroke-width:0;stroke-dasharray:none;stroke-opacity:1"
|
||||
x="86.728935"
|
||||
y="102.98244">q2</tspan></text>
|
||||
<g
|
||||
id="path8-2-5">
|
||||
<path
|
||||
style="color:#000000;fill:#d40000;-inkscape-stroke:none"
|
||||
d="M 68.908173,104.03727 H 106.34598"
|
||||
id="path53" />
|
||||
<path
|
||||
style="color:#000000;fill:#d40000;-inkscape-stroke:none"
|
||||
d="m 68.908203,103.92188 v 0.23046 H 106.3457 v -0.23046 z"
|
||||
id="path54" />
|
||||
<g
|
||||
id="g52">
|
||||
<path
|
||||
style="color:#000000;fill:#d40000;-inkscape-stroke:none"
|
||||
d="m 105.14844,103.19922 -0.14649,0.29101 1.09375,0.54688 -1.09375,0.54687 0.14649,0.29297 1.67773,-0.83984 z"
|
||||
id="path52" />
|
||||
</g>
|
||||
</g>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-weight:bold;font-size:2.46944px;font-family:Arial;-inkscape-font-specification:'Arial Bold';fill:#0000df;fill-opacity:1;stroke:#0000e0;stroke-width:0;stroke-dasharray:none;stroke-opacity:0.607843"
|
||||
x="60.801697"
|
||||
y="115.51437"
|
||||
id="text2-8-5-8"><tspan
|
||||
id="tspan2-6-7-4"
|
||||
style="font-size:2.46944px;fill:#0000df;fill-opacity:1;stroke:#0000e0;stroke-width:0;stroke-dasharray:none;stroke-opacity:0.607843"
|
||||
x="60.801697"
|
||||
y="115.51437">C</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-weight:bold;font-size:2.46944px;font-family:Arial;-inkscape-font-specification:'Arial Bold';fill:#d40000;fill-opacity:1;stroke:#d40000;stroke-width:0;stroke-dasharray:none;stroke-opacity:1"
|
||||
x="68.025009"
|
||||
y="115.48423"
|
||||
id="text2-8-5-8-3"><tspan
|
||||
id="tspan2-6-7-4-0"
|
||||
style="font-size:2.46944px;fill:#d40000;fill-opacity:1;stroke:#d40000;stroke-width:0;stroke-dasharray:none;stroke-opacity:1"
|
||||
x="68.025009"
|
||||
y="115.48423">D</tspan></text>
|
||||
<g
|
||||
id="path8-2-3">
|
||||
<path
|
||||
style="color:#000000;fill:#0000df;stroke-dasharray:0.448642, 0.224321;-inkscape-stroke:none"
|
||||
d="M 39.317073,108.60488 H 50.523486"
|
||||
id="path44" />
|
||||
<path
|
||||
style="color:#000000;fill:#0000e0;fill-opacity:0.607843;stroke-dasharray:0.448642, 0.224321;-inkscape-stroke:none"
|
||||
d="m 39.316406,108.49219 v 0.22461 h 0.449219 v -0.22461 z m 0.673828,0 v 0.22461 h 0.449219 v -0.22461 z m 0.671875,0 v 0.22461 h 0.449219 v -0.22461 z m 0.673828,0 v 0.22461 h 0.449219 v -0.22461 z m 0.673829,0 v 0.22461 h 0.447265 v -0.22461 z m 0.671875,0 v 0.22461 h 0.449218 v -0.22461 z m 0.673828,0 v 0.22461 h 0.447265 v -0.22461 z m 0.671875,0 v 0.22461 h 0.449218 v -0.22461 z m 0.673828,0 v 0.22461 h 0.449219 v -0.22461 z m 0.671875,0 v 0.22461 h 0.449219 v -0.22461 z m 0.673828,0 v 0.22461 h 0.449219 v -0.22461 z m 0.671875,0 v 0.22461 h 0.449219 v -0.22461 z m 0.673828,0 v 0.22461 h 0.449219 v -0.22461 z m 0.673828,0 v 0.22461 h 0.447266 v -0.22461 z m 0.671875,0 v 0.22461 H 49.1875 v -0.22461 z m 0.673828,0 v 0.22461 h 0.447266 v -0.22461 z m 0.671875,0 v 0.22461 h 0.439453 v -0.22461 z"
|
||||
id="path45" />
|
||||
<g
|
||||
id="g43">
|
||||
<path
|
||||
style="color:#000000;fill:#0000e0;-inkscape-stroke:none"
|
||||
d="m 49.361328,107.79102 -0.142578,0.2832 1.0625,0.53125 -1.0625,0.53125 0.142578,0.2832 1.628906,-0.81445 z"
|
||||
id="path43" />
|
||||
</g>
|
||||
</g>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-weight:bold;font-size:2.11667px;font-family:Arial;-inkscape-font-specification:'Arial Bold';fill:#d40000;fill-opacity:1;stroke:#d40000;stroke-width:0;stroke-dasharray:none;stroke-opacity:1"
|
||||
x="51.8615"
|
||||
y="102.97934"
|
||||
id="text2-2-7-4-6-45-8"><tspan
|
||||
id="tspan2-9-0-9-4-5-32"
|
||||
style="font-size:2.11667px;fill:#d40000;fill-opacity:1;stroke:#d40000;stroke-width:0;stroke-dasharray:none;stroke-opacity:1"
|
||||
x="51.8615"
|
||||
y="102.97934">qAD</tspan></text>
|
||||
<g
|
||||
id="path8-2-3-1">
|
||||
<path
|
||||
style="color:#000000;fill:#d40000;stroke-dasharray:0.448642, 0.224321;-inkscape-stroke:none"
|
||||
d="M 39.217077,104.03727 H 68.381658"
|
||||
id="path41" />
|
||||
<path
|
||||
style="color:#000000;fill:#d40000;stroke-dasharray:0.448642, 0.224321;-inkscape-stroke:none"
|
||||
d="m 39.216797,103.92578 v 0.22461 h 0.449219 v -0.22461 z m 0.673828,0 v 0.22461 h 0.447266 v -0.22461 z m 0.671875,0 v 0.22461 h 0.449219 v -0.22461 z m 0.673828,0 v 0.22461 h 0.449219 v -0.22461 z m 0.671875,0 v 0.22461 h 0.449219 v -0.22461 z m 0.673828,0 v 0.22461 h 0.449219 v -0.22461 z m 0.671875,0 v 0.22461 h 0.449219 v -0.22461 z m 0.673828,0 v 0.22461 h 0.449219 v -0.22461 z m 0.673828,0 v 0.22461 h 0.447266 v -0.22461 z m 0.671875,0 v 0.22461 h 0.449219 v -0.22461 z m 0.673829,0 v 0.22461 h 0.447265 v -0.22461 z m 0.671875,0 v 0.22461 h 0.449218 v -0.22461 z m 0.673828,0 v 0.22461 h 0.449218 v -0.22461 z m 0.671875,0 v 0.22461 h 0.449218 v -0.22461 z m 0.673828,0 v 0.22461 h 0.449219 v -0.22461 z m 0.671875,0 v 0.22461 h 0.449219 v -0.22461 z m 0.673828,0 v 0.22461 h 0.449219 v -0.22461 z m 0.673828,0 v 0.22461 h 0.447266 v -0.22461 z m 0.671875,0 v 0.22461 h 0.449219 v -0.22461 z m 0.673828,0 v 0.22461 h 0.447266 v -0.22461 z m 0.671875,0 v 0.22461 H 53.125 v -0.22461 z m 0.673828,0 v 0.22461 h 0.449219 v -0.22461 z m 0.671875,0 v 0.22461 h 0.449219 v -0.22461 z m 0.673828,0 v 0.22461 h 0.449219 v -0.22461 z m 0.673829,0 v 0.22461 h 0.447265 v -0.22461 z m 0.671875,0 v 0.22461 h 0.449218 v -0.22461 z m 0.673828,0 v 0.22461 h 0.447265 v -0.22461 z m 0.671875,0 v 0.22461 h 0.449218 v -0.22461 z m 0.673828,0 v 0.22461 h 0.447265 v -0.22461 z m 0.671875,0 v 0.22461 h 0.449219 v -0.22461 z m 0.673828,0 v 0.22461 h 0.449219 v -0.22461 z m 0.671875,0 v 0.22461 h 0.449219 v -0.22461 z m 0.673828,0 v 0.22461 h 0.449219 v -0.22461 z m 0.673828,0 v 0.22461 h 0.447266 v -0.22461 z m 0.671875,0 v 0.22461 h 0.449219 v -0.22461 z m 0.673828,0 v 0.22461 h 0.447266 v -0.22461 z m 0.671875,0 v 0.22461 h 0.449219 v -0.22461 z m 0.673828,0 v 0.22461 h 0.447266 v -0.22461 z m 0.671875,0 v 0.22461 h 0.449219 v -0.22461 z m 0.673829,0 v 0.22461 h 0.449218 v -0.22461 z m 0.671875,0 v 0.22461 h 0.449218 v -0.22461 z m 0.673828,0 v 0.22461 h 0.449218 v -0.22461 z m 0.673828,0 v 0.22461 h 0.447265 v -0.22461 z m 0.671875,0 v 0.22461 h 0.226562 v -0.22461 z"
|
||||
id="path42" />
|
||||
<g
|
||||
id="g40">
|
||||
<path
|
||||
style="color:#000000;fill:#d40000;-inkscape-stroke:none"
|
||||
d="m 67.21875,103.22266 -0.142578,0.2832 1.0625,0.53125 -1.0625,0.53125 0.142578,0.2832 1.628906,-0.81445 z"
|
||||
id="path40" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
id="path8-2-3-8">
|
||||
<path
|
||||
style="color:#000000;fill:#0000df;stroke-dasharray:0.448642, 0.224321;-inkscape-stroke:none"
|
||||
d="m 51.301773,108.60488 h 9.816239"
|
||||
id="path47" />
|
||||
<path
|
||||
style="color:#000000;fill:#0000e0;fill-opacity:0.607843;stroke-dasharray:0.448642, 0.224321;-inkscape-stroke:none"
|
||||
d="m 51.302734,108.49219 v 0.22461 H 51.75 v -0.22461 z m 0.671875,0 v 0.22461 h 0.449219 v -0.22461 z m 0.673828,0 v 0.22461 h 0.447266 v -0.22461 z m 0.671875,0 v 0.22461 h 0.449219 v -0.22461 z m 0.673829,0 v 0.22461 h 0.447265 v -0.22461 z m 0.671875,0 v 0.22461 h 0.449218 v -0.22461 z m 0.673828,0 v 0.22461 h 0.449218 v -0.22461 z m 0.671875,0 v 0.22461 h 0.449218 v -0.22461 z m 0.673828,0 v 0.22461 h 0.449219 v -0.22461 z m 0.673828,0 v 0.22461 h 0.447266 v -0.22461 z m 0.671875,0 v 0.22461 h 0.449219 v -0.22461 z m 0.673828,0 v 0.22461 h 0.447266 v -0.22461 z m 0.671875,0 v 0.22461 h 0.449219 v -0.22461 z m 0.673828,0 v 0.22461 h 0.447266 v -0.22461 z m 0.671875,0 v 0.22461 h 0.394531 v -0.22461 z"
|
||||
id="path48" />
|
||||
<g
|
||||
id="g46">
|
||||
<path
|
||||
style="color:#000000;fill:#0000e0;-inkscape-stroke:none"
|
||||
d="m 59.955078,107.79102 -0.142578,0.2832 1.064453,0.53125 -1.064453,0.53125 0.142578,0.2832 1.628906,-0.81445 z"
|
||||
id="path46" />
|
||||
</g>
|
||||
</g>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-weight:bold;font-size:2.82222px;font-family:Arial;-inkscape-font-specification:'Arial Bold';fill:#000000;stroke:#000000;stroke-width:0"
|
||||
x="120.04948"
|
||||
y="115.55653"
|
||||
id="text1-9"><tspan
|
||||
id="tspan1-2"
|
||||
style="font-size:2.82222px;stroke-width:0"
|
||||
x="120.04948"
|
||||
y="115.55653">Q</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-weight:bold;font-size:2.11667px;font-family:Arial;-inkscape-font-specification:'Arial Bold';text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.298;stroke-miterlimit:4;stroke-dasharray:1.192, 0.298;stroke-dashoffset:0;stroke-opacity:0"
|
||||
x="60.725674"
|
||||
y="123.09805"
|
||||
id="text5-7-3"><tspan
|
||||
style="font-size:2.11667px;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:0.298"
|
||||
x="60.725674"
|
||||
y="123.09805"
|
||||
id="tspan7-2">relative</tspan><tspan
|
||||
style="font-size:2.11667px;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:0.298"
|
||||
x="60.725674"
|
||||
y="125.74389"
|
||||
id="tspan8">point origins</tspan></text>
|
||||
<g
|
||||
id="path9-0-6-0">
|
||||
<path
|
||||
style="color:#000000;fill:#000000;-inkscape-stroke:none"
|
||||
d="m 52.474609,116.2832 -0.121093,0.15625 5.46875,4.24414 0.121093,-0.1582 z"
|
||||
id="path64" />
|
||||
<g
|
||||
id="g63">
|
||||
<path
|
||||
style="color:#000000;fill:#000000;-inkscape-stroke:none"
|
||||
d="m 52.089844,116.10742 0.695312,1.45117 0.251953,-0.12109 -0.453125,-0.94531 1.027344,0.20508 0.05469,-0.27539 z"
|
||||
id="path63" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
id="path9-0-6-2">
|
||||
<path
|
||||
style="color:#000000;fill:#000000;-inkscape-stroke:none"
|
||||
d="m 61.380859,116.40234 -1.080078,4.24414 0.191406,0.0488 1.080079,-4.24414 z"
|
||||
id="path66" />
|
||||
<g
|
||||
id="g65">
|
||||
<path
|
||||
style="color:#000000;fill:#000000;-inkscape-stroke:none"
|
||||
d="m 61.578125,116.02734 -1.050781,1.2168 0.210937,0.18359 0.685547,-0.79492 0.222656,1.02539 0.273438,-0.0586 z"
|
||||
id="path65" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
id="path9-0-6-8">
|
||||
<path
|
||||
style="color:#000000;fill:#000000;-inkscape-stroke:none"
|
||||
d="m 67.429687,116.48633 -4.455078,4.11133 0.134766,0.14648 4.453125,-4.11133 z"
|
||||
id="path68" />
|
||||
<g
|
||||
id="g67">
|
||||
<path
|
||||
style="color:#000000;fill:#000000;-inkscape-stroke:none"
|
||||
d="m 67.798828,116.2793 -1.544922,0.44726 0.07813,0.26953 1.007813,-0.29101 -0.371094,0.98047 0.261719,0.0976 z"
|
||||
id="path67" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 23 KiB |
243
docs/users_guide/framework_basics/affine_space_5.svg
Normal file
243
docs/users_guide/framework_basics/affine_space_5.svg
Normal file
@ -0,0 +1,243 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="96.326942mm"
|
||||
height="21.466148mm"
|
||||
viewBox="0 0 96.326942 21.466148"
|
||||
version="1.1"
|
||||
id="svg1"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs1">
|
||||
<marker
|
||||
style="overflow:visible"
|
||||
id="DartArrow-4-6-5"
|
||||
refX="0"
|
||||
refY="0"
|
||||
orient="auto-start-reverse"
|
||||
markerWidth="1"
|
||||
markerHeight="1"
|
||||
viewBox="0 0 1 1"
|
||||
preserveAspectRatio="xMidYMid">
|
||||
<path
|
||||
style="fill:context-stroke;fill-rule:evenodd;stroke:none"
|
||||
d="M 0,0 5,-5 -12.5,0 5,5 Z"
|
||||
transform="scale(-0.5)"
|
||||
id="path6-0-2-6" />
|
||||
</marker>
|
||||
</defs>
|
||||
<g
|
||||
id="layer1"
|
||||
transform="translate(-25.532292,-131.57026)">
|
||||
<path
|
||||
style="fill:#000000;stroke:#000000;stroke-width:0.5;stroke-dasharray:none;marker-end:url(#DartArrow-4-6-5)"
|
||||
d="M 25.532292,149.11196 H 118.52973"
|
||||
id="path4-5-0" />
|
||||
<path
|
||||
style="fill:#000000;stroke:#000000;stroke-width:0.381298;stroke-dasharray:none"
|
||||
d="m 38.816843,148.07189 v 2.08013"
|
||||
id="path7-68-2" />
|
||||
<path
|
||||
style="fill:#000000;stroke:#a4a4a4;stroke-width:0.297823;stroke-dasharray:1.19129, 0.297823;stroke-dashoffset:0;stroke-opacity:1"
|
||||
d="m 38.816843,132.79772 v 15.06402"
|
||||
id="path2-2-7-4-1" />
|
||||
<path
|
||||
style="fill:#000000;stroke:#a4a4a4;stroke-width:0.297823;stroke-dasharray:1.19129, 0.297823;stroke-dashoffset:0;stroke-opacity:1"
|
||||
d="m 106.5445,132.85104 v 15.0107"
|
||||
id="path2-2-1-5-6-4" />
|
||||
<path
|
||||
style="fill:#000000;stroke:#a4a4a4;stroke-width:0.298001;stroke-dasharray:1.192, 0.298001;stroke-dashoffset:0;stroke-opacity:1"
|
||||
d="m 50.679452,137.04534 v 10.81639"
|
||||
id="path2-2-4-4-9-8-6" />
|
||||
<path
|
||||
style="fill:#000000;stroke:#000000;stroke-width:0.381298;stroke-dasharray:none"
|
||||
d="M 50.679451,148.07188 V 150.152"
|
||||
id="path2-5-4-7-5-3" />
|
||||
<path
|
||||
style="fill:#000000;stroke:#a4a4a4;stroke-width:0.298001;stroke-dasharray:1.192, 0.298001;stroke-dashoffset:0;stroke-opacity:1"
|
||||
d="m 61.180332,141.0677 v 6.88446"
|
||||
id="path2-2-4-4-9-8-3-4" />
|
||||
<path
|
||||
style="fill:#000000;stroke:#000000;stroke-width:0.381298;stroke-dasharray:none"
|
||||
d="m 106.5445,148.07189 v 2.08013"
|
||||
id="path2-5-7-5-2-5" />
|
||||
<path
|
||||
style="fill:#000000;stroke:#a4a4a4;stroke-width:0.297823;stroke-dasharray:1.19129, 0.297823;stroke-dashoffset:0;stroke-opacity:1"
|
||||
d="m 68.596164,145.03322 v 2.82852"
|
||||
id="path2-2-1-5-6-6-3" />
|
||||
<path
|
||||
style="fill:#000000;stroke:#000000;stroke-width:0.381298;stroke-dasharray:none"
|
||||
d="M 68.596164,148.07187 V 150.152"
|
||||
id="path2-5-7-5-2-1-7" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-weight:bold;font-size:2.46944px;font-family:Arial;-inkscape-font-specification:'Arial Bold';fill:#0000df;fill-opacity:1;stroke:#0000e0;stroke-width:0;stroke-dasharray:none;stroke-opacity:0.607843"
|
||||
x="49.774212"
|
||||
y="152.78926"
|
||||
id="text2-8-5-1"><tspan
|
||||
id="tspan2-6-7-2"
|
||||
style="font-size:2.46944px;fill:#0000df;fill-opacity:1;stroke:#0000e0;stroke-width:0;stroke-dasharray:none;stroke-opacity:0.607843"
|
||||
x="49.774212"
|
||||
y="152.78926">B</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-weight:bold;font-size:2.46944px;font-family:Arial;-inkscape-font-specification:'Arial Bold';fill:#000000;fill-opacity:1;stroke:#279b14;stroke-width:0;stroke-dasharray:none;stroke-opacity:0.818182"
|
||||
x="37.943703"
|
||||
y="152.78926"
|
||||
id="text2-8-7-4-7"><tspan
|
||||
id="tspan2-6-4-4-6"
|
||||
style="font-size:2.46944px;fill:#000000;fill-opacity:1;stroke:#279b14;stroke-width:0;stroke-dasharray:none;stroke-opacity:0.818182"
|
||||
x="37.943703"
|
||||
y="152.78926">A</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-weight:bold;font-size:2.46944px;font-family:Arial;-inkscape-font-specification:'Arial Bold';fill:#d40000;fill-opacity:1;stroke:#d40000;stroke-width:0;stroke-dasharray:none;stroke-opacity:1"
|
||||
x="104.35661"
|
||||
y="152.54927"
|
||||
id="text2-2-2-3-0-1"><tspan
|
||||
id="tspan2-9-6-28-2-4"
|
||||
style="font-size:2.46944px;fill:#d40000;fill-opacity:1;stroke:#d40000;stroke-width:0;stroke-dasharray:none;stroke-opacity:1"
|
||||
x="104.35661"
|
||||
y="152.54927">qp2</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-weight:bold;font-size:2.11667px;font-family:Arial;-inkscape-font-specification:'Arial Bold';fill:#d40000;fill-opacity:1;stroke:#d40000;stroke-width:0;stroke-dasharray:none;stroke-opacity:1"
|
||||
x="85.873619"
|
||||
y="144.83266"
|
||||
id="text2-2-7-4-6-4-0"><tspan
|
||||
id="tspan2-9-0-9-4-4-0"
|
||||
style="font-size:2.11667px;fill:#d40000;fill-opacity:1;stroke:#d40000;stroke-width:0;stroke-dasharray:none;stroke-opacity:1"
|
||||
x="85.873619"
|
||||
y="144.83266">qD</tspan></text>
|
||||
<path
|
||||
style="color:#000000;fill:#d40000;-inkscape-stroke:none"
|
||||
d="m 68.55992,145.88757 h 37.43781"
|
||||
id="path53-6" />
|
||||
<path
|
||||
style="color:#000000;fill:#d40000;-inkscape-stroke:none"
|
||||
d="m 68.55995,145.77218 v 0.23046 h 37.4375 v -0.23046 z"
|
||||
id="path54-0" />
|
||||
<g
|
||||
id="g52-4"
|
||||
transform="translate(-0.34825269,41.850296)">
|
||||
<path
|
||||
style="color:#000000;fill:#d40000;-inkscape-stroke:none"
|
||||
d="m 105.14844,103.19922 -0.14649,0.29101 1.09375,0.54688 -1.09375,0.54687 0.14649,0.29297 1.67773,-0.83984 z"
|
||||
id="path52-9" />
|
||||
</g>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-weight:bold;font-size:2.46944px;font-family:Arial;-inkscape-font-specification:'Arial Bold';fill:#0000df;fill-opacity:1;stroke:#0000e0;stroke-width:0;stroke-dasharray:none;stroke-opacity:0.607843"
|
||||
x="60.453445"
|
||||
y="152.78926"
|
||||
id="text2-8-5-8-6"><tspan
|
||||
id="tspan2-6-7-4-02"
|
||||
style="font-size:2.46944px;fill:#0000df;fill-opacity:1;stroke:#0000e0;stroke-width:0;stroke-dasharray:none;stroke-opacity:0.607843"
|
||||
x="60.453445"
|
||||
y="152.78926">C</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-weight:bold;font-size:2.46944px;font-family:Arial;-inkscape-font-specification:'Arial Bold';fill:#d40000;fill-opacity:1;stroke:#d40000;stroke-width:0;stroke-dasharray:none;stroke-opacity:1"
|
||||
x="67.676758"
|
||||
y="152.75911"
|
||||
id="text2-8-5-8-3-2"><tspan
|
||||
id="tspan2-6-7-4-0-9"
|
||||
style="font-size:2.46944px;fill:#d40000;fill-opacity:1;stroke:#d40000;stroke-width:0;stroke-dasharray:none;stroke-opacity:1"
|
||||
x="67.676758"
|
||||
y="152.75911">D</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-weight:bold;font-size:2.82222px;font-family:Arial;-inkscape-font-specification:'Arial Bold';fill:#000000;stroke:#000000;stroke-width:0"
|
||||
x="119.70123"
|
||||
y="152.83142"
|
||||
id="text1-9-2"><tspan
|
||||
id="tspan1-2-9"
|
||||
style="font-size:2.82222px;stroke-width:0"
|
||||
x="119.70123"
|
||||
y="152.83142">Q</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-weight:bold;font-size:2.11667px;font-family:Arial;-inkscape-font-specification:'Arial Bold';fill:#d40000;fill-opacity:1;stroke:#d40000;stroke-width:0;stroke-dasharray:none;stroke-opacity:1"
|
||||
x="82.138161"
|
||||
y="140.82449"
|
||||
id="text2-2-7-4-6-4-0-7"><tspan
|
||||
id="tspan2-9-0-9-4-4-0-4"
|
||||
style="font-size:2.11667px;fill:#d40000;fill-opacity:1;stroke:#d40000;stroke-width:0;stroke-dasharray:none;stroke-opacity:1"
|
||||
x="82.138161"
|
||||
y="140.82449">qC</tspan></text>
|
||||
<path
|
||||
style="color:#000000;fill:#d40000;-inkscape-stroke:none"
|
||||
d="M 68.527082,141.87939 H 105.96489"
|
||||
id="path53-6-8" />
|
||||
<path
|
||||
style="color:#000000;fill:#d40000;stroke-width:1;-inkscape-stroke:none"
|
||||
d="m 61.11878,141.764 v 0.23046 h 44.84583 V 141.764 Z"
|
||||
id="path54-0-4" />
|
||||
<g
|
||||
id="g52-4-1"
|
||||
transform="translate(-0.38109056,37.84212)">
|
||||
<path
|
||||
style="color:#000000;fill:#d40000;-inkscape-stroke:none"
|
||||
d="m 105.14844,103.19922 -0.14649,0.29101 1.09375,0.54688 -1.09375,0.54687 0.14649,0.29297 1.67773,-0.83984 z"
|
||||
id="path52-9-4" />
|
||||
</g>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-weight:bold;font-size:2.11667px;font-family:Arial;-inkscape-font-specification:'Arial Bold';fill:#d40000;fill-opacity:1;stroke:#d40000;stroke-width:0;stroke-dasharray:none;stroke-opacity:1"
|
||||
x="76.910576"
|
||||
y="136.98802"
|
||||
id="text2-2-7-4-6-4-0-7-1"><tspan
|
||||
id="tspan2-9-0-9-4-4-0-4-4"
|
||||
style="font-size:2.11667px;fill:#d40000;fill-opacity:1;stroke:#d40000;stroke-width:0;stroke-dasharray:none;stroke-opacity:1"
|
||||
x="76.910576"
|
||||
y="136.98802">qB</tspan></text>
|
||||
<path
|
||||
style="color:#000000;fill:#d40000;-inkscape-stroke:none"
|
||||
d="M 68.593228,138.04292 H 106.03104"
|
||||
id="path53-6-8-9" />
|
||||
<path
|
||||
style="color:#000000;fill:#d40000;stroke-width:1;-inkscape-stroke:none"
|
||||
d="m 50.60159,137.92753 v 0.23046 h 55.42917 v -0.23046 z"
|
||||
id="path54-0-4-2" />
|
||||
<g
|
||||
id="g52-4-1-6"
|
||||
transform="translate(-0.31494473,34.005647)">
|
||||
<path
|
||||
style="color:#000000;fill:#d40000;-inkscape-stroke:none"
|
||||
d="m 105.14844,103.19922 -0.14649,0.29101 1.09375,0.54688 -1.09375,0.54687 0.14649,0.29297 1.67773,-0.83984 z"
|
||||
id="path52-9-4-7" />
|
||||
</g>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-weight:bold;font-size:2.11667px;font-family:Arial;-inkscape-font-specification:'Arial Bold';fill:#d40000;fill-opacity:1;stroke:#d40000;stroke-width:0;stroke-dasharray:none;stroke-opacity:1"
|
||||
x="70.909393"
|
||||
y="133.08542"
|
||||
id="text2-2-7-4-6-4-0-7-16"><tspan
|
||||
id="tspan2-9-0-9-4-4-0-4-6"
|
||||
style="font-size:2.11667px;fill:#d40000;fill-opacity:1;stroke:#d40000;stroke-width:0;stroke-dasharray:none;stroke-opacity:1"
|
||||
x="70.909393"
|
||||
y="133.08542">qA</tspan></text>
|
||||
<path
|
||||
style="color:#000000;fill:#d40000;-inkscape-stroke:none"
|
||||
d="M 68.659374,134.00802 H 106.09718"
|
||||
id="path53-6-8-1" />
|
||||
<path
|
||||
style="color:#000000;fill:#d40000;stroke-width:1;-inkscape-stroke:none"
|
||||
d="m 38.629199,134.02493 v 0.23046 h 67.467711 v -0.23046 z"
|
||||
id="path54-0-4-0" />
|
||||
<g
|
||||
id="g52-4-1-9"
|
||||
transform="translate(-0.24879868,29.970751)">
|
||||
<path
|
||||
style="color:#000000;fill:#d40000;-inkscape-stroke:none"
|
||||
d="m 105.14844,103.19922 -0.14649,0.29101 1.09375,0.54688 -1.09375,0.54687 0.14649,0.29297 1.67773,-0.83984 z"
|
||||
id="path52-9-4-4" />
|
||||
</g>
|
||||
<path
|
||||
style="fill:#000000;stroke:#000000;stroke-width:0.381298;stroke-dasharray:none"
|
||||
d="M 61.180335,148.07187 V 150.152"
|
||||
id="path2-5-7-5-2-1-7-3" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 11 KiB |
462
docs/users_guide/framework_basics/affine_space_6.svg
Normal file
462
docs/users_guide/framework_basics/affine_space_6.svg
Normal file
@ -0,0 +1,462 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="96.122437mm"
|
||||
height="35.44648mm"
|
||||
viewBox="0 0 96.122437 35.44648"
|
||||
version="1.1"
|
||||
id="svg1"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs1">
|
||||
<marker
|
||||
style="overflow:visible"
|
||||
id="DartArrow-4-6-5-5"
|
||||
refX="0"
|
||||
refY="0"
|
||||
orient="auto-start-reverse"
|
||||
markerWidth="1"
|
||||
markerHeight="1"
|
||||
viewBox="0 0 1 1"
|
||||
preserveAspectRatio="xMidYMid">
|
||||
<path
|
||||
style="fill:context-stroke;fill-rule:evenodd;stroke:none"
|
||||
d="M 0,0 5,-5 -12.5,0 5,5 Z"
|
||||
transform="scale(-0.5)"
|
||||
id="path6-0-2-6-0" />
|
||||
</marker>
|
||||
</defs>
|
||||
<g
|
||||
id="layer1"
|
||||
transform="translate(-25.146041,-171.9546)">
|
||||
<path
|
||||
style="fill:#000000;stroke:#000000;stroke-width:0.5;stroke-dasharray:none;marker-end:url(#DartArrow-4-6-5-5)"
|
||||
d="m 25.14604,192.36757 h 92.99744"
|
||||
id="path4-5-0-6" />
|
||||
<path
|
||||
style="fill:#000000;stroke:#000000;stroke-width:0.381298;stroke-dasharray:none"
|
||||
d="m 38.430591,191.3275 v 2.08013"
|
||||
id="path7-68-2-1" />
|
||||
<path
|
||||
style="fill:#000000;stroke:#000000;stroke-width:0.381298;stroke-dasharray:none"
|
||||
d="m 53.468201,191.32749 v 2.08012"
|
||||
id="path2-5-4-7-5-3-6" />
|
||||
<path
|
||||
style="fill:#000000;stroke:#000000;stroke-width:0.381298;stroke-dasharray:none"
|
||||
d="m 98.901598,191.32748 v 2.08013"
|
||||
id="path2-5-7-5-2-1-7-6" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-weight:bold;font-size:2.46944px;font-family:Arial;-inkscape-font-specification:'Arial Bold';fill:#eeb000;fill-opacity:1;stroke:#0000e0;stroke-width:0;stroke-dasharray:none;stroke-opacity:0.607843"
|
||||
x="51.997147"
|
||||
y="196.13815"
|
||||
id="text2-8-5-1-9"><tspan
|
||||
id="tspan2-6-7-2-9"
|
||||
style="font-size:2.46944px;fill:#eeb000;fill-opacity:1;stroke:#0000e0;stroke-width:0;stroke-dasharray:none;stroke-opacity:0.607843"
|
||||
x="51.997147"
|
||||
y="196.13815">F0</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-weight:bold;font-size:2.46944px;font-family:Arial;-inkscape-font-specification:'Arial Bold';fill:#eeb000;fill-opacity:1;stroke:#279b14;stroke-width:0;stroke-dasharray:none;stroke-opacity:0.818182"
|
||||
x="36.820873"
|
||||
y="196.13815"
|
||||
id="text2-8-7-4-7-2"><tspan
|
||||
id="tspan2-6-4-4-6-7"
|
||||
style="font-size:2.46944px;fill:#eeb000;fill-opacity:1;stroke:#279b14;stroke-width:0;stroke-dasharray:none;stroke-opacity:0.818182"
|
||||
x="36.820873"
|
||||
y="196.13815">K0</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-weight:bold;font-size:2.46944px;font-family:Arial;-inkscape-font-specification:'Arial Bold';fill:#d40000;fill-opacity:1;stroke:#d40000;stroke-width:0;stroke-dasharray:none;stroke-opacity:1"
|
||||
x="106.03098"
|
||||
y="195.88976"
|
||||
id="text2-2-2-3-0-1-2"><tspan
|
||||
id="tspan2-9-6-28-2-4-2"
|
||||
style="font-size:2.46944px;fill:#d40000;fill-opacity:1;stroke:#d40000;stroke-width:0;stroke-dasharray:none;stroke-opacity:1"
|
||||
x="106.03098"
|
||||
y="195.88976">high</tspan></text>
|
||||
<path
|
||||
style="fill:#000000;stroke:#000000;stroke-width:0.381298;stroke-dasharray:none"
|
||||
d="m 108.64149,191.3275 v 2.08013"
|
||||
id="path2-5-7-5-2-5-5" />
|
||||
<path
|
||||
style="fill:#000000;stroke:#000000;stroke-width:0.381298;stroke-dasharray:none"
|
||||
d="m 89.161704,191.29385 v 2.08013"
|
||||
id="path2-5-7-5-2-5-5-1" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-weight:bold;font-size:2.46944px;font-family:Arial;-inkscape-font-specification:'Arial Bold';fill:#0000df;fill-opacity:1;stroke:#0000e1;stroke-width:0;stroke-dasharray:none;stroke-opacity:0.0666667"
|
||||
x="87.016014"
|
||||
y="196.13513"
|
||||
id="text2-2-2-3-0-1-2-3"><tspan
|
||||
id="tspan2-9-6-28-2-4-2-0"
|
||||
style="font-size:2.46944px;fill:#0000df;fill-opacity:1;stroke:#0000e1;stroke-width:0;stroke-dasharray:none;stroke-opacity:0.0666667"
|
||||
x="87.016014"
|
||||
y="196.13513">low</tspan></text>
|
||||
<path
|
||||
style="color:#000000;fill:#d40000;stroke-width:0.999998;-inkscape-stroke:none"
|
||||
d="m 98.979131,185.79123 v 0.23046 h 9.280659 v -0.23046 z"
|
||||
id="path54-0-8" />
|
||||
<g
|
||||
id="g52-4-2"
|
||||
transform="translate(1.9140822,81.868415)">
|
||||
<path
|
||||
style="color:#000000;fill:#d40000;-inkscape-stroke:none"
|
||||
d="m 105.14844,103.19922 -0.14649,0.29101 1.09375,0.54688 -1.09375,0.54687 0.14649,0.29297 1.67773,-0.83984 z"
|
||||
id="path52-9-2" />
|
||||
</g>
|
||||
<path
|
||||
style="color:#000000;fill:#0000df;fill-opacity:1;stroke-width:0.999998;-inkscape-stroke:none"
|
||||
d="m 98.783113,185.79123 v 0.23046 h -9.280648 v -0.23046 z"
|
||||
id="path54-0-8-6" />
|
||||
<g
|
||||
id="g52-4-2-4"
|
||||
transform="matrix(-1,0,0,1,195.84815,81.868375)"
|
||||
style="fill:#0000df;fill-opacity:1">
|
||||
<path
|
||||
style="color:#000000;fill:#0000df;fill-opacity:1;-inkscape-stroke:none"
|
||||
d="m 105.14844,103.19922 -0.14649,0.29101 1.09375,0.54688 -1.09375,0.54687 0.14649,0.29297 1.67773,-0.83984 z"
|
||||
id="path52-9-2-0" />
|
||||
</g>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-weight:bold;font-size:2.46944px;font-family:Arial;-inkscape-font-specification:'Arial Bold';fill:#eeb000;fill-opacity:1;stroke:#0000e0;stroke-width:0;stroke-dasharray:none;stroke-opacity:0.607843"
|
||||
x="59.218128"
|
||||
y="196.14961"
|
||||
id="text2-8-5-8-6-8"><tspan
|
||||
id="tspan2-6-7-4-02-5"
|
||||
style="font-size:2.46944px;fill:#eeb000;fill-opacity:1;stroke:#0000e0;stroke-width:0;stroke-dasharray:none;stroke-opacity:0.607843"
|
||||
x="59.218128"
|
||||
y="196.14961">C0</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-weight:bold;font-size:2.46944px;font-family:Arial;-inkscape-font-specification:'Arial Bold';fill:#eeb000;fill-opacity:1;stroke:#0000e0;stroke-width:0;stroke-dasharray:none;stroke-opacity:0.607843"
|
||||
x="96.399002"
|
||||
y="196.1496"
|
||||
id="text2-8-5-8-6-8-7"><tspan
|
||||
id="tspan2-6-7-4-02-5-6"
|
||||
style="font-size:2.46944px;fill:#eeb000;fill-opacity:1;stroke:#0000e0;stroke-width:0;stroke-dasharray:none;stroke-opacity:0.607843"
|
||||
x="96.399002"
|
||||
y="196.1496">REF</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-weight:bold;font-size:2.46944px;font-family:Arial;-inkscape-font-specification:'Arial Bold';fill:#09ad00;fill-opacity:1;stroke:#d40000;stroke-width:0;stroke-dasharray:none;stroke-opacity:1"
|
||||
x="97.205673"
|
||||
y="199.62463"
|
||||
id="text2-8-5-8-3-2-0"><tspan
|
||||
id="tspan2-6-7-4-0-9-9"
|
||||
style="font-size:2.46944px;fill:#09ad00;fill-opacity:1;stroke:#d40000;stroke-width:0;stroke-dasharray:none;stroke-opacity:1"
|
||||
x="97.205673"
|
||||
y="199.62463">ref</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-weight:bold;font-size:2.82222px;font-family:Arial;-inkscape-font-specification:'Arial Bold';fill:#000000;stroke:#000000;stroke-width:0"
|
||||
x="119.31499"
|
||||
y="196.08676"
|
||||
id="text1-9-2-9"><tspan
|
||||
id="tspan1-2-9-6"
|
||||
style="font-size:2.82222px;stroke-width:0"
|
||||
x="119.31499"
|
||||
y="196.08676">T</tspan></text>
|
||||
<path
|
||||
style="fill:#000000;stroke:#000000;stroke-width:0.381298;stroke-dasharray:none"
|
||||
d="m 60.794083,191.32748 v 2.08013"
|
||||
id="path2-5-7-5-2-1-7-3-0" />
|
||||
<path
|
||||
style="fill:#000000;stroke:#a4a4a4;stroke-width:0.298001;stroke-dasharray:1.192, 0.298001;stroke-dashoffset:0;stroke-opacity:1"
|
||||
d="m 60.794083,181.33872 v 9.69079"
|
||||
id="path2-2-4-4-9-8-3-4-1" />
|
||||
<path
|
||||
style="fill:#000000;stroke:#a4a4a4;stroke-width:0.298001;stroke-dasharray:1.192, 0.298001;stroke-dashoffset:0;stroke-opacity:1"
|
||||
d="m 108.64149,184.79985 v 6.22965"
|
||||
id="path2-2-4-4-9-8-3-4-1-8" />
|
||||
<path
|
||||
style="fill:#000000;stroke:#a4a4a4;stroke-width:0.298002;stroke-dasharray:1.192, 0.298002;stroke-dashoffset:0;stroke-opacity:1"
|
||||
d="M 98.901599,173.60046 V 191.0295"
|
||||
id="path2-2-4-4-9-8-3-4-1-89" />
|
||||
<path
|
||||
style="fill:#000000;stroke:#a4a4a4;stroke-width:0.298001;stroke-dasharray:1.192, 0.298001;stroke-dashoffset:0;stroke-opacity:1"
|
||||
d="m 89.161704,184.70631 v 6.32319"
|
||||
id="path2-2-4-4-9-8-3-4-1-89-0" />
|
||||
<path
|
||||
style="fill:#000000;stroke:#a4a4a4;stroke-width:0.298001;stroke-dasharray:1.192, 0.298001;stroke-dashoffset:0;stroke-opacity:1"
|
||||
d="m 38.430591,173.2939 v 17.73561"
|
||||
id="path2-2-4-4-9-8-3-4-1-2" />
|
||||
<path
|
||||
style="fill:#000000;stroke:#a4a4a4;stroke-width:0.298001;stroke-dasharray:1.192, 0.298001;stroke-dashoffset:0;stroke-opacity:1"
|
||||
d="m 53.468201,177.40986 v 13.61965"
|
||||
id="path2-2-4-4-9-8-3-4-1-23" />
|
||||
<g
|
||||
id="path10">
|
||||
<path
|
||||
style="color:#000000;fill:#ffbf00;fill-opacity:0.0156863;stroke-dasharray:0.46, 0.23;-inkscape-stroke:none"
|
||||
d="M 38.540264,189.14302 H 60.354043"
|
||||
id="path80" />
|
||||
<path
|
||||
style="color:#000000;fill:#eeb000;stroke-dasharray:0.46, 0.23;-inkscape-stroke:none"
|
||||
d="m 38.541016,189.02734 v 0.23047 H 39 v -0.23047 z m 0.689453,0 v 0.23047 h 0.458984 v -0.23047 z m 0.689453,0 v 0.23047 h 0.460937 v -0.23047 z m 0.689453,0 v 0.23047 h 0.460937 v -0.23047 z m 0.691406,0 v 0.23047 h 0.458985 v -0.23047 z m 0.689453,0 v 0.23047 h 0.460938 v -0.23047 z m 0.689453,0 v 0.23047 h 0.460938 v -0.23047 z m 0.691407,0 v 0.23047 h 0.458984 v -0.23047 z m 0.689453,0 v 0.23047 h 0.458984 v -0.23047 z m 0.689453,0 v 0.23047 h 0.460937 v -0.23047 z m 0.689453,0 v 0.23047 h 0.460938 v -0.23047 z m 0.691406,0 v 0.23047 h 0.458985 v -0.23047 z m 0.689453,0 v 0.23047 h 0.458985 v -0.23047 z m 0.689454,0 v 0.23047 h 0.460937 v -0.23047 z m 0.691406,0 v 0.23047 h 0.458984 v -0.23047 z m 0.689453,0 v 0.23047 h 0.458984 v -0.23047 z m 0.689453,0 v 0.23047 h 0.460938 v -0.23047 z m 0.689453,0 v 0.23047 h 0.460938 v -0.23047 z m 0.691406,0 v 0.23047 h 0.458985 v -0.23047 z m 0.689454,0 v 0.23047 h 0.458984 v -0.23047 z m 0.689453,0 v 0.23047 h 0.460937 v -0.23047 z m 0.689453,0 v 0.23047 h 0.460937 v -0.23047 z m 0.691406,0 v 0.23047 h 0.458984 v -0.23047 z m 0.689453,0 v 0.23047 h 0.460938 v -0.23047 z m 0.689453,0 v 0.23047 h 0.460938 v -0.23047 z m 0.691407,0 v 0.23047 H 56.25 v -0.23047 z m 0.689453,0 v 0.23047 h 0.458984 v -0.23047 z m 0.689453,0 v 0.23047 h 0.460937 v -0.23047 z m 0.689453,0 v 0.23047 h 0.460937 v -0.23047 z m 0.691406,0 v 0.23047 h 0.458985 v -0.23047 z m 0.689453,0 v 0.23047 h 0.460938 v -0.23047 z m 0.689453,0 v 0.23047 h 0.423829 v -0.23047 z"
|
||||
id="path81" />
|
||||
<g
|
||||
id="g79">
|
||||
<path
|
||||
style="color:#000000;fill:#eeb000;-inkscape-stroke:none"
|
||||
d="m 59.162109,188.30664 -0.146484,0.29102 1.089844,0.54492 -1.089844,0.54492 0.146484,0.29102 1.669922,-0.83594 z"
|
||||
id="path79" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
id="path10-3">
|
||||
<path
|
||||
style="color:#000000;fill:#ffbf00;fill-opacity:0.0156863;stroke-dasharray:0.46, 0.230001;-inkscape-stroke:none"
|
||||
d="m 60.932133,189.14303 h 37.77522"
|
||||
id="path83" />
|
||||
<path
|
||||
style="color:#000000;fill:#eeb000;stroke-dasharray:0.46, 0.230001;-inkscape-stroke:none"
|
||||
d="m 60.931641,189.02734 v 0.23047 h 0.460937 v -0.23047 z m 0.691406,0 v 0.23047 h 0.458984 v -0.23047 z m 0.689453,0 v 0.23047 h 0.458984 v -0.23047 z m 0.689453,0 v 0.23047 h 0.460938 v -0.23047 z m 0.689453,0 v 0.23047 h 0.460938 v -0.23047 z m 0.691406,0 v 0.23047 h 0.458985 v -0.23047 z m 0.689454,0 v 0.23047 h 0.458984 v -0.23047 z m 0.689453,0 v 0.23047 h 0.460937 v -0.23047 z m 0.689453,0 v 0.23047 h 0.460937 v -0.23047 z m 0.691406,0 v 0.23047 h 0.458984 v -0.23047 z m 0.689453,0 v 0.23047 h 0.460938 v -0.23047 z m 0.689453,0 v 0.23047 h 0.460938 v -0.23047 z m 0.691407,0 v 0.23047 h 0.458984 v -0.23047 z m 0.689453,0 v 0.23047 h 0.458984 v -0.23047 z m 0.689453,0 v 0.23047 h 0.460937 v -0.23047 z m 0.689453,0 v 0.23047 h 0.460937 v -0.23047 z m 0.691406,0 v 0.23047 h 0.458985 v -0.23047 z m 0.689453,0 v 0.23047 h 0.460938 v -0.23047 z m 0.689453,0 v 0.23047 H 73.8125 v -0.23047 z m 0.691407,0 v 0.23047 h 0.458984 v -0.23047 z m 0.689453,0 v 0.23047 h 0.458984 v -0.23047 z m 0.689453,0 v 0.23047 h 0.460937 v -0.23047 z m 0.689453,0 v 0.23047 h 0.460938 v -0.23047 z m 0.691406,0 v 0.23047 h 0.458985 v -0.23047 z m 0.689453,0 v 0.23047 h 0.460938 v -0.23047 z m 0.689454,0 v 0.23047 h 0.460937 v -0.23047 z m 0.691406,0 v 0.23047 h 0.458984 v -0.23047 z m 0.689453,0 v 0.23047 h 0.458984 v -0.23047 z m 0.689453,0 v 0.23047 h 0.460938 v -0.23047 z m 0.689453,0 v 0.23047 h 0.460938 v -0.23047 z m 0.691406,0 v 0.23047 h 0.458985 v -0.23047 z m 0.689454,0 v 0.23047 h 0.458984 v -0.23047 z m 0.689453,0 v 0.23047 h 0.460937 v -0.23047 z m 0.691406,0 v 0.23047 h 0.458984 v -0.23047 z m 0.689453,0 v 0.23047 h 0.458984 v -0.23047 z m 0.689453,0 v 0.23047 h 0.460938 v -0.23047 z m 0.689453,0 v 0.23047 h 0.460938 v -0.23047 z m 0.691407,0 v 0.23047 h 0.458984 v -0.23047 z m 0.689453,0 v 0.23047 h 0.458984 v -0.23047 z m 0.689453,0 v 0.23047 h 0.460937 v -0.23047 z m 0.689453,0 v 0.23047 h 0.460937 v -0.23047 z m 0.691406,0 v 0.23047 h 0.458985 v -0.23047 z m 0.689453,0 v 0.23047 h 0.460938 v -0.23047 z m 0.689453,0 v 0.23047 H 91.0625 v -0.23047 z m 0.691407,0 v 0.23047 h 0.458984 v -0.23047 z m 0.689453,0 v 0.23047 h 0.458984 v -0.23047 z m 0.689453,0 v 0.23047 h 0.460937 v -0.23047 z m 0.689453,0 v 0.23047 h 0.460938 v -0.23047 z m 0.691406,0 v 0.23047 h 0.458985 v -0.23047 z m 0.689453,0 v 0.23047 h 0.460938 v -0.23047 z m 0.689454,0 v 0.23047 h 0.460937 v -0.23047 z m 0.691406,0 v 0.23047 h 0.458984 v -0.23047 z m 0.689453,0 v 0.23047 h 0.458984 v -0.23047 z m 0.689453,0 v 0.23047 h 0.460938 v -0.23047 z m 0.689453,0 v 0.23047 h 0.460938 v -0.23047 z"
|
||||
id="path84" />
|
||||
<g
|
||||
id="g82">
|
||||
<path
|
||||
style="color:#000000;fill:#eeb000;-inkscape-stroke:none"
|
||||
d="m 97.515625,188.30664 -0.146484,0.29102 1.089843,0.54492 -1.089843,0.54492 0.146484,0.29102 1.669922,-0.83594 z"
|
||||
id="path82" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
id="path10-7"
|
||||
transform="translate(0,0.37033)">
|
||||
<path
|
||||
style="color:#000000;fill:#ffbf00;fill-opacity:0.0156863;stroke-dasharray:0.46, 0.23;-inkscape-stroke:none"
|
||||
d="M 60.715697,185.53631 H 53.875104"
|
||||
id="path77" />
|
||||
<path
|
||||
style="color:#000000;fill:#eeb000;stroke-dasharray:0.46, 0.23;-inkscape-stroke:none"
|
||||
d="m 54.044922,185.42187 v 0.22852 h 0.460937 v -0.22852 z m 0.691406,0 v 0.22852 h 0.458984 v -0.22852 z m 0.689453,0 v 0.22852 h 0.458985 v -0.22852 z m 0.689453,0 v 0.22852 h 0.460938 v -0.22852 z m 0.691407,0 v 0.22852 h 0.458984 v -0.22852 z m 0.689453,0 v 0.22852 h 0.458984 v -0.22852 z m 0.689453,0 v 0.22852 h 0.460937 v -0.22852 z m 0.689453,0 v 0.22852 h 0.460937 v -0.22852 z m 0.691406,0 v 0.22852 h 0.458985 v -0.22852 z m 0.689453,0 v 0.22852 h 0.458985 v -0.22852 z"
|
||||
id="path78" />
|
||||
<g
|
||||
id="g76">
|
||||
<path
|
||||
style="color:#000000;fill:#eeb000;-inkscape-stroke:none"
|
||||
d="m 55.066406,184.70117 -1.669922,0.83594 1.669922,0.83398 0.146485,-0.29101 -1.089844,-0.54492 1.089844,-0.54297 z"
|
||||
id="path76" />
|
||||
</g>
|
||||
</g>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-weight:bold;font-size:2.11667px;font-family:Arial;-inkscape-font-specification:'Arial Bold';mix-blend-mode:normal;fill:#a4a4a4;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-dasharray:none"
|
||||
x="67.405975"
|
||||
y="181.39328"
|
||||
id="text2-2-7-49-5-3-2-6-8"><tspan
|
||||
id="tspan2-9-0-96-4-1-8-8-5"
|
||||
style="font-size:2.11667px;fill:#a4a4a4;fill-opacity:1;stroke-width:0;stroke-dasharray:none"
|
||||
x="67.405975"
|
||||
y="181.39328">ref.quantity_from_zero()</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-weight:bold;font-size:2.11667px;font-family:Arial;-inkscape-font-specification:'Arial Bold';mix-blend-mode:normal;fill:#a4a4a4;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-dasharray:none"
|
||||
x="58.698536"
|
||||
y="177.26396"
|
||||
id="text2-2-7-49-5-3-2-6-8-0"><tspan
|
||||
id="tspan2-9-0-96-4-1-8-8-5-1"
|
||||
style="font-size:2.11667px;fill:#a4a4a4;fill-opacity:1;stroke-width:0;stroke-dasharray:none"
|
||||
x="58.698536"
|
||||
y="177.26396">ref.in(deg_F).quantity_from_zero()</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-weight:bold;font-size:2.11667px;font-family:Arial;-inkscape-font-specification:'Arial Bold';mix-blend-mode:normal;fill:#a4a4a4;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-dasharray:none"
|
||||
x="53.553532"
|
||||
y="173.49559"
|
||||
id="text2-2-7-49-5-3-2-6-8-0-2"><tspan
|
||||
id="tspan2-9-0-96-4-1-8-8-5-1-6"
|
||||
style="font-size:2.11667px;fill:#a4a4a4;fill-opacity:1;stroke-width:0;stroke-dasharray:none"
|
||||
x="53.553532"
|
||||
y="173.49559">ref.in(K).quantity_from_zero()</tspan></text>
|
||||
<path
|
||||
style="color:#000000;fill:#a4a4a4;fill-opacity:0.960784;-inkscape-stroke:none"
|
||||
d="M 96.795779,182.45468 H 108.41217"
|
||||
id="path59-4" />
|
||||
<path
|
||||
style="color:#000000;fill:#a4a4a4;fill-opacity:0.960784;stroke-width:1;-inkscape-stroke:none"
|
||||
d="m 60.875675,182.23658 v 0.25 h 37.435374 v -0.25 z"
|
||||
id="path60-2" />
|
||||
<g
|
||||
id="g58-4"
|
||||
transform="translate(-8.013114,83.289212)">
|
||||
<path
|
||||
style="color:#000000;fill:#a4a4a4;-inkscape-stroke:none"
|
||||
d="m 105.0293,98.164062 -0.15821,0.316407 1.1836,0.591797 -1.1836,0.591796 0.15821,0.316407 1.81445,-0.908203 z"
|
||||
id="path58-3" />
|
||||
</g>
|
||||
<path
|
||||
style="color:#000000;fill:#a4a4a4;fill-opacity:0.960784;stroke-width:0.999998;-inkscape-stroke:none"
|
||||
d="m 53.529259,178.23299 v 0.25 h 44.82539 v -0.25 z"
|
||||
id="path60-2-4" />
|
||||
<g
|
||||
id="g58-4-1"
|
||||
transform="translate(-7.9695261,79.285615)">
|
||||
<path
|
||||
style="color:#000000;fill:#a4a4a4;-inkscape-stroke:none"
|
||||
d="m 105.0293,98.164062 -0.15821,0.316407 1.1836,0.591797 -1.1836,0.591796 0.15821,0.316407 1.81445,-0.908203 z"
|
||||
id="path58-3-2" />
|
||||
</g>
|
||||
<path
|
||||
style="color:#000000;fill:#a4a4a4;fill-opacity:0.960784;stroke-width:1;-inkscape-stroke:none"
|
||||
d="m 38.454855,174.24041 v 0.25 h 59.979562 v -0.25 z"
|
||||
id="path60-2-4-4" />
|
||||
<g
|
||||
id="g58-4-1-0"
|
||||
transform="translate(-7.8897477,75.293022)">
|
||||
<path
|
||||
style="color:#000000;fill:#a4a4a4;-inkscape-stroke:none"
|
||||
d="m 105.0293,98.164062 -0.15821,0.316407 1.1836,0.591797 -1.1836,0.591796 0.15821,0.316407 1.81445,-0.908203 z"
|
||||
id="path58-3-2-1" />
|
||||
</g>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-weight:bold;font-size:2.11667px;font-family:Arial;-inkscape-font-specification:'Arial Bold';text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.298;stroke-miterlimit:4;stroke-dasharray:1.192, 0.298;stroke-dashoffset:0;stroke-opacity:0"
|
||||
x="107.69614"
|
||||
y="179.50262"
|
||||
id="text5-4"><tspan
|
||||
style="font-size:2.11667px;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:0.298"
|
||||
x="107.69614"
|
||||
y="179.50262"
|
||||
id="tspan6-5">origin doesn't</tspan><tspan
|
||||
style="font-size:2.11667px;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:0.298"
|
||||
x="107.69614"
|
||||
y="182.14847"
|
||||
id="tspan74">change</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-weight:bold;font-size:2.11667px;font-family:Arial;-inkscape-font-specification:'Arial Bold';text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.298;stroke-miterlimit:4;stroke-dasharray:1.192, 0.298;stroke-dashoffset:0;stroke-opacity:0"
|
||||
x="38.430073"
|
||||
y="204.1608"
|
||||
id="text5-7-4"><tspan
|
||||
style="font-size:2.11667px;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:0.298"
|
||||
x="38.430073"
|
||||
y="204.1608"
|
||||
id="tspan4-0">absolute</tspan><tspan
|
||||
style="font-size:2.11667px;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:0.298"
|
||||
x="38.430073"
|
||||
y="206.80664"
|
||||
id="tspan7-5">point origin</tspan></text>
|
||||
<g
|
||||
id="path9-0-6-5"
|
||||
transform="translate(-0.62311928,81.062942)">
|
||||
<path
|
||||
style="color:#000000;fill:#000000;-inkscape-stroke:none"
|
||||
d="m 38.974609,116.68945 -0.08789,4.44141 0.199218,0.004 0.08594,-4.44141 z"
|
||||
id="path62-8" />
|
||||
<g
|
||||
id="g61-4">
|
||||
<path
|
||||
style="color:#000000;fill:#000000;-inkscape-stroke:none"
|
||||
d="m 39.082031,116.2793 -0.748047,1.42383 0.248047,0.13085 0.488281,-0.92773 0.449219,0.94531 0.253906,-0.11914 z"
|
||||
id="path61-9" />
|
||||
</g>
|
||||
</g>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-weight:bold;font-size:2.11667px;font-family:Arial;-inkscape-font-specification:'Arial Bold';text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.298;stroke-miterlimit:4;stroke-dasharray:1.192, 0.298;stroke-dashoffset:0;stroke-opacity:0"
|
||||
x="79.547623"
|
||||
y="204.1608"
|
||||
id="text5-7-3-4"><tspan
|
||||
style="font-size:2.11667px;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:0.298"
|
||||
x="79.547623"
|
||||
y="204.1608"
|
||||
id="tspan7-2-3">relative</tspan><tspan
|
||||
style="font-size:2.11667px;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:0.298"
|
||||
x="79.547623"
|
||||
y="206.80664"
|
||||
id="tspan8-0">point origins</tspan></text>
|
||||
<g
|
||||
id="path9-0-62-3"
|
||||
transform="matrix(-0.88043225,-0.34268112,0.34149681,-0.88348559,74.3932,292.94917)"
|
||||
style="stroke-width:1.05711">
|
||||
<g
|
||||
id="path74-6">
|
||||
<path
|
||||
style="color:#000000;fill:#000000;-inkscape-stroke:none"
|
||||
d="M 55.543497,87.783264 34.863524,88.174435"
|
||||
id="path86" />
|
||||
<path
|
||||
style="color:#000000;fill:#000000;-inkscape-stroke:none"
|
||||
d="m 55.541016,87.677734 -20.679688,0.390625 0.0039,0.210938 20.679688,-0.390625 z"
|
||||
id="path87" />
|
||||
<g
|
||||
id="g85">
|
||||
<path
|
||||
style="color:#000000;fill:#000000;-inkscape-stroke:none"
|
||||
d="m 54.433594,87.037109 -0.128907,0.269532 1.009766,0.480468 -0.990234,0.519532 0.138672,0.265625 1.521484,-0.796875 z"
|
||||
id="path85" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
id="path74-6-5">
|
||||
<path
|
||||
style="color:#000000;fill:#000000;-inkscape-stroke:none"
|
||||
d="m 63.088004,196.09182 12.447609,6.08624"
|
||||
id="path89" />
|
||||
<path
|
||||
style="color:#000000;fill:#000000;-inkscape-stroke:none"
|
||||
d="m 63.132812,196.00195 -0.08789,0.17969 12.447265,6.08594 0.08789,-0.17969 z"
|
||||
id="path90" />
|
||||
<g
|
||||
id="g88">
|
||||
<path
|
||||
style="color:#000000;fill:#000000;-inkscape-stroke:none"
|
||||
d="m 64.337891,195.89453 -1.623047,0.0137 0.986328,1.29102 0.224609,-0.17188 -0.642578,-0.83984 1.058594,-0.01 z"
|
||||
id="path88" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
id="path74-6-9">
|
||||
<path
|
||||
style="color:#000000;fill:#000000;-inkscape-stroke:none"
|
||||
d="m 95.737262,196.18309 -11.593285,7.11523"
|
||||
id="path92" />
|
||||
<path
|
||||
style="color:#000000;fill:#000000;-inkscape-stroke:none"
|
||||
d="m 95.685547,196.09766 -11.59375,7.11523 0.103515,0.16992 11.59375,-7.11523 z"
|
||||
id="path93" />
|
||||
<g
|
||||
id="g91">
|
||||
<path
|
||||
style="color:#000000;fill:#000000;-inkscape-stroke:none"
|
||||
d="m 96.091797,195.96484 -1.617188,0.14063 0.02344,0.2832 1.05664,-0.0918 -0.560546,0.89844 0.240234,0.14844 z"
|
||||
id="path91" />
|
||||
</g>
|
||||
</g>
|
||||
<circle
|
||||
style="fill:#09ad00;fill-opacity:1;stroke:none;stroke-width:0.2;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="path75"
|
||||
cx="98.909256"
|
||||
cy="185.9398"
|
||||
r="0.49345818" />
|
||||
<g
|
||||
id="path9-0-62"
|
||||
transform="matrix(-0.88043226,-0.34268111,0.34149681,-0.88348558,112.41926,270.70219)"
|
||||
style="stroke-width:1.05711">
|
||||
<g
|
||||
id="path74">
|
||||
<path
|
||||
style="color:#000000;fill:#000000;-inkscape-stroke:none"
|
||||
d="m 45.118218,79.121239 -2.044871,4.333544"
|
||||
id="path95" />
|
||||
<path
|
||||
style="color:#000000;fill:#000000;-inkscape-stroke:none"
|
||||
d="M 45.023437,79.076172 42.978516,83.410156 43.169922,83.5 45.212891,79.166016 Z"
|
||||
id="path96" />
|
||||
<g
|
||||
id="g94">
|
||||
<path
|
||||
style="color:#000000;fill:#000000;-inkscape-stroke:none"
|
||||
d="m 45.306641,78.722656 -1.351563,1.0625 0.185547,0.234375 0.880859,-0.691406 0.02539,1.119141 0.298828,-0.0078 z"
|
||||
id="path94" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 25 KiB |
@ -3,13 +3,16 @@
|
||||
The affine space has two types of entities:
|
||||
|
||||
- **_Point_** - a position specified with coordinate values (e.g., location, address, etc.)
|
||||
- **_Vector_** - the difference between two points (e.g., shift, offset, displacement, duration, etc.)
|
||||
- **_Displacement vectors_** - the difference between two points (e.g., shift, offset,
|
||||
displacement, duration, etc.)
|
||||
|
||||
In the following subchapters, we will often refer to _displacement vectors_ simply as _vectors_ for
|
||||
brevity.
|
||||
|
||||
!!! note
|
||||
|
||||
The _Vector_ described here is specific to the affine space theory and is not the same thing
|
||||
as the quantity of a vector character that we discussed in the
|
||||
The _displacement vector_ described here is specific to the affine space theory and is not the same
|
||||
thing as the quantity of a vector character that we discussed in the
|
||||
["Scalars, vectors, and tensors" chapter](character_of_a_quantity.md#scalars-vectors-and-tensors)
|
||||
(although, in some cases, those terms may overlap).
|
||||
|
||||
@ -18,24 +21,24 @@ The affine space has two types of entities:
|
||||
|
||||
Here are the primary operations one can do in the affine space:
|
||||
|
||||
- _Vector_ + _Vector_ -> _Vector_
|
||||
- _Vector_ - _Vector_ -> _Vector_
|
||||
- -_Vector_ -> _Vector_
|
||||
- _Vector_ * Scalar -> _Vector_
|
||||
- Scalar * _Vector_ -> _Vector_
|
||||
- _Vector_ / Scalar -> _Vector_
|
||||
- _Point_ - _Point_ -> _Vector_
|
||||
- _Point_ + _Vector_ -> _Point_
|
||||
- _Vector_ + _Point_ -> _Point_
|
||||
- _Point_ - _Vector_ -> _Point_
|
||||
- _vector_ + _vector_ -> _vector_
|
||||
- _vector_ - _vector_ -> _vector_
|
||||
- -_vector_ -> _vector_
|
||||
- _vector_ * scalar -> _vector_
|
||||
- scalar * _vector_ -> _vector_
|
||||
- _vector_ / scalar -> _vector_
|
||||
- _point_ - _point_ -> _vector_
|
||||
- _point_ + _vector_ -> _point_
|
||||
- _vector_ + _point_ -> _point_
|
||||
- _point_ - _vector_ -> _point_
|
||||
|
||||
!!! important
|
||||
|
||||
It is not possible to:
|
||||
|
||||
- add two _Points_,
|
||||
- subtract a _Point_ from a _Vector_,
|
||||
- multiply nor divide _Points_ with anything else.
|
||||
- add two _points_,
|
||||
- subtract a _point_ from a _vector_,
|
||||
- multiply nor divide _points_ with anything else.
|
||||
|
||||
|
||||
## _Points_ are more common than most of us imagine
|
||||
@ -55,7 +58,7 @@ more popular in the products we implement. They can be used to implement:
|
||||
Improving the affine space's _Points_ intuition will allow us to write better and safer software.
|
||||
|
||||
|
||||
## _Vector_ is modeled by `quantity`
|
||||
## _Displacement vector_ is modeled by `quantity`
|
||||
|
||||
Up until now, each time we used a `quantity` in our code, we were modeling some kind of a
|
||||
difference between two things:
|
||||
@ -64,15 +67,15 @@ difference between two things:
|
||||
- _duration_ between two time points,
|
||||
- the difference in _speed_ (even if relative to zero).
|
||||
|
||||
As we already know, a `quantity` type provides all operations required for a _Vector_ type in
|
||||
the affine space.
|
||||
As we already know, a `quantity` type provides all operations required for a _displacement vcector_
|
||||
abstraction in an affine space.
|
||||
|
||||
|
||||
## _Point_ is modeled by `quantity_point` and `PointOrigin`
|
||||
|
||||
In the **mp-units** library the _Point_ abstraction is modelled by:
|
||||
In the **mp-units** library, the _Point_ abstraction is modelled by:
|
||||
|
||||
- [`PointOrigin` concept](concepts.md#PointOrigin) that specifies measurement origin,
|
||||
- [`PointOrigin` concept](concepts.md#PointOrigin) that specifies measurement origin, and
|
||||
- `quantity_point` class template that specifies a _Point_ relative to a specific predefined origin.
|
||||
|
||||
|
||||
@ -90,125 +93,119 @@ class quantity_point;
|
||||
|
||||
As we can see above, the `quantity_point` class template exposes one additional parameter compared
|
||||
to `quantity`. The `PO` parameter satisfies a [`PointOriginFor` concept](concepts.md#PointOriginFor)
|
||||
and specifies the origin of our measurement scale. By default, it is initialized with a quantity's
|
||||
zeroth point using the following rules:
|
||||
and specifies the origin of our measurement scale.
|
||||
|
||||
Each `quantity_point` internally stores a `quantity` object, which represents a _displacement vector_
|
||||
from the predefined origin. Thanks to this, an instantiation of a `quantity_point` can be considered
|
||||
as a model of a vector space from such an origin.
|
||||
|
||||
Forcing the user to manually predefine an origin for every domain may be cumbersome and discourage
|
||||
users from using such abstractions at all. This is why, by default, the `PO` template
|
||||
parameter is initialized with the `default_point_origin(R)` that provides the quantity points'
|
||||
scale zeroth point using the following rules:
|
||||
|
||||
- if the measurement unit of a quantity specifies its point origin in its definition
|
||||
(e.g., degree Celsius), then this point is being used,
|
||||
- otherwise, an instantiation of `zeroth_point_origin<QuantitySpec>` is being used which
|
||||
provides a zeroth point for a specific quantity type.
|
||||
provides a well-established zeroth point for a specific quantity type.
|
||||
|
||||
!!! tip
|
||||
|
||||
The `quantity_point` definition can be found in the `mp-units/quantity_point.h` header file.
|
||||
|
||||
|
||||
### Implicit point origin
|
||||
#### `zeroth_point_origin<QuantitySpec>`
|
||||
|
||||
Let's assume that Alice goes for a trip driving a car. She likes taking notes about interesting
|
||||
places that she visits on the road. For every such item, she writes down:
|
||||
`zeroth_point_origin<QuantitySpec>` is meant to be used in cases where the specific domain has
|
||||
a well-established, non-controversial zeroth point on the measurement scale. This saves the user
|
||||
from the need to write a boilerplate code that would predefine such a type for such a domain.
|
||||
|
||||
- its name,
|
||||
- a readout from the car's odometer at the location,
|
||||
- a current timestamp.
|
||||
|
||||
We can implement this in the following way:
|
||||
{style="width:80%;display: block;margin: 0 auto;"}
|
||||
|
||||
```cpp
|
||||
using std::chrono::system_clock;
|
||||
quantity_point<isq::distance[si::metre]> qp1{100 * m};
|
||||
quantity_point<isq::distance[si::metre]> qp2{120 * m};
|
||||
|
||||
struct trip_log_item {
|
||||
std::string name;
|
||||
quantity_point<isq::distance[km]> odometer;
|
||||
quantity_point<si::second> timestamp;
|
||||
};
|
||||
using trip_log = std::vector<trip_log_item>;
|
||||
assert(qp1.quantity_from_zero() == 100 * m);
|
||||
assert(qp2.quantity_from_zero() == 120 * m);
|
||||
|
||||
assert(qp2 - qp1 == 20 * m);
|
||||
assert(qp1 - qp2 == -20 * m);
|
||||
|
||||
// auto res = qp1 + qp2; // Compile-time error
|
||||
```
|
||||
|
||||
In the above code `100 * m` and `120 * m` still create two quantities that serve as _displacement
|
||||
vectors_ here. Quantity point objects can be explicitly constructed from such quantities only when
|
||||
their origin is an instantiation of the `zeroth_point_origin<QuantitySpec>`.
|
||||
|
||||
It is really important to understand that even though we can use `.quantity_from_zero()` to obtain
|
||||
the _displacement vector_ of a point from the origin, the point by itself does not represent or have
|
||||
any associated physical value. It is just a point in some space. The same point can be expressed
|
||||
with different _displacement vectors_ from different origins.
|
||||
|
||||
It is also worth mentioning that simplicity comes with a safety cost here. For some users, it
|
||||
might be surprising that the usage of `zeroth_point_origin<QuantitySpec>` makes various quantity
|
||||
point objects compatible as long as quantity types used in the origin and reference are
|
||||
compatible:
|
||||
|
||||
```cpp
|
||||
trip_log log;
|
||||
quantity_point<si::metre> qp1{isq::distance(100 * m)};
|
||||
quantity_point<si::metre> qp2{isq::height(120 * m)};
|
||||
|
||||
quantity_point timestamp_1{quantity{system_clock::now().time_since_epoch()}};
|
||||
log.emplace_back("home", quantity_point{1356 * km}, timestamp_1);
|
||||
|
||||
// some time passes
|
||||
|
||||
quantity_point timestamp_2{quantity{system_clock::now().time_since_epoch()}};
|
||||
log.emplace_back("castle", quantity_point{1401 * km}, timestamp_2);
|
||||
assert(qp2 - qp1 == 20 * m);
|
||||
assert(qp1 - qp2 == -20 * m);
|
||||
```
|
||||
|
||||
This is an excellent example of where points are helpful. There is no doubt about the correctness
|
||||
of their usage in this scenario:
|
||||
|
||||
- adding two odometer readouts or two timestamps have no physical sense, and that is why we will
|
||||
expect a compile-time error when we try to perform such operations accidentally,
|
||||
- subtracting two odometer readouts or timestamps is perfectly valid and results in a quantity
|
||||
storing the interval value between the two points.
|
||||
### Absolute _point_ origin
|
||||
|
||||
Having such a database, we can print the trip log in the following way:
|
||||
In cases where we want to implement an isolated independent space in which points are not compatible
|
||||
with other spaces, even of the same quantity type, we should manually predefine an absolute point
|
||||
origin.
|
||||
|
||||
{style="width:80%;display: block;margin: 0 auto;"}
|
||||
|
||||
```cpp
|
||||
for (const auto& item : log) {
|
||||
std::cout << "POI: " << item.name << "\n";
|
||||
std::cout << "- Distance from home: " << item.odometer - log.front().odometer << "\n";
|
||||
std::cout << "- Trip duration from start: " << (item.timestamp - log.front().timestamp).in(non_si::minute) << "\n";
|
||||
}
|
||||
inline constexpr struct origin : absolute_point_origin<origin, isq::distance> {} origin;
|
||||
|
||||
// quantity_point<si::metre, origin> qp1{100 * m}; // Compile-time error
|
||||
// quantity_point<si::metre, origin> qp2{120 * m}; // Compile-time error
|
||||
quantity_point<si::metre, origin> qp1 = origin + 100 * m;
|
||||
quantity_point<si::metre, origin> qp2 = 120 * m + origin;
|
||||
|
||||
// assert(qp1.quantity_from_zero() == 100 * m); // Compile-time error
|
||||
// assert(qp2.quantity_from_zero() == 120 * m); // Compile-time error
|
||||
assert(qp1.quantity_from(origin) == 100 * m);
|
||||
assert(qp2.quantity_from(origin) == 120 * m);
|
||||
|
||||
assert(qp1 - origin == 100 * m);
|
||||
assert(qp2 - origin == 120 * m);
|
||||
assert(origin - qp1 == -100 * m);
|
||||
assert(origin - qp2 == -120 * m);
|
||||
|
||||
assert(qp2 - qp1 == 20 * m);
|
||||
```
|
||||
|
||||
Moreover, if Alice had reset the car's trip odometer before leaving home, we could have rewritten
|
||||
one of the previous lines like that:
|
||||
This time, we can't construct a quantity point from any quantity. In order to prevent potential safety
|
||||
issues, when a custom point origin is being used, we always need to provide its object in
|
||||
an expression that results in a quantity point instantiation.
|
||||
|
||||
!!! info
|
||||
|
||||
A rationale for this longer construction syntax can be found in the
|
||||
[Why can't I create a quantity by passing a number to a constructor?](../../getting_started/faq.md#why-cant-i-create-a-quantity-by-passing-a-number-to-a-constructor)
|
||||
chapter.
|
||||
|
||||
Similarly to [creation of a quantity](../../getting_started/quick_start.md#creating-a-quantity),
|
||||
if someone does not like the operator-based syntax to create a `quantity_point`, the same results
|
||||
can be achieved with a two-parameter constructor:
|
||||
|
||||
```cpp
|
||||
std::cout << "Distance from home: " << item.odometer.quantity_from_zero() << "\n";
|
||||
quantity_point qp1{100 * m, origin};
|
||||
```
|
||||
|
||||
The above always returns a quantity measured from the "ultimate" zeroth point of a scale used for
|
||||
this specific quantity type.
|
||||
|
||||
!!! tip
|
||||
|
||||
Storing _Points_ is the most efficient representation we can choose in this scenario:
|
||||
|
||||
- to store a value, we read it directly from the instrument, and no additional transformation
|
||||
is needed,
|
||||
- to print the absolute value (e.g., odometer), we have the value available right away,
|
||||
- to get any relative quantity (e.g., distance from the start, distance from the previous point,
|
||||
etc.), we have to perform a single subtraction operation.
|
||||
|
||||
If we stored _Vectors_ in our database instead, we would have to pay at runtime for additional
|
||||
operations:
|
||||
|
||||
- to store a quantity, we would have to perform the subtraction right away to get the interval
|
||||
between the current value and some reference point,
|
||||
- to print the absolute value, we would have to add the quantity to the reference point that
|
||||
we need to store somewhere in the database as well,
|
||||
- to get a relative quantity, only the currently stored one is immediate; all other values
|
||||
will require at least one quantity addition operation.
|
||||
|
||||
Now, let's assume that Bob, a friend of Alice, also keeps a log of his trips but he, of
|
||||
course, measures distances from his own home with the odometer in his car. Everything is fine as
|
||||
long as we deal with one trip at a time, but if we start to work with both at once, we may
|
||||
accidentally subtract points from different trips. The library will not prevent
|
||||
us from doing so.
|
||||
|
||||
The points from Alice's and Bob's trips should be considered separate, and to enforce it at
|
||||
compilation time, we need to introduce explicit origins.
|
||||
|
||||
|
||||
### Absolute _Point_ origin
|
||||
|
||||
The **absolute point origin** specifies the "zero" of our measurement's scale. User can
|
||||
specify such an origin by deriving from the `absolute_point_origin` class template:
|
||||
|
||||
```cpp
|
||||
enum class actor { alice, bob };
|
||||
|
||||
template<actor A>
|
||||
struct zeroth_odometer_t : absolute_point_origin<zeroth_odometer_t<A>, isq::distance> {};
|
||||
|
||||
template<actor A>
|
||||
inline constexpr zeroth_odometer_t<A> zeroth_odometer;
|
||||
```
|
||||
Again, CTAD always helps to use precisely the type we need in a current case.
|
||||
|
||||
!!! info
|
||||
|
||||
@ -225,212 +222,148 @@ inline constexpr zeroth_odometer_t<A> zeroth_odometer;
|
||||
- we can't define the above in one line of code,
|
||||
- provide the same identifier for a class and variable template.
|
||||
|
||||
Odometer is not the only one that can get an explicit point origin in our case. As timestamps are
|
||||
provided by the `std::chrono::system_clock`, their values are always relative to the epoch of this
|
||||
clock.
|
||||
Finally, please note that it is not allowed to subtract two point origins defined in terms of
|
||||
`absolute_point_origin` (e.g., `origin - origin`) as those do not contain information about the
|
||||
unit, so we cannot determine a resulting `quantity` type.
|
||||
|
||||
!!! note
|
||||
Absolute point origins are also perfect for establishing independent spaces even if the same quantity
|
||||
type and unit is being used:
|
||||
|
||||
The **mp-units** library provides means to specify
|
||||
[interoperability with other units libraries](../use_cases/interoperability_with_other_libraries.md).
|
||||
It also has built-in compatibility with `std::chrono` types, so users do not have to define
|
||||
interoperability traits or point origins for such types by themselves. Those are already
|
||||
provided in the `mp-units/systems/si/chrono.h` header file.
|
||||
|
||||
|
||||
Now, we can refactor our database to benefit from the explicit points:
|
||||
{style="width:80%;display: block;margin: 0 auto;"}
|
||||
|
||||
```cpp
|
||||
template<actor A>
|
||||
struct trip_log_item {
|
||||
std::string point_name;
|
||||
quantity_point<si::kilo<si::metre>, zeroth_odometer<A>> odometer;
|
||||
quantity_point<si::second, chrono_point_origin<system_clock>> timestamp;
|
||||
};
|
||||
inline constexpr struct origin1 : absolute_point_origin<origin1, isq::distance> {} origin1;
|
||||
inline constexpr struct origin2 : absolute_point_origin<origin2, isq::distance> {} origin2;
|
||||
|
||||
template<actor A>
|
||||
using trip_log = std::vector<trip_log_item<A>>;
|
||||
quantity_point qp1 = origin1 + 100 * m;
|
||||
quantity_point qp2 = origin2 + 120 * m;
|
||||
|
||||
assert(qp1.quantity_from(origin1) == 100 * m);
|
||||
assert(qp2.quantity_from(origin2) == 120 * m);
|
||||
|
||||
assert(qp1 - origin1 == 100 * m);
|
||||
assert(qp2 - origin2 == 120 * m);
|
||||
assert(origin1 - qp1 == -100 * m);
|
||||
assert(origin2 - qp2 == -120 * m);
|
||||
|
||||
// assert(qp2 - qp1 == 20 * m); // Compile-time error
|
||||
// assert(qp1 - origin2 == 100 * m); // Compile-time error
|
||||
// assert(qp2 - origin1 == 120 * m); // Compile-time error
|
||||
// assert(qp1.quantity_from(origin2) == 100 * m); // Compile-time error
|
||||
// assert(qp2.quantity_from(origin1) == 120 * m); // Compile-time error
|
||||
```
|
||||
|
||||
We also need to update the initialization part in our code. In the case of implicit zeroth origins,
|
||||
we could construct `quantity_point` directly from the value of a `quantity`. This is no longer
|
||||
the case.
|
||||
As a _Point_ can be represented with a _Vector_ from the origin, to improve the safety of the code
|
||||
we write, a `quantity_point` class template must be created with one of the following operations:
|
||||
|
||||
```cpp
|
||||
quantity_point qp1 = zeroth_odometer<actor::alice> + 1356 * km;
|
||||
quantity_point qp2 = 1356 * km + zeroth_odometer<actor::alice>;
|
||||
quantity_point qp3 = zeroth_odometer<actor::alice> - 1356 * km;
|
||||
```
|
||||
|
||||
Although, the `qp3` above does not have a physical sense in this specific scenario.
|
||||
|
||||
!!! note
|
||||
|
||||
[It is not allowed to subtract a _Point_ from a _Vector_](#operations-in-the-affine-space)
|
||||
thus `1356 * km - zeroth_odometer<actor::alice>` is an invalid operation.
|
||||
|
||||
!!! info
|
||||
|
||||
A rationale for this longer construction syntax can be found in the
|
||||
[Why can't I create a quantity by passing a number to a constructor?](../../getting_started/faq.md#why-cant-i-create-a-quantity-by-passing-a-number-to-a-constructor)
|
||||
chapter.
|
||||
|
||||
Similarly to [creation of a quantity](../../getting_started/quick_start.md#creating-a-quantity),
|
||||
if someone does not like the operator-based syntax to create a `quantity_point`, the same results
|
||||
can be achieved with a two-parameter constructor:
|
||||
|
||||
```cpp
|
||||
quantity_point qp4{1356 * km, zeroth_odometer<actor::alice>};
|
||||
```
|
||||
|
||||
Also, as now our timestamps have a proper point origin provided in a type, we can simplify the
|
||||
previous code by directly converting `std::chrono::time_point` to our `quantity_point` type.
|
||||
|
||||
With all the above, we can refactor our initialization part to the following:
|
||||
|
||||
```cpp
|
||||
trip_log<actor::alice> alice_log;
|
||||
|
||||
alice_log.emplace_back("home", zeroth_odometer<actor::alice> + 1356 * km, system_clock::now());
|
||||
|
||||
// some time passes
|
||||
|
||||
alice_log.emplace_back("castle", zeroth_odometer<actor::alice> + 1401 * km, system_clock::now());
|
||||
```
|
||||
|
||||
|
||||
### _Point_ arithmetics
|
||||
|
||||
As another example, let's assume we will attend the CppCon conference hosted in Aurora, CO,
|
||||
and we want to estimate the distance we will travel. We have to take a taxi to a local airport,
|
||||
fly to DEN airport with a stopover in FRA, and, in the end, get a cab to the Gaylord Rockies
|
||||
Resort & Convention Center:
|
||||
|
||||
```cpp
|
||||
constexpr struct home : absolute_point_origin<home, isq::distance> {} home;
|
||||
|
||||
quantity_point<isq::distance[km], home> home_airport = home + 15 * km;
|
||||
quantity_point<isq::distance[km], home> fra_airport = home_airport + 829 * km;
|
||||
quantity_point<isq::distance[km], home> den_airport = fra_airport + 8115 * km;
|
||||
quantity_point<isq::distance[km], home> cppcon_venue = den_airport + 10.1 * mi;
|
||||
```
|
||||
|
||||
As we can see above, we can easily get a new point by adding a quantity to an origin or another
|
||||
quantity point.
|
||||
|
||||
If we want to find out the distance traveled between two points, we simply subtract them:
|
||||
|
||||
```cpp
|
||||
quantity<isq::distance[km]> total = cppcon_venue - home;
|
||||
quantity<isq::distance[km]> flight = den_airport - home_airport;
|
||||
```
|
||||
|
||||
If we would like to find out the total distance traveled by taxi as well, we have to do a bit
|
||||
more calculations:
|
||||
|
||||
```cpp
|
||||
quantity<isq::distance[km]> taxi1 = home_airport - home;
|
||||
quantity<isq::distance[km]> taxi2 = cppcon_venue - den_airport;
|
||||
quantity<isq::distance[km]> taxi = taxi1 + taxi2;
|
||||
```
|
||||
|
||||
Now, if we print the results:
|
||||
|
||||
```cpp
|
||||
std::cout << "Total distance: " << total << "\n";
|
||||
std::cout << "Flight distance: " << flight << "\n";
|
||||
std::cout << "Taxi distance: " << taxi << "\n";
|
||||
```
|
||||
|
||||
we will see the following output:
|
||||
|
||||
```text
|
||||
Total distance: 8975.25 km
|
||||
Flight distance: 8944 km
|
||||
Taxi distance: 31.2544 km
|
||||
```
|
||||
|
||||
!!! note
|
||||
|
||||
It is not allowed to subtract two point origins defined in terms of `absolute_point_origin`
|
||||
(e.g., `home - home`) as those do not contain information about the unit, so we are not able
|
||||
to determine a resulting `quantity` type.
|
||||
|
||||
|
||||
### Relative _Point_ origin
|
||||
|
||||
We often do not have only one ultimate "zero" point when we measure things.
|
||||
We often do not have only one ultimate "zero" point when we measure things. Often, we have one
|
||||
common scale, but we measure various quantities relative to different points and expect
|
||||
those points to be compatible. There are many examples here, but probably the most common are
|
||||
temperatures, timestamps, and altitudes.
|
||||
|
||||
For example, let's assume that we have the following absolute point origin:
|
||||
For such cases, relative point origins should be used:
|
||||
|
||||
{style="width:80%;display: block;margin: 0 auto;"}
|
||||
|
||||
```cpp
|
||||
constexpr struct mean_sea_level : absolute_point_origin<mean_sea_level, isq::altitude> {} mean_sea_level;
|
||||
```
|
||||
inline constexpr struct A : absolute_point_origin<A, isq::distance> {} A;
|
||||
inline constexpr struct B : relative_point_origin<A + 10 * m> {} B;
|
||||
inline constexpr struct C : relative_point_origin<B + 10 * m> {} C;
|
||||
inline constexpr struct D : relative_point_origin<A + 30 * m> {} D;
|
||||
|
||||
If we want to model a trip to Mount Everest, measuring all daily hikes from the `mean_sea_level`
|
||||
might not be efficient. We may know that we are not good climbers, so all our climbs can be
|
||||
represented with an 8-bit integer type, allowing us to save memory in our database of climbs.
|
||||
quantity_point qp1 = C + 100 * m;
|
||||
quantity_point qp2 = D + 120 * m;
|
||||
|
||||
For this purpose, we can define a `relative_point_origin` in the following way:
|
||||
assert(qp1.quantity_ref_from(qp1.point_origin) == 100 * m);
|
||||
assert(qp2.quantity_ref_from(qp2.point_origin) == 120 * m);
|
||||
|
||||
```cpp
|
||||
constexpr struct everest_base_camp : relative_point_origin<mean_sea_level + 5364 * m> {} everest_base_camp;
|
||||
```
|
||||
assert(qp1 - A == 120 * m);
|
||||
assert(qp1 - B == 110 * m);
|
||||
assert(qp1 - C == 100 * m);
|
||||
assert(qp1 - D == 90 * m);
|
||||
assert(qp1.quantity_from(A) == 120 * m);
|
||||
assert(qp1.quantity_from(B) == 110 * m);
|
||||
assert(qp1.quantity_from(C) == 100 * m);
|
||||
assert(qp1.quantity_from(D) == 90 * m);
|
||||
|
||||
The above can be used as an origin for subsequent _Points_:
|
||||
assert(qp2 - A == 150 * m);
|
||||
assert(qp2 - B == 140 * m);
|
||||
assert(qp2 - C == 130 * m);
|
||||
assert(qp2 - D == 120 * m);
|
||||
assert(qp2.quantity_from(A) == 150 * m);
|
||||
assert(qp2.quantity_from(B) == 140 * m);
|
||||
assert(qp2.quantity_from(C) == 130 * m);
|
||||
assert(qp2.quantity_from(D) == 120 * m);
|
||||
|
||||
```cpp
|
||||
constexpr quantity_point first_climb_alt = everest_base_camp + isq::altitude(std::uint8_t{42} * m);
|
||||
static_assert(first_climb_alt.quantity_from(everest_base_camp) == 42 * m);
|
||||
static_assert(first_climb_alt.quantity_from(mean_sea_level) == 5406 * m);
|
||||
static_assert(first_climb_alt.quantity_from_zero() == 5406 * m);
|
||||
assert(qp2 - qp1 == 30 * m);
|
||||
|
||||
assert(B - A == 10 * m);
|
||||
assert(C - A == 20 * m);
|
||||
assert(D - A == 30 * m);
|
||||
assert(D - C == 10 * m);
|
||||
```
|
||||
|
||||
As we can see above, the `quantity_from()` member function returns a relative distance from the
|
||||
provided point origin while the `quantity_from_zero()` returns the distance from the absolute point
|
||||
origin.
|
||||
provided point origin while the `quantity_from_zero()` always returns the distance from the
|
||||
absolute point origin.
|
||||
|
||||
Also, please note that as long as we can't subtract two absolute point origins from each other,
|
||||
it is possible to subtract relative ones or a relative and absolute one.
|
||||
|
||||
|
||||
### Converting between different representations of the same _Point_
|
||||
### Converting between different representations of the same _point_
|
||||
|
||||
As we might represent the same _Point_ with _Vectors_ from various origins, the **mp-units** library
|
||||
provides facilities to convert the _Point_ to `quantity_point` class templates expressed in
|
||||
terms of origins relative to each other in the type system.
|
||||
As we might represent the same _point_ with _displacement vectors_ from various origins, the
|
||||
library provides facilities to convert the same _point_ to the `quantity_point` class templates
|
||||
expressed in terms of different origins.
|
||||
|
||||
For this purpose, we can use:
|
||||
{style="width:80%;display: block;margin: 0 auto;"}
|
||||
|
||||
- a converting constructor:
|
||||
For this purpose, we can use either:
|
||||
|
||||
- A converting constructor:
|
||||
|
||||
```cpp
|
||||
constexpr quantity_point<isq::altitude[m], mean_sea_level, int> qp = first_climb_alt;
|
||||
static_assert(qp.quantity_ref_from(qp.point_origin) == 5406 * m);
|
||||
quantity_point<si::metre, C> qp2C = qp2;
|
||||
assert(qp2C.quantity_ref_from(qp2C.point_origin) == 130 * m);
|
||||
```
|
||||
|
||||
- a dedicated conversion interface:
|
||||
- A dedicated conversion interface:
|
||||
|
||||
```cpp
|
||||
constexpr quantity_point qp = first_climb_alt.point_for(mean_sea_level);
|
||||
static_assert(qp.quantity_ref_from(qp.point_origin) == 5406 * m);
|
||||
quantity_point qp2B = qp2.point_for(B);
|
||||
quantity_point qp2A = qp2.point_for(A);
|
||||
|
||||
assert(qp2B.quantity_ref_from(qp2B.point_origin) == 140 * m);
|
||||
assert(qp2A.quantity_ref_from(qp2A.point_origin) == 150 * m);
|
||||
```
|
||||
|
||||
It is important to understand that the point remains the same after such a translation
|
||||
(all of them compare equal):
|
||||
|
||||
```cpp
|
||||
assert(qp2 == qp2C);
|
||||
assert(qp2 == qp2B);
|
||||
assert(qp2 == qp2A);
|
||||
```
|
||||
|
||||
!!! note
|
||||
|
||||
It is only allowed to convert between various origins defined in terms of the same
|
||||
`absolute_point_origin`. Even if it is theoretically possible to express the same _Point_ as
|
||||
a _Vector_ from another `absolute_point_origin`, the library will not allow such a conversion.
|
||||
A custom user-defined conversion function will be needed to add this functionality.
|
||||
`absolute_point_origin`. Even if it is possible to express the same _point_ as a
|
||||
_displacement vector_ from another `absolute_point_origin`, the library will not provide such
|
||||
a conversion. A custom user-defined conversion function will be needed to add this functionality.
|
||||
|
||||
Said otherwise, in the **mp-units** library, there is no way to spell how two distinct
|
||||
`absolute_point_origin` types relate to each other.
|
||||
Said another way, in the library, there is no way to spell how two distinct `absolute_point_origin`
|
||||
types relate to each other.
|
||||
|
||||
|
||||
### Temperature support
|
||||
|
||||
Another important example of [relative point origins](#relative-point-origins) is the support
|
||||
of temperature quantity points. The **mp-units** library provides a few predefined point origins
|
||||
for this purpose:
|
||||
Support for temperature quantity points is probably one of the most common examples of relative
|
||||
point origins in action that we use in daily life.
|
||||
|
||||
The [@SI] definition in the library provides a few predefined point origins for this purpose:
|
||||
|
||||
```cpp
|
||||
namespace si {
|
||||
@ -459,7 +392,7 @@ The above is a great example of how point origins can be stacked on top of each
|
||||
!!! note
|
||||
|
||||
Notice that while stacking point origins, we can use not only different representation types
|
||||
but also different units for origins and a _Point_. In the above example, the relative
|
||||
but also different units for origins and a _point_. In the above example, the relative
|
||||
point origin for degree Celsius is defined in terms of `si::kelvin`, while the quantity point
|
||||
for it will use `si::degree_Celsius` as a unit.
|
||||
|
||||
@ -479,13 +412,14 @@ inline constexpr struct degree_Celsius :
|
||||
namespace usc {
|
||||
|
||||
inline constexpr struct degree_Fahrenheit :
|
||||
named_unit<{u8"°F", "`F"}, mag<ratio{5, 9}> * si::degree_Celsius, zeroth_degree_Fahrenheit> {} degree_Fahrenheit;
|
||||
named_unit<{u8"°F", "`F"}, mag<ratio{5, 9}> * si::degree_Celsius,
|
||||
zeroth_degree_Fahrenheit> {} degree_Fahrenheit;
|
||||
|
||||
}
|
||||
```
|
||||
|
||||
Now let's see how we can benefit from the above definitions. We have quite a few alternatives to
|
||||
choose from here. Depending on our needs or taste we can:
|
||||
Now, let's see how we can benefit from the above definitions. We have quite a few alternatives to
|
||||
choose from here. Depending on our needs or tastes, we can:
|
||||
|
||||
- be explicit about the unit and origin:
|
||||
|
||||
@ -511,13 +445,13 @@ choose from here. Depending on our needs or taste we can:
|
||||
quantity_point q9{20.5 * deg_C};
|
||||
```
|
||||
|
||||
*[CTAD]: Class Template Argument Deduction
|
||||
|
||||
In all of the above cases, we end up with the `quantity_point` of the same type and value.
|
||||
|
||||
To play a bit more with temperatures, we can implement a simple room AC temperature controller in
|
||||
the following way:
|
||||
|
||||
{style="width:80%;display: block;margin: 0 auto;"}
|
||||
|
||||
```cpp
|
||||
constexpr struct room_reference_temp : relative_point_origin<quantity_point{21 * deg_C}> {} room_reference_temp;
|
||||
using room_temp = quantity_point<isq::Celsius_temperature[deg_C], room_reference_temp>;
|
||||
@ -539,7 +473,7 @@ std::println("| {:<14} | {:^18} | {:^18} | {:^18} |",
|
||||
std::println("|{0:=^16}|{0:=^20}|{0:=^20}|{0:=^20}|", "");
|
||||
|
||||
auto print = [&](std::string_view label, auto v) {
|
||||
std::println("| {:<14} | {:^18} | {:^18} | {:^18{%N:.2f} %U} |", label,
|
||||
std::println("| {:<14} | {:^18} | {:^18} | {:^18:N[.2f]} |", label,
|
||||
v - room_reference_temp, (v - si::ice_point).in(deg_C), (v - si::absolute_zero).in(deg_C));
|
||||
};
|
||||
|
||||
@ -563,13 +497,20 @@ Room reference temperature: 21 °C (69.8 °F, 294.15 K)
|
||||
|
||||
### No text output for _Points_
|
||||
|
||||
The library does not provide a text output for quantity points, as printing just a number and a unit
|
||||
is not enough to adequately describe a quantity point. Often, an additional prefix or postfix is
|
||||
required.
|
||||
The library does not provide a text output for quantity points. The quantity stored inside
|
||||
is just an implementation detail of this type. It is a vector from a specific origin.
|
||||
Without the knowledge of the origin, the vector by itself is useless as we can't determine
|
||||
which point it describes.
|
||||
|
||||
For example, the text output of `42 m` may mean many things and can also be confused with an output
|
||||
of a regular quantity. On the other hand, printing `42 m AMSL` for altitudes above mean sea level is
|
||||
a much better solution, but the library does not have enough information to print it that way by itself.
|
||||
In the current library design, point origin does not provide any text in its definition.
|
||||
Even if we could add such information to the point's definition, we would not
|
||||
know how to output it in the text. There may be many ways to do it. For example, should we
|
||||
prepend or append the origin part to the quantity text?
|
||||
|
||||
For example, the text output of `42 m` for a quantity point may mean many things. It may be
|
||||
an offset from the mountain top, sea level, or maybe the center of Mars.
|
||||
Printing `42 m AMSL` for altitudes above mean sea level is a much better solution, but the
|
||||
library does not have enough information to print it that way by itself.
|
||||
|
||||
|
||||
## The affine space is about type-safety
|
||||
|
Reference in New Issue
Block a user