Commit Graph

122 Commits

Author SHA1 Message Date
Christopher Durham
49906a35be
Fix glm::is_null epsilon test (#1350)
The existing implementation compares each component to zero with
an epsilon; effectively `glm::all(glm::is_comp_null(v, epsilon))`.
This probably isn't the desired semantics when calling `glm::is_null`;
rather, we want to determine if the magnitude of the vector is within
`epsilon` units of zero. It's the question of circle versus square.

This behavior matches that of OpenGL Mathematics.
2024-06-23 11:09:52 +02:00
Sébastien Crozet
292abfbaa0
chore: update to simba 0.9 (#1415) 2024-06-22 19:06:20 +02:00
tpdickso
9948bf7e23
Merge pull request #1349 from CAD97/patch-3
Fix `glm::is_normalized` epsilon test
2024-03-20 23:01:15 -04:00
Yotam Ofek
cf44429837 Fix redundant import errors in nalgebra-glm
More fallout from https://github.com/rust-lang/rust/issues/121708
Should make CI green again
2024-03-20 13:12:01 +00:00
Christopher Durham
f578181351 Fix glm::is_normalized epsilon
The existing comparison bound of $\epsilon^2$ is improperly scaled for
testing an epsilon of the squared vector magnitude. Let $\epsilon$ be
our specified epsilon and $\delta$ be the permissible delta of the
squared magnitude. Thus, for a nearly-normalized vector, we have

$$\begin{align}
\sqrt{1 + \delta} &=  1 + \epsilon        \\
          \delta  &= (1 + \epsilon)^2 - 1 \\
          \delta  &=  \epsilon^2 + 2\epsilon
\text{ .}\end{align}$$

Since we only care about small epsilon, we can assume
that $\epsilon^2$ is small and just use $\delta = 2\epsilon$. And in
fact, [this is the bound used by GLM][GLM#isNormalized] (MIT license)
... except they're using `length` and not `length2` for some reason.

[GLM#isNormalized]: b06b775c1c/glm/gtx/vector_query.inl (L102)

If we stick an epsilon of `1.0e-6` into the current implementation,
this gives us a computed delta of `1.0e-12`: smaller than the `f32`
machine epsilon, and thus no different than direct float comparison
without epsilon. This also gives an effetive epsilon of `5.0e-13`;
*much* less than the intended `1.0e-6` of intended permitted slack!
By doing a bit more algebra, we can find the effective epsilon is
$\sqrt{\texttt{epsilon}^2 + 1} - 1$. This patch makes the effective
epsilon $\sqrt{2\times\texttt{epsilon} + 1} - 1$ which still isn't
*perfect*, but it's effectively linear in the domain we care about,
only really making a practical difference above an epsilon of 10%.

TL;DR: the existing `is_normalized` considers a vector normalized if
the squared magnitude is within `epsilon*epsilon` of `1`. This is wrong
and it should be testing if it's within `2*epsilon`. This PR fixes it.

For absence of doubt, a comparison epsilon of $\texttt{epsilon}^2$ is
correct when comparing squared magnitude against zero, such as when
testing if a displacement vector is nearly zero.
2024-01-13 00:02:26 -05:00
Ababwa
0b89950fca Correct less than or equal symbol in doc in vector_relational.rs
Less than or equal <=
2024-01-11 23:24:13 -08:00
Sébastien Crozet
c6ff3eeb7e
Merge pull request #1265 from waywardmonkeys/fix-html-links
docs: Use intradoc links rather than HTML.
2023-09-30 18:24:28 +02:00
Sébastien Crozet
2043824058
Merge pull request #1281 from waywardmonkeys/clippy-single_component_path_imports
nalgebra-glm: Fix clippy single_component_path_imports.
2023-09-30 18:16:16 +02:00
Sébastien Crozet
1987ca29bb
Merge pull request #1282 from waywardmonkeys/clippy-needless-borrow
clippy: Fix needless_borrow warnings.
2023-09-30 18:15:42 +02:00
Bruce Mitchener
1b1d950f74 nalgebra-glm, clippy: Suppress too_many_arguments.
Matrix constructors need more args.
2023-08-19 01:00:01 +07:00
Bruce Mitchener
1d9a4bf6ec clippy: Fix needless_borrow warnings. 2023-08-19 00:36:24 +07:00
Bruce Mitchener
8609167053 nalgebra-glm: Fix clippy single_component_path_imports.
These imports are redundant and not needed.
2023-08-19 00:19:42 +07:00
Bruce Mitchener
136a565579 docs: Use intradoc links rather than HTML.
This fixes almost all HTML links to be intradoc links that Rust
can verify during `cargo doc`. This will help prevent future
broken links.
2023-08-06 22:34:40 +07:00
Chris Ohk
fd97a82926 fix: Correct minor typos 2023-02-01 15:48:06 +09:00
Andreas Longva
f007772f4b Update slice->view in nalgebra-glm 2022-11-14 15:18:28 +01:00
Arthur Kaukal Valladares
c72b30d628 Fix typo in nalgebra_glm::radians doc comment 2021-11-26 18:51:01 -08:00
Sébastien Crozet
8c2bdf51f2 Run cargo fmt 2021-11-21 21:21:22 +01:00
Sébastien Crozet
a35918b613 nalgebra-glm: fix no-std build 2021-11-21 21:11:55 +01:00
Sébastien Crozet
857bd75c33 Add doc-test for nalgebra_glm::mat3 2021-09-25 12:09:32 +02:00
InnocentusLime
ebfab8dcfd Attempt to fix #984 2021-09-10 18:27:19 +03:00
Sébastien Crozet
6165ac8dbf Fix nalgebra-glm tests. 2021-08-08 13:05:13 +02:00
Sébastien Crozet
85074398d0 Fix nalgebra-glm 2021-08-08 12:59:40 +02:00
Sébastien Crozet
dd6c40016e Remove the Copy requirement from SimdRealField. 2021-08-04 17:34:25 +02:00
Sébastien Crozet
dcd92827a9
Merge pull request #956 from remilauzier/dev
Fix some warnings
2021-08-01 10:28:45 +02:00
Zacchary Dempsey-Plante
6eb642625b
Fix a typo in the doc comment for Mat2x3
Currently, the doc comment for `Mat2x3` incorrectly describes it as a 2x2 matrix. Obviously this is a very minor issue, but I figured it was worth fixing.
2021-07-30 16:18:31 +00:00
Rémi Lauzier
c35f792b4f
Fix some warnings 2021-07-27 19:24:55 -04:00
Violeta Hernández
6e96c28ad9 Trivial doc comment improvements 2021-07-06 21:05:25 -05:00
Crozet Sébastien
24d546d3b6 Rename generic parameter N -> T 2021-04-11 13:57:54 +02:00
Crozet Sébastien
e852df6124 Add sections for most Matrix methods. 2020-11-15 16:57:49 +01:00
Philippe Renon
fb15658cc9 fix typo: apsect should be aspect 2020-10-11 11:42:22 +02:00
sebcrozet
0be9a07f8b Use the #[rustfmt::skip] attribute instead of rustfmt_skip. 2020-06-07 09:30:21 +02:00
sebcrozet
bbb3be512e Run cargo fmt. 2020-04-05 18:49:48 +02:00
sebcrozet
426b289871 nalgebra-glm: switch to simba instead of alga. 2020-04-05 17:13:34 +02:00
sebcrozet
f8cd26cfa9 Replace alga by simba. 2020-03-21 12:16:46 +01:00
Avi Weinstock
774f4da3e2 Add Clone to Scalar, providing a default implementation of inlined_clone. Change Scalar + Clone bounds to just Scalar. 2020-03-02 12:45:37 +01:00
Avi Weinstock
52aac8b975 Add inlined_clone to Scalar, and relax bounds from Scalar + Copy to Scalar + Clone nearly everywhere.
The various nalgebra-lapack FooScalars are still Copy because they make use of uninitialized memory.
nalgebgra-glm Number still uses Copy because upstream `approx` requires it.
2020-03-02 12:45:37 +01:00
Avi Weinstock
6c236af696 Add Scalar + Copy bounds to code that's under feature flags.
`./ci/test.sh` now passes locally.

Refactoring done via the following sed commands:
```bash
export RELEVANT_SOURCEFILES="$(find src -name '*.rs') $(find examples -name '*.rs')"
for f in $RELEVANT_SOURCEFILES; do sed -i 's/N\([0-9]\?\): *Scalar + \(Arbitrary\)/N\1: Scalar + Copy + \2/' $f; done
for f in $RELEVANT_SOURCEFILES; do sed -i 's/N\([0-9]\?\): *Scalar + \(Serialize\)/N\1: Scalar + Copy + \2/' $f; done
for f in $RELEVANT_SOURCEFILES; do sed -i 's/N\([0-9]\?\): *Scalar + \(Deserialize\)/N\1: Scalar + Copy + \2/' $f; do
export RELEVANT_SOURCEFILES="$(find nalgebra-glm -name '*.rs')"
for f in $RELEVANT_SOURCEFILES; do sed -i 's/N\([0-9]\?\): *Scalar,/N\1: Scalar + Copy,/' $f; done
for f in $RELEVANT_SOURCEFILES; do sed -i 's/N\([0-9]\?\): *Scalar>/N\1: Scalar + Copy>/' $f; done
for f in algebra-glm/src/traits.rs; do sed -i 's/Scalar + Ring/Scalar + Copy + Ring>/' $f; done # Number trait definition
```
2020-03-02 12:45:37 +01:00
alex
fedf0fb4f5 Fixes #637: removes not used parameter from cross 2019-10-28 14:15:03 +01:00
sebcrozet
f1576953dd nalgebra-glm: reexport infinite and reversed perspectives. 2019-08-27 22:41:09 +02:00
Jake Shadle
0384268bd4 HTTPS All The Things (#608)
* Use https for all links where it is valid

* Fix random links to external sites
2019-06-11 20:56:50 +02:00
Felipe Jorge
fb95634d8c Fix for nostd builds (#589) 2019-04-26 19:38:03 +02:00
sebcrozet
049957ff55 Reorder comments about parameters of projection so they match the order of the function parameter. 2019-04-09 22:22:13 +02:00
sebcrozet
6b67687e1c Remove the _no variants of reversed perspective. 2019-04-09 22:22:13 +02:00
sebcrozet
f03c785a60 Remove comments about float depth buffer. 2019-04-09 22:22:13 +02:00
sebcrozet
ba93e0a774 Fix missing identifier. 2019-04-09 22:22:13 +02:00
sebcrozet
94908cf2ad Remove some assertions. 2019-04-09 22:22:13 +02:00
sebcrozet
68d8331c2a Fix typos. 2019-04-09 22:22:13 +02:00
sebcrozet
9c3cea1d32 Add more comments. 2019-04-09 22:22:13 +02:00
sebcrozet
1df1c4226b Add some infinite and reversed perspectives.
This adds:

infinite_perspective_rh_no
infinite_perspective_rh_zo
reversed_perspective_rh_no
reversed_perspective_rh_zo
reversed_infinite_perspective_rh_zo
reversed_infinite_perspective_rh_zo

Fix #573
2019-04-09 22:22:13 +02:00
sebcrozet
4ef4001836 Rename Real to RealField. 2019-03-25 11:21:41 +01:00