Skip to content
This repository was archived by the owner on Aug 2, 2024. It is now read-only.

Commit 8e3b3e3

Browse files
committed
Promote branch to top-level scope and provide translation exp/log
1 parent 1d96625 commit 8e3b3e3

18 files changed

+269
-101
lines changed

docs/api/kln_branch.md

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
## struct `kln::branch` {#structkln_1_1branch}
2+
3+
```
4+
struct kln::branch
5+
: public kln::entity< 0b10 >
6+
```
7+
8+
The `branch` both a line through the origin and also the principal branch of the logarithm of a rotor.
9+
10+
The rotor branch will be most commonly constructed by taking the logarithm of a normalized rotor. The branch may then be linearily scaled to adjust the "strength" of the rotor, and subsequently re-exponentiated to create the adjusted rotor.
11+
12+
!!! example
13+
Suppose we have a rotor $r$ and we wish to produce a rotor
14+
$\sqrt[4]{r}$ which performs a quarter of the rotation produced by
15+
$r$. We can construct it like so:
16+
17+
```c++
18+
kln::branch b = r.log();
19+
kln::rotor r_4 = (0.25f * b).exp();
20+
```
21+
22+
23+
!!! note
24+
The branch of a rotor is technically a `line`, but because there are
25+
no translational components, the branch is given its own type for
26+
efficiency.
27+
28+
### Summary
29+
30+
Members | Descriptions
31+
--------------------------------|---------------------------------------------
32+
`public ` [`branch`](#structkln_1_1branch_1ac0b6196328f798a024d116b0052dc933)`() = default` |
33+
`public ` [`branch`](#structkln_1_1branch_1a85e647f4c92a2dd6896c5afd849d00a5)`(float a,float b,float c) noexcept` | Construct the branch as the following multivector:
34+
`public ` [`branch`](#structkln_1_1branch_1a870f4e065425fe5f13bbed7bab1813f5)`(` [`entity`](../../api/kln_entity#structkln_1_1entity)` const & other) noexcept` |
35+
`public ` [`branch`](#structkln_1_1branch_1ab521b26d8ec73aff3695456573964d77)`(` [`entity`](../../api/kln_entity#structkln_1_1entity)` && other) noexcept` |
36+
`public ` [`entity`](../../api/kln_entity#structkln_1_1entity)` ` [`exp`](#structkln_1_1branch_1a341d43c4152ba03b8001134962900799)`() const noexcept` | Exponentiate this branch to produce a rotor. To avoid a circular dependency, an `entity<0b10>` is returned but this can be implicitly cast to a rotor.
37+
38+
### Members
39+
40+
#### [branch](#structkln_1_1branch_1ac0b6196328f798a024d116b0052dc933)() = default {#structkln_1_1branch_1ac0b6196328f798a024d116b0052dc933}
41+
42+
#### [branch](#structkln_1_1branch_1a85e647f4c92a2dd6896c5afd849d00a5)(float a,float b,float c) noexcept {#structkln_1_1branch_1a85e647f4c92a2dd6896c5afd849d00a5}
43+
44+
Construct the branch as the following multivector:
45+
46+
$$a \mathbf{e}_{23} + b\mathbf{e}_{31} + c\mathbf{e}_{23}$$
47+
48+
To convince yourself this is a line through the origin, remember that such a line can be generated using the geometric product of two planes through the origin.
49+
50+
#### [branch](#structkln_1_1branch_1a870f4e065425fe5f13bbed7bab1813f5)( [entity](../../api/kln_entity#structkln_1_1entity) const & other) noexcept {#structkln_1_1branch_1a870f4e065425fe5f13bbed7bab1813f5}
51+
52+
#### [branch](#structkln_1_1branch_1ab521b26d8ec73aff3695456573964d77)( [entity](../../api/kln_entity#structkln_1_1entity) && other) noexcept {#structkln_1_1branch_1ab521b26d8ec73aff3695456573964d77}
53+
54+
#### [entity](../../api/kln_entity#structkln_1_1entity) [exp](#structkln_1_1branch_1a341d43c4152ba03b8001134962900799)() const noexcept {#structkln_1_1branch_1a341d43c4152ba03b8001134962900799}
55+
56+
Exponentiate this branch to produce a rotor. To avoid a circular dependency, an `entity<0b10>` is returned but this can be implicitly cast to a rotor.
57+

docs/api/kln_ideal_line.md

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,37 @@ struct kln::ideal_line
55
: public kln::entity< 0b100 >
66
```
77

8+
An ideal line represents a line at infinity and corresponds to the multivector:
9+
10+
$$a\mathbf{e}_{01} + b\mathbf{e}_{02} + c\mathbf{e}_{03}$$
11+
812
### Summary
913

1014
Members | Descriptions
1115
--------------------------------|---------------------------------------------
12-
`public ` [`ideal_line`](#structkln_1_1ideal__line_1ad0593680107a6a587e50ba95aa403d10)`()` |
16+
`public ` [`ideal_line`](#structkln_1_1ideal__line_1a2f38794571e40000e2a3d68e0863c48f)`() = default` |
1317
`public ` [`ideal_line`](#structkln_1_1ideal__line_1a23cf4cb2763929db4f63dabadc1b9b32)`(float a,float b,float c) noexcept` |
18+
`public ` [`ideal_line`](#structkln_1_1ideal__line_1ac186bdf44379f7eb38c058205ff7fd2c)`(` [`entity`](../../api/kln_entity#structkln_1_1entity)` const & other) noexcept` |
19+
`public ` [`ideal_line`](#structkln_1_1ideal__line_1ad14e9b6cc784c56778784b19f97c195b)`(` [`entity`](../../api/kln_entity#structkln_1_1entity)` && other) noexcept` |
20+
`public ` [`entity`](../../api/kln_entity#structkln_1_1entity)`< 0b110 > ` [`exp`](#structkln_1_1ideal__line_1a5d355ce61318a118b3e92c67656e6b80)`() const noexcept` | Exponentiate this ideal line to produce a translation. An `entity<0b100>` is returned instead to avoid a cyclic dependency, but this can be implicitly casted to a `translator` .
1421

1522
### Members
1623

17-
#### [ideal_line](#structkln_1_1ideal__line_1ad0593680107a6a587e50ba95aa403d10)() {#structkln_1_1ideal__line_1ad0593680107a6a587e50ba95aa403d10}
24+
#### [ideal_line](#structkln_1_1ideal__line_1a2f38794571e40000e2a3d68e0863c48f)() = default {#structkln_1_1ideal__line_1a2f38794571e40000e2a3d68e0863c48f}
1825

1926
#### [ideal_line](#structkln_1_1ideal__line_1a23cf4cb2763929db4f63dabadc1b9b32)(float a,float b,float c) noexcept {#structkln_1_1ideal__line_1a23cf4cb2763929db4f63dabadc1b9b32}
2027

28+
#### [ideal_line](#structkln_1_1ideal__line_1ac186bdf44379f7eb38c058205ff7fd2c)( [entity](../../api/kln_entity#structkln_1_1entity) const & other) noexcept {#structkln_1_1ideal__line_1ac186bdf44379f7eb38c058205ff7fd2c}
29+
30+
#### [ideal_line](#structkln_1_1ideal__line_1ad14e9b6cc784c56778784b19f97c195b)( [entity](../../api/kln_entity#structkln_1_1entity) && other) noexcept {#structkln_1_1ideal__line_1ad14e9b6cc784c56778784b19f97c195b}
31+
32+
#### [entity](../../api/kln_entity#structkln_1_1entity)< 0b110 > [exp](#structkln_1_1ideal__line_1a5d355ce61318a118b3e92c67656e6b80)() const noexcept {#structkln_1_1ideal__line_1a5d355ce61318a118b3e92c67656e6b80}
33+
34+
Exponentiate this ideal line to produce a translation. An `entity<0b100>` is returned instead to avoid a cyclic dependency, but this can be implicitly casted to a `translator` .
35+
36+
The exponential of an ideal line $a \mathbf{e}_{01} + b\mathbf{e}_{02} + c\mathbf{e}_{03}$ is given as:
37+
38+
$$\exp{\left[a\ee_{01} + b\ee_{02} + c\ee_{03}\right]} = 1 +\ a\ee_{01} + b\ee_{02} + c\ee_{03}$$
39+
40+
If this line is aliasing a portion of an existing translator, the original translator can be used directly.
41+

docs/api/kln_line.md

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,19 @@ struct kln::line
55
: public kln::entity< 0b110 >
66
```
77

8+
A general line in $\PGA$ is given as a 6-coordinate bivector with a direct correspondence to Plücker coordinates. All lines can be exponentiated using the `exp` method to generate a motor.
9+
810
### Summary
911

1012
Members | Descriptions
1113
--------------------------------|---------------------------------------------
1214
`public ` [`line`](#structkln_1_1line_1a51e1c8ea3127970e521a48bf6139224a)`()` |
1315
`public ` [`line`](#structkln_1_1line_1a3a7b1cdde6811a23a30cd5d4082ee5d7)`(float a,float b,float c,float d,float e,float f) noexcept` | A line is specifed by 6 coordinates which correspond to the line's [Plücker coordinates](https://en.wikipedia.org/wiki/Pl%C3%BCcker_coordinates). The coordinates specified in this way correspond to the following multivector:
14-
`public ` [`line`](#structkln_1_1line_1af9e56edfe5fe537ef21dd76c1927c5fe)`(` [`entity`](../../api/kln_entity#structkln_1_1entity)`< 0b110 > const & e)` |
15-
`public ` [`line`](#structkln_1_1line_1a020bc12c8cf7e73c7f440a3ce4c7edb0)`(` [`entity`](../../api/kln_entity#structkln_1_1entity)`< 0b100 > const & e)` |
16-
`public ` [`line`](#structkln_1_1line_1a36115e3464ff63cb869dfc09d876d1be)`(` [`entity`](../../api/kln_entity#structkln_1_1entity)`< 0b10 > const & e)` |
17-
`public float ` [`squared_norm`](#structkln_1_1line_1af9fdfa8ac229420aa1649100ee573bf8)`()` | If a line is constructed as the regressive product (join) of two points, the squared norm provided here is the squared distance between the two points (provided the points are normalized). Returns $d^2 + e^2 + f^2$.
18-
`public float ` [`norm`](#structkln_1_1line_1acbce68119eab96bcc0ec3918dfa4691c)`()` | Returns the square root of the quantity produced by `squared_norm` .
16+
`public ` [`line`](#structkln_1_1line_1ab34c8ce4640a7f82ada73265dc979a2c)`(` [`entity`](../../api/kln_entity#structkln_1_1entity)`< 0b110 > const & e) noexcept` |
17+
`public ` [`line`](#structkln_1_1line_1adea8b05010cbb6b785795ba2f4f91072)`(` [`entity`](../../api/kln_entity#structkln_1_1entity)`< 0b100 > const & e) noexcept` |
18+
`public ` [`line`](#structkln_1_1line_1a0b787e3e257d022d94fd54c0db2f15ef)`(` [`entity`](../../api/kln_entity#structkln_1_1entity)`< 0b10 > const & e) noexcept` |
19+
`public float ` [`squared_norm`](#structkln_1_1line_1a941c27dc8594f947ecf718160ebb084b)`() noexcept` | If a line is constructed as the regressive product (join) of two points, the squared norm provided here is the squared distance between the two points (provided the points are normalized). Returns $d^2 + e^2 + f^2$.
20+
`public float ` [`norm`](#structkln_1_1line_1ad388b8d134c0c22b1f82026277e39c22)`() noexcept` | Returns the square root of the quantity produced by `squared_norm` .
1921
`public ` [`entity`](../../api/kln_entity#structkln_1_1entity)`< 0b110 > ` [`exp`](#structkln_1_1line_1ab81feed09b9c02934914071206bf54d1)`() const noexcept` | Line exponentiation
2022

2123
### Members
@@ -28,17 +30,17 @@ A line is specifed by 6 coordinates which correspond to the line's [Plücker coo
2830

2931
$$a\mathbf{e}_{01} + b\mathbf{e}_{02} + c\mathbf{e}_{03} +\ d\mathbf{e}_{23} + e\mathbf{e}_{31} + f\mathbf{e}_{12}$$
3032

31-
#### [line](#structkln_1_1line_1af9e56edfe5fe537ef21dd76c1927c5fe)( [entity](../../api/kln_entity#structkln_1_1entity)< 0b110 > const & e) {#structkln_1_1line_1af9e56edfe5fe537ef21dd76c1927c5fe}
33+
#### [line](#structkln_1_1line_1ab34c8ce4640a7f82ada73265dc979a2c)( [entity](../../api/kln_entity#structkln_1_1entity)< 0b110 > const & e) noexcept {#structkln_1_1line_1ab34c8ce4640a7f82ada73265dc979a2c}
3234

33-
#### [line](#structkln_1_1line_1a020bc12c8cf7e73c7f440a3ce4c7edb0)( [entity](../../api/kln_entity#structkln_1_1entity)< 0b100 > const & e) {#structkln_1_1line_1a020bc12c8cf7e73c7f440a3ce4c7edb0}
35+
#### [line](#structkln_1_1line_1adea8b05010cbb6b785795ba2f4f91072)( [entity](../../api/kln_entity#structkln_1_1entity)< 0b100 > const & e) noexcept {#structkln_1_1line_1adea8b05010cbb6b785795ba2f4f91072}
3436

35-
#### [line](#structkln_1_1line_1a36115e3464ff63cb869dfc09d876d1be)( [entity](../../api/kln_entity#structkln_1_1entity)< 0b10 > const & e) {#structkln_1_1line_1a36115e3464ff63cb869dfc09d876d1be}
37+
#### [line](#structkln_1_1line_1a0b787e3e257d022d94fd54c0db2f15ef)( [entity](../../api/kln_entity#structkln_1_1entity)< 0b10 > const & e) noexcept {#structkln_1_1line_1a0b787e3e257d022d94fd54c0db2f15ef}
3638

37-
#### float [squared_norm](#structkln_1_1line_1af9fdfa8ac229420aa1649100ee573bf8)() {#structkln_1_1line_1af9fdfa8ac229420aa1649100ee573bf8}
39+
#### float [squared_norm](#structkln_1_1line_1a941c27dc8594f947ecf718160ebb084b)() noexcept {#structkln_1_1line_1a941c27dc8594f947ecf718160ebb084b}
3840

3941
If a line is constructed as the regressive product (join) of two points, the squared norm provided here is the squared distance between the two points (provided the points are normalized). Returns $d^2 + e^2 + f^2$.
4042

41-
#### float [norm](#structkln_1_1line_1acbce68119eab96bcc0ec3918dfa4691c)() {#structkln_1_1line_1acbce68119eab96bcc0ec3918dfa4691c}
43+
#### float [norm](#structkln_1_1line_1ad388b8d134c0c22b1f82026277e39c22)() noexcept {#structkln_1_1line_1ad388b8d134c0c22b1f82026277e39c22}
4244

4345
Returns the square root of the quantity produced by `squared_norm` .
4446

docs/api/kln_rotor.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ The same `*` operator can be used to compose the rotor's action with other tran
5353
`public void ` [`load_normalized`](#structkln_1_1rotor_1ab063d72ca484de581a78ebd7b49e41da)`(float * data) noexcept` | Fast load operation for packed data that is already normalized. The argument `data` should point to a set of 4 float values with layout `(a, b, c, d)` corresponding to the multivector $a + b\mathbf{e}_{23} + c\mathbf{e}_{31} + d\mathbf{e}_{12}$.
5454
`public void ` [`normalize`](#structkln_1_1rotor_1a4c9b04d0a4119e7d6b56b9e1478db5d4)`() noexcept` | Normalize a rotor such that $\mathbf{r}\widetilde{\mathbf{r}} = 1$.
5555
`public ` [`mat4x4`](../../api/kln_mat4x4#structkln_1_1mat4x4)` ` [`as_matrix`](#structkln_1_1rotor_1a0f13d2649e679220fc79ee7bc0bbea11)`() const noexcept` | Converts the rotor to a 4x4 column-major matrix.
56-
`public ` [`branch`](../../api/kln_rotor::branch#structkln_1_1rotor_1_1branch)` ` [`log`](#structkln_1_1rotor_1abdb39aa5e358dd4ceef256b48ef91e81)`() const noexcept` | Returns the principal branch of this rotor's logarithm. Invoking `exp` on the returned result maps back to this rotor.
56+
`public ` [`branch`](../../api/kln_branch#structkln_1_1branch)` ` [`log`](#structkln_1_1rotor_1abdb39aa5e358dd4ceef256b48ef91e81)`() const noexcept` | Returns the principal branch of this rotor's logarithm. Invoking `exp` on the returned result maps back to this rotor.
5757
`public ` [`plane`](../../api/kln_plane#structkln_1_1plane)` KLN_VEC_CALL ` [`operator()`](#structkln_1_1rotor_1ae9e58f02352f5241dd94d22353a5e9ec)`(` [`plane`](../../api/kln_plane#structkln_1_1plane)` const & p) const noexcept` | Conjugates a plane $p$ with this rotor and returns the result $rp\widetilde{r}$.
5858
`public void KLN_VEC_CALL ` [`operator()`](#structkln_1_1rotor_1a491f6f2264c6ecf180664e75fc4a159b)`(` [`plane`](../../api/kln_plane#structkln_1_1plane)` * in,` [`plane`](../../api/kln_plane#structkln_1_1plane)` * out,size_t count) const noexcept` | Conjugates an array of planes with this rotor in the input array and stores the result in the output array. Aliasing is only permitted when `in == out` (in place motor application).
5959
`public ` [`line`](../../api/kln_line#structkln_1_1line)` KLN_VEC_CALL ` [`operator()`](#structkln_1_1rotor_1ac4d044ea5b98ba540fc5da8d75f43ccc)`(` [`line`](../../api/kln_line#structkln_1_1line)` const & l) const noexcept` | Conjugates a line $\ell$ with this rotor and returns the result $r\ell \widetilde{r}$.
@@ -91,7 +91,7 @@ Normalize a rotor such that $\mathbf{r}\widetilde{\mathbf{r}} = 1$.
9191

9292
Converts the rotor to a 4x4 column-major matrix.
9393

94-
#### [branch](../../api/kln_rotor::branch#structkln_1_1rotor_1_1branch) [log](#structkln_1_1rotor_1abdb39aa5e358dd4ceef256b48ef91e81)() const noexcept {#structkln_1_1rotor_1abdb39aa5e358dd4ceef256b48ef91e81}
94+
#### [branch](../../api/kln_branch#structkln_1_1branch) [log](#structkln_1_1rotor_1abdb39aa5e358dd4ceef256b48ef91e81)() const noexcept {#structkln_1_1rotor_1abdb39aa5e358dd4ceef256b48ef91e81}
9595

9696
Returns the principal branch of this rotor's logarithm. Invoking `exp` on the returned result maps back to this rotor.
9797

docs/api/kln_translator.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,8 @@ The same `*` operator can be used to compose the translator's action with other
4545
`public ` [`translator`](#structkln_1_1translator_1a79f802a9ad0d2ce8121e53e1041300d2)`(float delta,float x,float y,float z)` |
4646
`public ` [`translator`](#structkln_1_1translator_1abad7c4f575baf7c82b8e6dd4917a12cb)`(` [`entity`](../../api/kln_entity#structkln_1_1entity)`< 0b110 > const & other)` |
4747
`public void ` [`load_normalized`](#structkln_1_1translator_1af41d16e554ed66e640671ca9065971b7)`(float * data) noexcept` | Fast load operation for packed data that is already normalized. The argument `data` should point to a set of 4 float values with layout `(0.f, a, b, c)` corresponding to the multivector $a\mathbf{e}_{01} + b\mathbf{e}_{02} + c\mathbf{e}_{03}$.
48+
`public ` [`ideal_line`](../../api/kln_ideal_line#structkln_1_1ideal__line)` ` [`log`](#structkln_1_1translator_1a29bc3e5e184b1184eb704faca120120a)`() const noexcept` | Compute the logarithm of the translator, producing an ideal line axis. In practice, the logarithm of a translator is simply the ideal partition (without the scalar $1$).
49+
`public ` [`ideal_line`](../../api/kln_ideal_line#structkln_1_1ideal__line)` & ` [`log`](#structkln_1_1translator_1a4f8dd15b0b5ce83b03b24e027ccbe1b5)`() noexcept` | Retrieve the ideal line axis of this translator which can be directly manipulated to augment or diminish the weight of this translator.
4850
`public ` [`plane`](../../api/kln_plane#structkln_1_1plane)` KLN_VEC_CALL ` [`operator()`](#structkln_1_1translator_1a0e313cc6d057b518bbc8b04ad6baec59)`(` [`plane`](../../api/kln_plane#structkln_1_1plane)` const & p) const noexcept` | Conjugates a plane $p$ with this translator and returns the result $tp\widetilde{t}$.
4951
`public ` [`line`](../../api/kln_line#structkln_1_1line)` KLN_VEC_CALL ` [`operator()`](#structkln_1_1translator_1aa0a9ea85643aa7661d52dd477abd76e7)`(` [`line`](../../api/kln_line#structkln_1_1line)` const & l) const noexcept` | Conjugates a line $\ell$ with this translator and returns the result $t\ell\widetilde{t}$.
5052
`public ` [`point`](../../api/kln_point#structkln_1_1point)` KLN_VEC_CALL ` [`operator()`](#structkln_1_1translator_1a6d5ee3578eb48f36bf3e21d321899de5)`(` [`point`](../../api/kln_point#structkln_1_1point)` const & p) const noexcept` | Conjugates a point $p$ with this translator and returns the result $tp\widetilde{t}$.
@@ -66,6 +68,14 @@ Fast load operation for packed data that is already normalized. The argument `da
6668
the quantity $-\sqrt{a^2 + b^2 + c^2}$ must be half the desired
6769
displacement.
6870

71+
#### [ideal_line](../../api/kln_ideal_line#structkln_1_1ideal__line) [log](#structkln_1_1translator_1a29bc3e5e184b1184eb704faca120120a)() const noexcept {#structkln_1_1translator_1a29bc3e5e184b1184eb704faca120120a}
72+
73+
Compute the logarithm of the translator, producing an ideal line axis. In practice, the logarithm of a translator is simply the ideal partition (without the scalar $1$).
74+
75+
#### [ideal_line](../../api/kln_ideal_line#structkln_1_1ideal__line) & [log](#structkln_1_1translator_1a4f8dd15b0b5ce83b03b24e027ccbe1b5)() noexcept {#structkln_1_1translator_1a4f8dd15b0b5ce83b03b24e027ccbe1b5}
76+
77+
Retrieve the ideal line axis of this translator which can be directly manipulated to augment or diminish the weight of this translator.
78+
6979
#### [plane](../../api/kln_plane#structkln_1_1plane) KLN_VEC_CALL [operator()](#structkln_1_1translator_1a0e313cc6d057b518bbc8b04ad6baec59)( [plane](../../api/kln_plane#structkln_1_1plane) const & p) const noexcept {#structkln_1_1translator_1a0e313cc6d057b518bbc8b04ad6baec59}
7080

7181
Conjugates a plane $p$ with this translator and returns the result $tp\widetilde{t}$.

docs/css/extra.css

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
.md-footer-copyright {
2+
padding: 0.9rem;
3+
}

docs/discord.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,5 @@
1+
The Klein discord is very new but anyone is welcome to drop in and offer feedback, ask for help, or
2+
discuss topics ranging from graphics programming, math (geometric algebra or otherwise), physics,
3+
and more.
4+
15
<iframe src="https://discordapp.com/widget?id=680201841362862080&theme=dark" width="100%" height="700" allowtransparency="true" frameborder="0"></iframe>

docs/index.md

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,10 @@ art kinematic and math libraries built with traditional vector and quaternion fo
5959
- Conjugation (aka "sandwich") operators (defined via the call operator on planes, rotors, translators, and motors)
6060
- Inner product (used for metric measurements and to project entities)
6161
- Standard arithmetic operations
62-
- Line exponentiation to generate motors
6362
- Motor logarithm to compute the motor axis
63+
- Line exponentiation to generate motors
64+
- Rotor logarithm to compute the rotor axis (also referred to as a `branch`)
65+
- Branch exponentiation to generate rotors
6466

65-
The latter two operators can be used to efficiently implement what is traditionally
66-
known as the spherical lerp.
67+
The "spherical interpolation" operator slerp can be implemented easily in terms of the rotor or
68+
motor logarithm, depending on what is needed.

mkdocs.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ nav:
3232
- 'Line': 'api/kln_line.md'
3333
- 'Point': 'api/kln_point.md'
3434
- 'Rotor': 'api/kln_rotor.md'
35+
- 'Branch': 'api/kln_branch.md'
3536
- 'Translator': 'api/kln_translator.md'
3637
- 'Motor': 'api/kln_motor.md'
3738
- 'Ideal Line': 'api/kln_ideal_line.md'
@@ -47,7 +48,6 @@ nav:
4748
- 'Klein Shell': 'shell.md'
4849
- 'Performance': 'perf.md'
4950
- 'Discord': 'discord.md'
50-
- 'Roadmap': 'roadmap.md'
5151
- 'References': 'references.md'
5252

5353
extra_css:

0 commit comments

Comments
 (0)