mirror of
https://github.com/gumyr/build123d.git
synced 2025-12-06 02:30:55 -08:00
102 lines
3.9 KiB
ReStructuredText
102 lines
3.9 KiB
ReStructuredText
.. _algebra_definition:
|
|
|
|
Algebraic definition
|
|
========================
|
|
|
|
Objects and arithmetic
|
|
------------------------
|
|
|
|
**Set definitions:**
|
|
|
|
:math:`C^3` is the set of all ``Part`` objects ``p`` with ``p._dim = 3``
|
|
|
|
:math:`C^2` is the set of all ``Sketch`` objects ``s`` with ``s._dim = 2``
|
|
|
|
:math:`C^1` is the set of all ``Curve`` objects ``c`` with ``c._dim = 1``
|
|
|
|
**Neutral elements:**
|
|
|
|
:math:`c^3_0` is the empty ``Part`` object ``p0 = Part()`` with ``p0._dim = 3`` and ``p0.wrapped = None``
|
|
|
|
:math:`c^2_0` is the empty ``Sketch`` object ``s0 = Sketch()`` with ``s0._dim = 2`` and ``s0.wrapped = None``
|
|
|
|
:math:`c^1_0` is the empty ``Curve`` object ``c0 = Curve()`` with ``c0._dim = 1`` and ``c0.wrapped = None``
|
|
|
|
|
|
**Sets of predefined basic shapes:**
|
|
|
|
:math:`B^3 := \lbrace` ``Part``, ``Box``, ``Cylinder``, ``Cone``, ``Sphere``, ``Torus``, ``Wedge``, ``Hole``, ``CounterBoreHole``, ``CounterSinkHole`` :math:`\rbrace`
|
|
|
|
:math:`B^2 := \lbrace` ``Sketch``, ``Rectangle``, ``Circle``, ``Ellipse``, ``Rectangle``, ``Polygon``, ``RegularPolygon``, ``Text``, ``Trapezoid``, ``SlotArc``, ``SlotCenterPoint``, ``SlotCenterToCenter``, ``SlotOverall`` :math:`\rbrace`
|
|
|
|
:math:`B^1 := \lbrace` ``Curve``, ``Bezier``, ``FilletPolyline``, ``PolarLine``, ``Polyline``, ``Spline``, ``Helix``, ``CenterArc``, ``EllipticalCenterArc``, ``ParabolicCenterArc``, ``HyperbolicCenterArc``, ``RadiusArc``, ``SagittaArc``, ``TangentArc``, ``ThreePointArc``, ``JernArc`` :math:`\rbrace`
|
|
|
|
with :math:`B^3 \subset C^3, B^2 \subset C^2` and :math:`B^1 \subset C^1`
|
|
|
|
|
|
**Operations:**
|
|
|
|
:math:`+: C^n \times C^n \rightarrow C^n` with :math:`(a,b) \mapsto a + b`, :math:`\;` for :math:`n=1,2,3`
|
|
|
|
:math:`\; a + b :=` ``a.fuse(b)`` for each operation
|
|
|
|
:math:`-: C^n \rightarrow C^n` with :math:`a \mapsto -a`, :math:`\;` for :math:`n=1,2,3`
|
|
|
|
:math:`\; b + (-a) :=` ``b.cut(a)`` for each operation (implicit definition)
|
|
|
|
|
|
:math:`\&: C^n \times C^n \rightarrow C^n` with :math:`(a,b) \mapsto a \; \& \; b`, :math:`\;` for :math:`n=2,3`
|
|
|
|
:math:`\; a \; \& \; b :=` ``a.intersect(b)`` for each operation
|
|
|
|
* :math:`\&` is not defined for :math:`n=1` in build123d
|
|
* The following relationship holds: :math:`a \; \& \; b = (a + b) + -(a + (-b)) + -(b + (-a))`
|
|
|
|
|
|
**Abelian groups**
|
|
|
|
:math:`( C^n, \; c^n_0, \; +, \; -)` :math:`\;` are abelian groups for :math:`n=1,2,3`.
|
|
|
|
* The implementation ``a - b = a.cut(b)`` needs to be read as :math:`a + (-b)` since the group does not have a binary ``-`` operation. As such, :math:`a - (b - c) = a + -(b + -c)) \ne a - b + c`
|
|
* This definition also includes that neither ``-`` nor ``&`` are commutative.
|
|
|
|
|
|
Locations, planes and location arithmetic
|
|
---------------------------------------------
|
|
|
|
**Set definitions:**
|
|
|
|
:math:`L := \lbrace` ``Location((x, y, z), (a, b, c))`` :math:`: x,y,z \in R \land a,b,c \in R \rbrace\;`
|
|
|
|
with :math:`a,b,c` being angles in degrees.
|
|
|
|
:math:`P := \lbrace` ``Plane(o, x, z)`` :math:`: o,x,z ∈ R^3 \land \|x\| = \|z\| = 1\rbrace`
|
|
|
|
with ``o`` being the origin and ``x``, ``z`` the x- and z-direction of the plane.
|
|
|
|
Neutral element: :math:`\; l_0 \in L`: ``Location()``
|
|
|
|
**Operations:**
|
|
|
|
:math:`*: L \times L \rightarrow L` with :math:`(l_1,l_2) \mapsto l_1 * l_2`
|
|
|
|
:math:`\; l_1 * l_2 :=` ``l1 * l2`` (multiply two locations)
|
|
|
|
:math:`*: P \times L \rightarrow P` with :math:`(p,l) \mapsto p * l`
|
|
|
|
:math:`\; p * l :=` ``Plane(p.location * l)`` (move plane :math:`p \in P` to location :math:`l \in L`)
|
|
|
|
Inverse element: :math:`\; l^{-1} \in L`: ``l.inverse()``
|
|
|
|
|
|
**Placing objects onto planes**
|
|
|
|
:math:`*: P \times C^n \rightarrow C^n \;` with :math:`(p,c) \mapsto p * c`, :math:`\;` for :math:`n=1,2,3`
|
|
|
|
Locate an object :math:`c \in C^n` onto plane :math:`p \in P`, i.e. ``c.moved(p.location)``
|
|
|
|
**Placing objects at locations**
|
|
|
|
:math:`*: L \times C^n \rightarrow C^n \;` with :math:`(l,c) \mapsto l * c`, :math:`\;` for :math:`n=1,2,3`
|
|
|
|
Locate an object :math:`c \in C^n` at location :math:`l \in L`, i.e. ``c.moved(l)``
|