358 Commits

Author SHA1 Message Date
Matthias Grob
2cca35c8fe AxisAngle: call q.imag().norm() for conversion
This is important depending on the platform because norm()
calls matrix::squrt() which dispatches correctly to the implementation
for the used type. Otherwise float squrt()s can get calculated as
double.
2020-03-12 07:35:44 +01:00
kritz
4873dc1c1e
Analytic inverse implementation (#122)
* Add analytic 2x2 matrix inverse

* Add analytical 3x3 matrix inverse
2020-03-04 09:14:04 +01:00
Julian Kent
649c837b6b Use faster but less accurate average 2020-02-25 15:08:17 +01:00
kamilritz
a37b91c96a Type cast remaining integer 2020-01-13 12:21:18 +01:00
Lorenz Meier
3b581fb599 Update .travis.yml
Bring Ubuntu and Mac OS toolchains to latest.
2020-01-01 15:53:50 +01:00
Lorenz Meier
efa5580a67 Update CMakeLists.txt
Remove non-compatible compile option.
2020-01-01 15:53:50 +01:00
Lorenz Meier
20a9e91d44 Fix CMake configuration for coverage tests on Mac OS 2019-12-31 15:54:51 +01:00
kritz
d18be0d0fa Fix AngleAxis constructors (#117) 2019-12-28 17:18:15 -05:00
kritz
e81483a808 Catch quaternion canonical corner cases (#116) 2019-12-18 14:12:47 +01:00
kritz
4f3565da94 Add asserts (#115)
* Add asserts

* Type cast literals

* asserts for indexing vectors

* include assert

* Fix accessing elements outside of slice
2019-12-09 10:21:27 +01:00
kritz
2f6398168d Add several functions that are useful for coavriance matrices: (#114)
* uncorrelateCovariance
	* uncorrelateCovarianceSetVariance
	* makeBlockSymmetric
	* makeRowColSymmetric
	* isBlockSymmetric
	* isRowColSymmetric
2019-12-06 12:03:26 +01:00
kritz
5cbcf6035a Set Matrix's col amd row to single value (#113) 2019-12-05 18:16:14 +01:00
kritz
ef442fab92 Getter function for the diag elements of slice (#112) 2019-12-05 11:39:21 +01:00
kritz
de6a2d31ff Slice assign value (#111)
* Assign value to slice

* Readme for formatting
2019-12-04 14:33:33 +01:00
Daniel Agar
a8009a36a3 Quaternion multiply inline return 2019-11-29 14:40:11 -05:00
Daniel Agar
dba84236cb Vector3f cross product directly return result (#109) 2019-11-28 10:36:13 +01:00
Matthias Grob
de85dcff97 Vector: switch read only functions to const (#108) 2019-11-26 13:46:45 +01:00
Julien Lecoeur
a172c3cdac Add implementation of pseudo-inverse (#102)
* Fix compilation error

* Add implementation of pseudo-inverse

The implementation is based on this publication:
Courrieu, P. (2008). Fast Computation of Moore-Penrose Inverse Matrices, 8(2), 25–29. http://arxiv.org/abs/0804.4809
It is a fully templated implementation to guaranty type correctness.

* Add tests for pseudoinverse

* Apply suggestions from code review

Co-Authored-By: Mathieu Bresciani <brescianimathieu@gmail.com>

* Adapt fullRankCholesky tolerance to type

* Add pseudoinverse test with effectiveness matrix

* Fix coverage

* Fix rebase issue

* Fix SquareMatrix test, add null Matrix test
2019-11-18 14:36:30 -08:00
Daniel Agar
cd185c995b add braces around statements and cleanup formatting (#107) 2019-11-13 10:41:38 -08:00
kritz
38e966cea1 Add min, max, constrain function for Matrix (#105)
* Add min, max, constrain function for Matrix

* Set individual elements to nan in constrain

* Deal with NANs
2019-11-12 18:57:12 +01:00
kritz
93d42947b6 Add test for setting Quaternion to Identity (#104) 2019-11-08 17:27:33 +01:00
Julian Kent
9f46483951 Fix GCC-4.8 bug 2019-11-04 11:11:30 -05:00
Julian Kent
445f58d484
Fix weird C preprocessor conflicts (#101) 2019-11-01 14:23:35 +01:00
Julian Kent
215203fc6f
Automatic Differentiation 'Dual' Type (#100)
* Dual numbers initial implementation

* Add test coverage, with partial derivative example

* Add Jacobian test, fix small issues

* Improve test to demonstrate non-square jacobian

* Better naming for collectReals/Derivatives

* Improve comments

* Potential GCC 4.8 bug workaround

* Add fallback workaround for non-IEEE float platforms
2019-10-23 12:07:51 +02:00
Julian Kent
92d1c8761e
More features: longerThan, norm, copyTo and slice on a Slice (#97)
* Allow slices of slices, add longerThan to Vector/Slice
2019-10-03 13:47:36 +02:00
Matthias Grob
740324cf1e Make all array constructors explicit (#99)
* Make all array constructors explicit

to avoid accidental implicit casts like e.g.
Vector3f v = 0;
assigning nullpointer content.
2019-10-03 13:38:51 +02:00
Julian Kent
7b34c1c51d Enable branch coverage 2019-10-03 08:32:05 +02:00
Matthias Grob
973999a4d3 Fix some template type conversions and style 2019-09-23 10:59:12 +02:00
Matthias Grob
c34e8dc98f helper: consider matrices with the same NANs and INFINITYs equal
to simplify bulk checks when these values are expected
2019-09-18 09:59:50 +02:00
Matthias Grob
bbaa93880b helper: consider NAN equal to NAN such that vectors can be compared exactly 2019-09-18 09:59:50 +02:00
Matthias Grob
33a629105c Matrix: add proper print function testing
Before the print function was just implicitly called somewhere
and that's why we had 100% line coverage. With this we have actual
testing of the functions.
2019-09-18 09:59:50 +02:00
Matthias Grob
b0b7d7229a Multiplication test: fix division resulting in NAN 2019-09-18 09:59:50 +02:00
Matthias Grob
3747232724 LeastSquaresSolver: Fix nasty GCC compile optimization error
The original implementation with no wrapping on size_t is more readable
but the compiler errors with:
internal compiler error: in trunc_int_for_mode, at explow.c:55
I read up and it's apparently a loop optimization problem.
Inspired by https://stackoverflow.com/a/27224697/6326048
I used a far less readable implementation that works fine and
wrote a comment to explain it.
2019-09-18 09:59:50 +02:00
Matthias Grob
5844b0e46e Implement one float equality check and use it everywhere 2019-09-18 09:59:50 +02:00
Matthias Grob
1e80807e8e test: Add uncovered equality checks with NAN and INFINITE 2019-09-18 09:59:50 +02:00
Matthias Grob
a374f37a54 Include helper_functions like all other library components 2019-09-18 09:59:50 +02:00
James Goppert
60c9c99dcc Fix type for division. 2019-09-17 11:08:00 -04:00
Julian Kent
b4714e2ed2 Don't lose array sizes in copyTo 2019-09-17 15:09:12 +02:00
Julian Kent
51d2f9f0dc Remove direct access to internal data 2019-09-16 21:58:32 -04:00
Julian Kent
18218c8f9c
Test non-square matrix multiplication (#91)
* Test non-square matrix multiplication
2019-09-16 17:40:25 +02:00
Julian Kent
b817e8677d Add helpers based on Slice: row(), col(), xy() 2019-09-16 16:11:08 +02:00
Julian Kent
82d565f4d9 Add support for Slice to Matrix, SquareMatrix, Vector 2019-09-16 16:11:08 +02:00
Julian Kent
af1378cc55 Add Slice class 2019-09-16 16:11:08 +02:00
Julian Kent
15865b741c Help compiler with name resolution to avoid overload mixups 2019-09-09 11:18:57 -07:00
Julian Kent
03ffd696a6 Replace pow with sqrt 2019-09-09 02:18:10 -07:00
Julian Kent
22bf63cb71 A smaller codesize wrap, since it gets inlined in many places 2019-09-05 22:31:13 +02:00
Matthias Grob
74ace7d1d5 helper test: cover wrap close to limits cases (#84) 2019-09-05 18:02:33 +02:00
Tanja Baumann
26fd962cbe fix bug in matrix wrap function (#83) 2019-09-05 11:21:41 +02:00
Julian Kent
4a4309327a better API comment
Co-Authored-By: Julian Oes <julian@oes.ch>
2019-09-05 10:19:47 +02:00
Matthias Grob
31450c407c Matrix: use existing print() if isEqual test fails 2019-09-05 10:19:47 +02:00