# Change Log All notable changes to this project will be documented in this file, following the format defined at [keepachangelog.com](http://keepachangelog.com/). This project adheres to [Semantic Versioning](http://semver.org/). ## [Unreleased] ### Changed - Fix Euler angles to quaternion and quaternion to Euler angles conversion. The axes are now correct, and the order the angles are applied is XYZ. The conversion now matches the conversion from axis angle. - Fix Euler angles to matrix conversion. ## [v0.9.1] - 2016-04-20 ### Changed - Fix angle assignment operators so that they actually mutate `self`. ## [v0.9.0] - 2016-04-19 ### Changed - Assignment operators implementations have been stabilised, to coincide with their [stabilisation in Rust 1.8](http://blog.rust-lang.org/2016/04/14/Rust-1.8.html). - Renames `Vector` trait to `VectorSpace`. - Renames `EuclideanVector` to `InnerSpace`. - Renames `Point` to `EuclideanSpace`, and `Point::Vector` to `EuclideanSpace::Diff`. - `Quaternion`s now implement `VectorSpace` and `InnerSpace` for the functions they share. - The `Matrix` trait is now constraint by `VectorSpace`, with `Matrix::Element` removed in favor of `VectorSpace::Scalar`. ## [v0.8.0] - 2016-04-06 ### Added - Implements `fmt::Debug` for `Basis2`, `Basis3`, and `AffineMatrix3` - A `prelude` module for easy importing of common traits. - Constrained conversion functions for assisting in situations where type inference is difficult. - An `ElementWise` trait for non-mathematical element-wise operations. - A default implementation for `EuclideanVector::angle`. ### Changed - Improves the `fmt::Debug` impls for `Vector`, `Matrix`, `Point`, `Decomposed`, `Quaternion` and `Angle` to make them easier to derive, and have clearer formatting. - Marks vectors, points, matrices, and angles as `#[repr(C, packed)]`. - Renames the `Vector::{length, length2}` functions to `Vector::{magnitude, magnitude2}`. - Move `Angle::new` to be directly implemented on the `Rad` and `Deg` types. - Move `Vector::dot` to `EuclideanVector` trait. - Move `Vector::from_value` to `Array` trait. ### Removed - The non-mathematical operator trait implementations have been removed from the `Vector` trait, in favor of the `ElementWise` trait. - `Angle::equiv`. - Remove `neg_self` method on vectors and matrices. ## [v0.7.0] - 2015-12-23 ### Added - Add missing by-ref and by-val permutations of `Vector`, `Matrix`, `Point`, `Quaternion` and `Angle` operators. - Ease lifetime constraints by removing `'static` from some scalar type parameters. - Weaken type constraints on `perspective` function to take an `Into>`. - Add `Angle::new` for constructing angles from a unitless scalar. - Implement assignment operators for nightly builds, enabled by the `"unstable"` feature. ### Changed - `Vector`, `Matrix`, `Point`, and `Angle` are now constrained to require specific operators to be overloaded. This means that generic code can now use operators, instead of the operator methods. - Take a `Rad` for `ProjectionFov::fovy`, rather than arbitrary `Angle`s. This simplifies the signature of `PerspectiveFov` from `PerspectiveFov` to `PerspectiveFov`. - The following trait constraints were removed from `Angle`: `Debug`, `ScalarConv`, `Into>`, `Into>`. - `Angle` no longer requires `One`, and the implementations have been removed from `Deg` and `Rad`. This is because angles do not close over multiplication, and therefore cannot have a multiplicative identity. If we were truly accurate, `Angle * Angle` would return an `Angle^2` (not supported by the current api). - Make remainder operators on `Angle`s make sense from the perspective of dimensional analysis. - Moved free trigonometric functions onto `Angle`. ### Removed - Remove redundant `Point::{min, max}` methods - these are now covered by the `Array::{min, max}` methods that were introduced in 0.5.0. - Removed `ToComponents`, `ToComponents2`, and `ToComponents3`. If you were relying on `ToComponents::decompose`, you can produce the same effect by accessing the fields on `Decomposed` directly. To create the scale vector, use: `Vector::from_value(transform.scale)`. - Removed `CompositeTransform`, `CompositeTransform2`, and `CompositeTransform3`. - Remove `Vector::one`. Vectors don't really have a multiplicative identity. If you really want a `one` vector, you can do something like: `Vector::from_value(1.0)`. - Remove operator methods from `Vector`, `Matrix`, `Point`, and `Angle` traits in favor of operator overloading. - Remove `*_self` methods from `Vector`, `Matrix`, `Point`, and `Angle`. The operator methods can be used via the unstable assignment operators. - Remove `#[derive(Hash)]` from `Deg` and `Rad`. This could never really be used these types, because they expect to be given a `BaseFloat` under normal circumstances. ## [v0.6.0] - 2015-12-12 ### Added - This CHANGELOG for keeping track of notable changes. - `Matrix4::{from_scale, from_nonuniform_scale}` for easily constructing homogeneous scale matrices. ### Changed - Renamed `SquareMatrix::one` to `SquareMatrix::identity`. `identity` is easier to search for, and the more common name for the multiplicative identity for matrices. - Matrix impls have now been constrained to `S: BaseFloat`. ## [v0.5.0] - 2015-11-20 ### Changed - Take many point and vector parameters by value. - Take point and vector operator overloads by value. - Divide `Matrix` trait into `Matrix` and `SquareMatrix`, opening the door for non-square matrices in the future. - Make many trait type parameters associated types. - Move element-wise methods from `Vector` and `Point` onto the `Array1` trait, and rename it to `Array`. - Make pointer access methods on `Array` match the naming scheme of those in the standard library. ### Removed - Removed collision types: `Ray`, `Plane`, `Frustum`, `Aabb2`, `Aabb3` `Obb2`, `Obb3` `Sphere`, `Cylinder`. These can now be found at [csherratt/collision-rs](https://github.com/csherratt/collision-rs). - Remove `Array2` trait, moving methods onto the `Matrix` trait. ## [v0.4.0] - 2015-10-25 ## [v0.3.1] - 2015-09-20 ## [v0.3.0] - 2015-09-20 ## [v0.2.0] - 2015-05-11 ## [v0.1.6] - 2015-05-10 ## [v0.1.5] - 2015-04-25 ## [v0.1.4] - 2015-04-24 ## [v0.1.3] - 2015-04-06 ## [v0.1.2] - 2015-04-01 ## [v0.1.1] - 2015-03-25 ## [v0.1.0] - 2015-03-15 ## [v0.0.8] - 2015-03-09 ## [v0.0.7] - 2015-03-01 ## [v0.0.6] - 2015-02-21 ## [v0.0.5] - 2015-02-16 ## [v0.0.4] - 2015-02-11 ## [v0.0.3] - 2015-02-08 ## v0.0.1 - 2014-06-24 [Unreleased]: https://github.com/bjz/cgmath/compare/v0.9.1...HEAD [v0.9.0]: https://github.com/bjz/cgmath/compare/v0.9.0...v0.9.1 [v0.9.0]: https://github.com/bjz/cgmath/compare/v0.8.0...v0.9.0 [v0.8.0]: https://github.com/bjz/cgmath/compare/v0.7.0...v0.8.0 [v0.7.0]: https://github.com/bjz/cgmath/compare/v0.6.0...v0.7.0 [v0.6.0]: https://github.com/bjz/cgmath/compare/v0.5.0...v0.6.0 [v0.5.0]: https://github.com/bjz/cgmath/compare/v0.4.0...v0.5.0 [v0.4.0]: https://github.com/bjz/cgmath/compare/v0.3.1...v0.4.0 [v0.3.1]: https://github.com/bjz/cgmath/compare/v0.3.0...v0.3.1 [v0.3.0]: https://github.com/bjz/cgmath/compare/v0.2.0...v0.3.0 [v0.2.0]: https://github.com/bjz/cgmath/compare/v0.1.6...v0.2.0 [v0.1.6]: https://github.com/bjz/cgmath/compare/v0.1.5...v0.1.6 [v0.1.5]: https://github.com/bjz/cgmath/compare/v0.1.4...v0.1.5 [v0.1.4]: https://github.com/bjz/cgmath/compare/v0.1.3...v0.1.4 [v0.1.3]: https://github.com/bjz/cgmath/compare/v0.1.2...v0.1.3 [v0.1.2]: https://github.com/bjz/cgmath/compare/v0.1.1...v0.1.2 [v0.1.1]: https://github.com/bjz/cgmath/compare/v0.1.0...v0.1.1 [v0.1.0]: https://github.com/bjz/cgmath/compare/v0.0.8...v0.1.0 [v0.0.8]: https://github.com/bjz/cgmath/compare/v0.0.7...v0.0.8 [v0.0.7]: https://github.com/bjz/cgmath/compare/v0.0.6...v0.0.7 [v0.0.6]: https://github.com/bjz/cgmath/compare/v0.0.5...v0.0.6 [v0.0.5]: https://github.com/bjz/cgmath/compare/v0.0.4...v0.0.5 [v0.0.4]: https://github.com/bjz/cgmath/compare/v0.0.3...v0.0.4 [v0.0.3]: https://github.com/bjz/cgmath/compare/v0.0.1...v0.0.3