Vladimír Vondruš
b0d79bbad8
Math: minor code cleanup.
13 years ago
Vladimír Vondruš
fab0aa1544
Math: expect fail on non-uniform scaling in Matrix*::rotation().
...
Not implemented yet, added TODO.
13 years ago
Vladimír Vondruš
d59b620fd9
Math: transforming vectors with complex numbers.
13 years ago
Vladimír Vondruš
93952cd72a
Math: converting Vector2 to Complex and back.
13 years ago
Vladimír Vondruš
8aade86571
Math: converting complex number to rotation matrix.
13 years ago
Vladimír Vondruš
e7ceddf0fc
Math: rotation complex number.
13 years ago
Vladimír Vondruš
4ebd204482
Math: angle between two complex numbers.
...
Also crosslinked the documentation with similar functions in Vector and
Quaternion.
13 years ago
Vladimír Vondruš
fc8750c51f
Math: conjugation and inversion of complex numbers.
...
Also updated related Quaternion and DualQuaternion documentation.
13 years ago
Vladimír Vondruš
728b9a3f2e
Math: construct identity transformation by default.
...
Square matrices already had that, (dual) quaternions too, making that
the default also with complex numbers. Updated the documentation to
reflect that.
13 years ago
Vladimír Vondruš
dc5a19f952
Math: complex number dot product, length and normalization.
13 years ago
Vladimír Vondruš
b509ff02ea
Math: complex number multiplication.
13 years ago
Vladimír Vondruš
4ad85dceca
Math: fixed debug output operator for Deg and Rad.
...
It was currently not possible to print this, as the resulting type is
neither Deg nor Rad:
Debug() << 23.0_degf - 5.0_degf;
13 years ago
Vladimír Vondruš
9464e805e1
Use {} instead of "".
...
Calls default std::string constructor instead of converting from const
char*, might possibly save unneeded allocation.
13 years ago
Vladimír Vondruš
9dbd8c9356
Math: renamed Quaternion::rotateVector*() to transformVector*().
...
Now it is consistent with Matrix and can be easily used in templates.
13 years ago
Vladimír Vondruš
58d156bc47
Math: removed Point2D/Point3D altogether.
13 years ago
Vladimír Vondruš
c2f4359bd7
Math: added strongly-typed asin(), acos() and atan().
13 years ago
Vladimír Vondruš
3cbeb43078
Cleaned up includes.
13 years ago
Vladimír Vondruš
c0a5e5dadd
Math: added sin(), cos() and tan() accepting either Rad or Deg.
13 years ago
Vladimír Vondruš
3ccc6a794e
Math: removed old deg()/rad() helpers.
13 years ago
Vladimír Vondruš
c293630c7c
Math: using Rad for Quaternion and DualQuaternion functions.
13 years ago
Vladimír Vondruš
d16a6259b8
Math: using Rad for Matrix4::perspectiveProjection().
...
Also updated dependent functions and tests.
13 years ago
Vladimír Vondruš
830ce69da0
Math: using Rad in Matrix*::rotation*().
...
Also updated dependent functions and tests.
13 years ago
Vladimír Vondruš
1d40254676
Math: use Rad for Vector::angle().
13 years ago
Vladimír Vondruš
ff929c04e9
Math: type-safe implementation for degrees and radians.
...
Next few commits will add requirement for "strongly typed" angles in all
function parameters, e.g.:
Matrix3::rotation(24.0_degf);
Math::sin(1.047_radf);
The purpose is to make angle entering less error-prone, e.g. not passing
degrees when radians should be etc.
13 years ago
Vladimír Vondruš
f1e3453517
Math: base class for units.
13 years ago
Vladimír Vondruš
687bd37b81
Math: initial complex number implementation.
13 years ago
Vladimír Vondruš
5b1463fa0c
Math: test constexpr methods on DualQuaternion.
13 years ago
Vladimír Vondruš
dccfc1f8ba
Math: test constexpr methods on Quaternion.
13 years ago
Vladimír Vondruš
184bf38fc1
Math: test constexpr methods on Dual.
13 years ago
Vladimír Vondruš
e2591253ae
Math: test constexpr swizzle().
13 years ago
Vladimír Vondruš
227517ff89
Math: added DualQuaternion::transformPoint().
13 years ago
Vladimír Vondruš
7e0d8d119f
Math: ability to normalize DualQuaternion.
...
Also hope that this is proper implementation.
13 years ago
Vladimír Vondruš
12c786c408
Math: renamed DualQuaternion::norm() to length(), added lengthSquared().
...
Hopefully this is properly implemented and properly named. On the other
hand, having length everywhere (vectors, quaternions, complex numbers)
and norm only at one place is inconsistent.
13 years ago
Vladimír Vondruš
f1da7a08b4
Math: added sqrt() overload for Dual.
13 years ago
Vladimír Vondruš
fec6822187
Math: added sqrt() scalar/vector overload.
13 years ago
Vladimír Vondruš
83346ce023
Math: converting DualQuaternion to matrix.
...
Also updated and simplified Quaternion to matrix test.
13 years ago
Vladimír Vondruš
07c0c4d845
Math: added tests for composed dual quaternion parts.
...
To be sure everything is implemented properly.
13 years ago
Vladimír Vondruš
a49bb0d718
Math: convenience functions for transforming vectors with matrices.
...
It's now possible to conveniently transform 2D vectors and points with
3x3 matrices and 3D vectors/points with 4x4 matrices. Previous most
low-level solution:
Matrix4 m;
Vector3 v;
Vector3 a = (m*Vector4(v, 1.0f)).xyz();
Vector4 b = (m*Vector4(v, 0.0f)).xyz();
Another, more generalized solution for points was with Point2D/Point3D,
adding a lot of confusion (what is that class and what does .vector()?):
Vector3 a = (m*Point3D(v)).vector();
And the worst solution was with generic 2D/3D code (WTF!):
auto a = (m*typename DimensionTraits::PointType(v)).vector();
Now it is just this, similar for both dimensions:
Vector3 a = m.transformPoint(v);
Vector3 b = m.transformVector(v);
Note that transformation three-component vectors with 3x3 matrices or
four-component vectors with 4x4 matrices is easy enough so it doesn't
need any special convenience functions whatsoever:
Vector3 c = m.rotation()*v;
13 years ago
Vladimír Vondruš
0f554a49f6
Math: convenience function to transform points with DualQuaternion.
13 years ago
Vladimír Vondruš
0f130ad55d
Math: simplified Quaternion::rotateVector*() tests.
...
Comparing to Matrix4 transformation.
13 years ago
Vladimír Vondruš
03ae82b448
Math: creating DualQuaternion from vector.
13 years ago
Vladimír Vondruš
3ad264893e
Math: creating rotation and translation DualQuaternion.
13 years ago
Vladimír Vondruš
4c1608378a
Math: document that Quaternion::rotationAxis() might return NaN vector.
13 years ago
Vladimír Vondruš
5615a4c7f6
Math: initial implementation of DualQuaternion class.
...
Currently practically unusable.
13 years ago
Vladimír Vondruš
3f6a2d5ae8
Math: dual number implementation.
13 years ago
Vladimír Vondruš
5d6b2b4ecd
Math: properly test Quaternion comparison.
13 years ago
Vladimír Vondruš
95982e5176
Math: various code cleanup.
13 years ago
Vladimír Vondruš
a0b8dcc067
Math: rename Quaternion::fromRotation() to rotation().
...
Now it is similar in usage to Matrix4 functions and is now also
crossreferenced in documentation. Also updated the test to also check
assertion.
13 years ago
Vladimír Vondruš
93ac7f0d3c
Math: rotating vectors with Quaternion.
13 years ago
Vladimír Vondruš
730c09567d
Math: ability to explicitly create Quaternion for given vector.
13 years ago