|
| 1 | +## group `dir` {#group__dir} |
| 2 | + |
| 3 | +Directions in $\mathbf{P}(\mathbb{R}^3_{3, 0, 1})$ are represented using points at infinity (homogeneous coordinate 0). Having a homogeneous coordinate of zero ensures that directions are translation-invariant. |
| 4 | + |
| 5 | +### Summary |
| 6 | + |
| 7 | + Members | Descriptions |
| 8 | +--------------------------------|--------------------------------------------- |
| 9 | +`public ` [`direction`](#group__dir_1gac86167cefc9b8118a8f894aaba99f9a5)`() = default` | |
| 10 | +`public ` [`direction`](#group__dir_1ga8fc796733d32a69230136b8376003fca)`(float x,float y,float z) noexcept` | Create a normalized direction. |
| 11 | +`public ` [`direction`](#group__dir_1ga7cc439bc60bbbe279bbda37f2e0d139b)`(__m128 p3) noexcept` | |
| 12 | +`public explicit ` [`direction`](#group__dir_1ga42ce139ace571176acabbce21d6c64b2)`(float * data) noexcept` | Data should point to four floats with memory layout `(0.f, x, y, z)` where the zero occupies the lowest address in memory. |
| 13 | +`public float ` [`x`](#group__dir_1ga721087c2056a33cd780c678ae0ec39dd)`() const noexcept` | |
| 14 | +`public float ` [`y`](#group__dir_1ga40bc7052a639d57afde7a860c1631638)`() const noexcept` | |
| 15 | +`public float ` [`z`](#group__dir_1ga1e16d3ed0ff945d0d1cbf1e6458d334b)`() const noexcept` | |
| 16 | +`public void ` [`normalize`](#group__dir_1ga143cd2cfeb94860ce1d47b9735064802)`() noexcept` | Normalize this direction by dividing all components by the magnitude |
| 17 | +`public direction &KLN_VEC_CALL ` [`operator+=`](#group__dir_1gabf098bdf982bbd9572d9fb09a5f76786)`(direction b) noexcept` | Direction addition. |
| 18 | +`public direction &KLN_VEC_CALL ` [`operator-=`](#group__dir_1ga4bd0650e5c363ec427a4021b678f0567)`(direction b) noexcept` | Direction subtraction. |
| 19 | +`public direction & ` [`operator*=`](#group__dir_1ga8f2c363e3b6ce34e18451b6c716be97a)`(float s) noexcept` | Direction uniform scale. |
| 20 | +`public direction & ` [`operator*=`](#group__dir_1ga6a07c40530461b7a4c94d2aff1371217)`(int s) noexcept` | Direction uniform scale. |
| 21 | +`public direction & ` [`operator/=`](#group__dir_1ga9cac6b5beba3d2e2b0ce1e9a5158c25f)`(float s) noexcept` | Direction uniform inverse scale. |
| 22 | +`public direction & ` [`operator/=`](#group__dir_1ga2717db218937fdb1b88aba24d3abd189)`(int s) noexcept` | Direction uniform inverse scale. |
| 23 | +`public direction KLN_VEC_CALL ` [`operator+`](#group__dir_1ga3aa93423517b128de3d64111201220ce)`(direction a,direction b) noexcept` | Direction addition. |
| 24 | +`public direction KLN_VEC_CALL ` [`operator-`](#group__dir_1gacdc4f7208ad657c450708efcc7fe27d0)`(direction a,direction b) noexcept` | Direction subtraction. |
| 25 | +`public direction KLN_VEC_CALL ` [`operator*`](#group__dir_1ga5d061f57e3a9f92620f6e90d5dbcb8cb)`(direction d,float s) noexcept` | Direction uniform scale. |
| 26 | +`public direction KLN_VEC_CALL ` [`operator*`](#group__dir_1ga0a2f15a137d3c9ef3e5b83e3eee71f9a)`(float s,direction d) noexcept` | Direction uniform scale. |
| 27 | +`public direction KLN_VEC_CALL ` [`operator*`](#group__dir_1ga9d4aadcb32609919e0a2614b1041fdf0)`(direction d,int s) noexcept` | Direction uniform scale. |
| 28 | +`public direction KLN_VEC_CALL ` [`operator*`](#group__dir_1ga0229ad2276f2d9a7f07baee7ee3d7582)`(int s,direction d) noexcept` | Direction uniform scale. |
| 29 | +`public direction KLN_VEC_CALL ` [`operator/`](#group__dir_1ga4473202567a1e1bf3a0929c33d723f52)`(direction d,float s) noexcept` | Direction uniform inverse scale. |
| 30 | +`public direction KLN_VEC_CALL ` [`operator/`](#group__dir_1ga2a8d9ef9111a21d1a55fe08e2c656317)`(direction d,int s) noexcept` | Direction uniform inverse scale. |
| 31 | +`public direction ` [`operator-`](#group__dir_1ga65b1fe0cfac3611b65b78924cb5a61ac)`(direction d) noexcept` | Unary minus. |
| 32 | + |
| 33 | +### Members |
| 34 | + |
| 35 | +#### [direction](#group__dir_1gac86167cefc9b8118a8f894aaba99f9a5)() = default {#group__dir_1gac86167cefc9b8118a8f894aaba99f9a5} |
| 36 | + |
| 37 | +#### [direction](#group__dir_1ga8fc796733d32a69230136b8376003fca)(float x,float y,float z) noexcept {#group__dir_1ga8fc796733d32a69230136b8376003fca} |
| 38 | + |
| 39 | +Create a normalized direction. |
| 40 | + |
| 41 | +#### [direction](#group__dir_1ga7cc439bc60bbbe279bbda37f2e0d139b)(__m128 p3) noexcept {#group__dir_1ga7cc439bc60bbbe279bbda37f2e0d139b} |
| 42 | + |
| 43 | +#### explicit [direction](#group__dir_1ga42ce139ace571176acabbce21d6c64b2)(float * data) noexcept {#group__dir_1ga42ce139ace571176acabbce21d6c64b2} |
| 44 | + |
| 45 | +Data should point to four floats with memory layout `(0.f, x, y, z)` where the zero occupies the lowest address in memory. |
| 46 | + |
| 47 | +#### float [x](#group__dir_1ga721087c2056a33cd780c678ae0ec39dd)() const noexcept {#group__dir_1ga721087c2056a33cd780c678ae0ec39dd} |
| 48 | + |
| 49 | +#### float [y](#group__dir_1ga40bc7052a639d57afde7a860c1631638)() const noexcept {#group__dir_1ga40bc7052a639d57afde7a860c1631638} |
| 50 | + |
| 51 | +#### float [z](#group__dir_1ga1e16d3ed0ff945d0d1cbf1e6458d334b)() const noexcept {#group__dir_1ga1e16d3ed0ff945d0d1cbf1e6458d334b} |
| 52 | + |
| 53 | +#### void [normalize](#group__dir_1ga143cd2cfeb94860ce1d47b9735064802)() noexcept {#group__dir_1ga143cd2cfeb94860ce1d47b9735064802} |
| 54 | + |
| 55 | +Normalize this direction by dividing all components by the magnitude |
| 56 | + |
| 57 | +!!! tip |
| 58 | + Direction normalization divides the coordinates by the quantity |
| 59 | + $\sqrt{x^2 + y^2 + z^2}$. This is done using the `rsqrtps` |
| 60 | + instruction with a maximum relative error of $1.5\times 2^{-12}$. |
| 61 | + |
| 62 | +#### direction &KLN_VEC_CALL [operator+=](#group__dir_1gabf098bdf982bbd9572d9fb09a5f76786)(direction b) noexcept {#group__dir_1gabf098bdf982bbd9572d9fb09a5f76786} |
| 63 | + |
| 64 | +Direction addition. |
| 65 | + |
| 66 | +#### direction &KLN_VEC_CALL [operator-=](#group__dir_1ga4bd0650e5c363ec427a4021b678f0567)(direction b) noexcept {#group__dir_1ga4bd0650e5c363ec427a4021b678f0567} |
| 67 | + |
| 68 | +Direction subtraction. |
| 69 | + |
| 70 | +#### direction & [operator*=](#group__dir_1ga8f2c363e3b6ce34e18451b6c716be97a)(float s) noexcept {#group__dir_1ga8f2c363e3b6ce34e18451b6c716be97a} |
| 71 | + |
| 72 | +Direction uniform scale. |
| 73 | + |
| 74 | +#### direction & [operator*=](#group__dir_1ga6a07c40530461b7a4c94d2aff1371217)(int s) noexcept {#group__dir_1ga6a07c40530461b7a4c94d2aff1371217} |
| 75 | + |
| 76 | +Direction uniform scale. |
| 77 | + |
| 78 | +#### direction & [operator/=](#group__dir_1ga9cac6b5beba3d2e2b0ce1e9a5158c25f)(float s) noexcept {#group__dir_1ga9cac6b5beba3d2e2b0ce1e9a5158c25f} |
| 79 | + |
| 80 | +Direction uniform inverse scale. |
| 81 | + |
| 82 | +#### direction & [operator/=](#group__dir_1ga2717db218937fdb1b88aba24d3abd189)(int s) noexcept {#group__dir_1ga2717db218937fdb1b88aba24d3abd189} |
| 83 | + |
| 84 | +Direction uniform inverse scale. |
| 85 | + |
| 86 | +#### direction KLN_VEC_CALL [operator+](#group__dir_1ga3aa93423517b128de3d64111201220ce)(direction a,direction b) noexcept {#group__dir_1ga3aa93423517b128de3d64111201220ce} |
| 87 | + |
| 88 | +Direction addition. |
| 89 | + |
| 90 | +#### direction KLN_VEC_CALL [operator-](#group__dir_1gacdc4f7208ad657c450708efcc7fe27d0)(direction a,direction b) noexcept {#group__dir_1gacdc4f7208ad657c450708efcc7fe27d0} |
| 91 | + |
| 92 | +Direction subtraction. |
| 93 | + |
| 94 | +#### direction KLN_VEC_CALL [operator*](#group__dir_1ga5d061f57e3a9f92620f6e90d5dbcb8cb)(direction d,float s) noexcept {#group__dir_1ga5d061f57e3a9f92620f6e90d5dbcb8cb} |
| 95 | + |
| 96 | +Direction uniform scale. |
| 97 | + |
| 98 | +#### direction KLN_VEC_CALL [operator*](#group__dir_1ga0a2f15a137d3c9ef3e5b83e3eee71f9a)(float s,direction d) noexcept {#group__dir_1ga0a2f15a137d3c9ef3e5b83e3eee71f9a} |
| 99 | + |
| 100 | +Direction uniform scale. |
| 101 | + |
| 102 | +#### direction KLN_VEC_CALL [operator*](#group__dir_1ga9d4aadcb32609919e0a2614b1041fdf0)(direction d,int s) noexcept {#group__dir_1ga9d4aadcb32609919e0a2614b1041fdf0} |
| 103 | + |
| 104 | +Direction uniform scale. |
| 105 | + |
| 106 | +#### direction KLN_VEC_CALL [operator*](#group__dir_1ga0229ad2276f2d9a7f07baee7ee3d7582)(int s,direction d) noexcept {#group__dir_1ga0229ad2276f2d9a7f07baee7ee3d7582} |
| 107 | + |
| 108 | +Direction uniform scale. |
| 109 | + |
| 110 | +#### direction KLN_VEC_CALL [operator/](#group__dir_1ga4473202567a1e1bf3a0929c33d723f52)(direction d,float s) noexcept {#group__dir_1ga4473202567a1e1bf3a0929c33d723f52} |
| 111 | + |
| 112 | +Direction uniform inverse scale. |
| 113 | + |
| 114 | +#### direction KLN_VEC_CALL [operator/](#group__dir_1ga2a8d9ef9111a21d1a55fe08e2c656317)(direction d,int s) noexcept {#group__dir_1ga2a8d9ef9111a21d1a55fe08e2c656317} |
| 115 | + |
| 116 | +Direction uniform inverse scale. |
| 117 | + |
| 118 | +#### direction [operator-](#group__dir_1ga65b1fe0cfac3611b65b78924cb5a61ac)(direction d) noexcept {#group__dir_1ga65b1fe0cfac3611b65b78924cb5a61ac} |
| 119 | + |
| 120 | +Unary minus. |
| 121 | + |
0 commit comments