forked from M-Labs/nalgebra
Implement From<Vector> for Point.
This commit is contained in:
parent
6d63a0a5f1
commit
551c44c854
@ -19,6 +19,10 @@ This project adheres to [Semantic Versioning](http://semver.org/).
|
|||||||
* Add `Point*::from_slice` to create a point from a slice.
|
* Add `Point*::from_slice` to create a point from a slice.
|
||||||
* Add `.map_with_location` to matrices to apply a map which passes the component indices to the user-defined closure alongide
|
* Add `.map_with_location` to matrices to apply a map which passes the component indices to the user-defined closure alongide
|
||||||
the component itself.
|
the component itself.
|
||||||
|
* Add `From<Vector>` impl for `Point`.
|
||||||
|
|
||||||
|
### Modified
|
||||||
|
* The `Point::from_coordinates` methods is deprecated. Use `Point::from` instead.
|
||||||
|
|
||||||
## [0.16.0]
|
## [0.16.0]
|
||||||
All dependencies have been updated to their latest versions.
|
All dependencies have been updated to their latest versions.
|
||||||
|
@ -8,7 +8,7 @@ fn main() {
|
|||||||
|
|
||||||
// Build from a coordinates vector.
|
// Build from a coordinates vector.
|
||||||
let coords = Vector3::new(2.0, 3.0, 4.0);
|
let coords = Vector3::new(2.0, 3.0, 4.0);
|
||||||
let p1 = Point3::from_coordinates(coords);
|
let p1 = Point3::from(coords);
|
||||||
|
|
||||||
// Build by translating the origin.
|
// Build by translating the origin.
|
||||||
let translation = Vector3::new(2.0, 3.0, 4.0);
|
let translation = Vector3::new(2.0, 3.0, 4.0);
|
||||||
|
@ -39,8 +39,8 @@ pub fn look_at<N: Real>(eye: &TVec3<N>, center: &TVec3<N>, up: &TVec3<N>) -> TMa
|
|||||||
/// * [`look_at_rh`](fn.look_at_rh.html)
|
/// * [`look_at_rh`](fn.look_at_rh.html)
|
||||||
pub fn look_at_lh<N: Real>(eye: &TVec3<N>, center: &TVec3<N>, up: &TVec3<N>) -> TMat4<N> {
|
pub fn look_at_lh<N: Real>(eye: &TVec3<N>, center: &TVec3<N>, up: &TVec3<N>) -> TMat4<N> {
|
||||||
TMat::look_at_lh(
|
TMat::look_at_lh(
|
||||||
&Point3::from_coordinates(*eye),
|
&Point3::from(*eye),
|
||||||
&Point3::from_coordinates(*center),
|
&Point3::from(*center),
|
||||||
up,
|
up,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@ -59,8 +59,8 @@ pub fn look_at_lh<N: Real>(eye: &TVec3<N>, center: &TVec3<N>, up: &TVec3<N>) ->
|
|||||||
/// * [`look_at_lh`](fn.look_at_lh.html)
|
/// * [`look_at_lh`](fn.look_at_lh.html)
|
||||||
pub fn look_at_rh<N: Real>(eye: &TVec3<N>, center: &TVec3<N>, up: &TVec3<N>) -> TMat4<N> {
|
pub fn look_at_rh<N: Real>(eye: &TVec3<N>, center: &TVec3<N>, up: &TVec3<N>) -> TMat4<N> {
|
||||||
TMat::look_at_rh(
|
TMat::look_at_rh(
|
||||||
&Point3::from_coordinates(*eye),
|
&Point3::from(*eye),
|
||||||
&Point3::from_coordinates(*center),
|
&Point3::from(*center),
|
||||||
up,
|
up,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -166,17 +166,19 @@ macro_rules! isometry_construction_impl(
|
|||||||
/// # use nalgebra::{Isometry3, IsometryMatrix3, Point3, Vector3};
|
/// # use nalgebra::{Isometry3, IsometryMatrix3, Point3, Vector3};
|
||||||
/// let axisangle = Vector3::y() * f32::consts::FRAC_PI_2;
|
/// let axisangle = Vector3::y() * f32::consts::FRAC_PI_2;
|
||||||
/// let translation = Vector3::new(1.0, 2.0, 3.0);
|
/// let translation = Vector3::new(1.0, 2.0, 3.0);
|
||||||
|
/// // Point and vector being transformed in the tests.
|
||||||
|
/// let pt = Point3::new(4.0, 5.0, 6.0);
|
||||||
|
/// let vec = Vector3::new(4.0, 5.0, 6.0);
|
||||||
///
|
///
|
||||||
/// // Isometry with its rotation part represented as a UnitQuaternion
|
/// // Isometry with its rotation part represented as a UnitQuaternion
|
||||||
/// let iso = Isometry3::new(translation, axisangle);
|
/// let iso = Isometry3::new(translation, axisangle);
|
||||||
/// assert_relative_eq!(iso * Point3::new(4.0, 5.0, 6.0), Point3::new(7.0, 7.0, -1.0), epsilon = 1.0e-6);
|
/// assert_relative_eq!(iso * pt, Point3::new(7.0, 7.0, -1.0), epsilon = 1.0e-6);
|
||||||
/// assert_relative_eq!(iso * Vector3::new(4.0, 5.0, 6.0), Vector3::new(6.0, 5.0, -4.0), epsilon = 1.0e-6);
|
/// assert_relative_eq!(iso * vec, Vector3::new(6.0, 5.0, -4.0), epsilon = 1.0e-6);
|
||||||
/// ```
|
|
||||||
///
|
///
|
||||||
/// // Isometry with its rotation part represented as a Rotation3 (a 3x3 rotation matrix).
|
/// // Isometry with its rotation part represented as a Rotation3 (a 3x3 rotation matrix).
|
||||||
/// let iso = IsometryMatrix3::new(translation, axisangle);
|
/// let iso = IsometryMatrix3::new(translation, axisangle);
|
||||||
/// assert_relative_eq!(iso * Point3::new(4.0, 5.0, 6.0), Point3::new(7.0, 7.0, -1.0), epsilon = 1.0e-6);
|
/// assert_relative_eq!(iso * pt, Point3::new(7.0, 7.0, -1.0), epsilon = 1.0e-6);
|
||||||
/// assert_relative_eq!(iso * Vector3::new(4.0, 5.0, 6.0), Vector3::new(6.0, 5.0, -4.0), epsilon = 1.0e-6);
|
/// assert_relative_eq!(iso * vec, Vector3::new(6.0, 5.0, -4.0), epsilon = 1.0e-6);
|
||||||
/// ```
|
/// ```
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn new(translation: Vector3<N>, axisangle: Vector3<N>) -> Self {
|
pub fn new(translation: Vector3<N>, axisangle: Vector3<N>) -> Self {
|
||||||
|
@ -50,7 +50,7 @@ where
|
|||||||
{
|
{
|
||||||
#[inline]
|
#[inline]
|
||||||
fn clone(&self) -> Self {
|
fn clone(&self) -> Self {
|
||||||
Point::from_coordinates(self.coords.clone())
|
Point::from(self.coords.clone())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -76,7 +76,7 @@ where
|
|||||||
where Des: Deserializer<'a> {
|
where Des: Deserializer<'a> {
|
||||||
let coords = VectorN::<N, D>::deserialize(deserializer)?;
|
let coords = VectorN::<N, D>::deserialize(deserializer)?;
|
||||||
|
|
||||||
Ok(Point::from_coordinates(coords))
|
Ok(Point::from(coords))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -107,7 +107,7 @@ where DefaultAllocator: Allocator<N, D>
|
|||||||
/// Clones this point into one that owns its data.
|
/// Clones this point into one that owns its data.
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn clone(&self) -> Point<N, D> {
|
pub fn clone(&self) -> Point<N, D> {
|
||||||
Point::from_coordinates(self.coords.clone_owned())
|
Point::from(self.coords.clone_owned())
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Converts this point into a vector in homogeneous coordinates, i.e., appends a `1` at the
|
/// Converts this point into a vector in homogeneous coordinates, i.e., appends a `1` at the
|
||||||
@ -127,6 +127,7 @@ where DefaultAllocator: Allocator<N, D>
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Creates a new point with the given coordinates.
|
/// Creates a new point with the given coordinates.
|
||||||
|
#[deprecated(note = "Use Point::from(vector) instead.")]
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn from_coordinates(coords: VectorN<N, D>) -> Point<N, D> {
|
pub fn from_coordinates(coords: VectorN<N, D>) -> Point<N, D> {
|
||||||
Point { coords: coords }
|
Point { coords: coords }
|
||||||
|
@ -33,7 +33,7 @@ where DefaultAllocator: Allocator<N, D>
|
|||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
fn from_coordinates(coords: Self::Coordinates) -> Self {
|
fn from_coordinates(coords: Self::Coordinates) -> Self {
|
||||||
Self::from_coordinates(coords)
|
Self::from(coords)
|
||||||
}
|
}
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
@ -54,7 +54,7 @@ where
|
|||||||
{
|
{
|
||||||
#[inline]
|
#[inline]
|
||||||
fn meet(&self, other: &Self) -> Self {
|
fn meet(&self, other: &Self) -> Self {
|
||||||
Point::from_coordinates(self.coords.meet(&other.coords))
|
Point::from(self.coords.meet(&other.coords))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -65,7 +65,7 @@ where
|
|||||||
{
|
{
|
||||||
#[inline]
|
#[inline]
|
||||||
fn join(&self, other: &Self) -> Self {
|
fn join(&self, other: &Self) -> Self {
|
||||||
Point::from_coordinates(self.coords.join(&other.coords))
|
Point::from(self.coords.join(&other.coords))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -78,6 +78,6 @@ where
|
|||||||
fn meet_join(&self, other: &Self) -> (Self, Self) {
|
fn meet_join(&self, other: &Self) -> (Self, Self) {
|
||||||
let (meet, join) = self.coords.meet_join(&other.coords);
|
let (meet, join) = self.coords.meet_join(&other.coords);
|
||||||
|
|
||||||
(Point::from_coordinates(meet), Point::from_coordinates(join))
|
(Point::from(meet), Point::from(join))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -18,20 +18,20 @@ where DefaultAllocator: Allocator<N, D>
|
|||||||
/// Creates a new point with uninitialized coordinates.
|
/// Creates a new point with uninitialized coordinates.
|
||||||
#[inline]
|
#[inline]
|
||||||
pub unsafe fn new_uninitialized() -> Self {
|
pub unsafe fn new_uninitialized() -> Self {
|
||||||
Self::from_coordinates(VectorN::new_uninitialized())
|
Self::from(VectorN::new_uninitialized())
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Creates a new point with all coordinates equal to zero.
|
/// Creates a new point with all coordinates equal to zero.
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn origin() -> Self
|
pub fn origin() -> Self
|
||||||
where N: Zero {
|
where N: Zero {
|
||||||
Self::from_coordinates(VectorN::from_element(N::zero()))
|
Self::from(VectorN::from_element(N::zero()))
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Creates a new point from a slice.
|
/// Creates a new point from a slice.
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn from_slice(components: &[N]) -> Self {
|
pub fn from_slice(components: &[N]) -> Self {
|
||||||
Self::from_coordinates(VectorN::from_row_slice(components))
|
Self::from(VectorN::from_row_slice(components))
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Creates a new point from its homogeneous vector representation.
|
/// Creates a new point from its homogeneous vector representation.
|
||||||
@ -47,7 +47,7 @@ where DefaultAllocator: Allocator<N, D>
|
|||||||
{
|
{
|
||||||
if !v[D::dim()].is_zero() {
|
if !v[D::dim()].is_zero() {
|
||||||
let coords = v.fixed_slice::<D, U1>(0, 0) / v[D::dim()];
|
let coords = v.fixed_slice::<D, U1>(0, 0) / v[D::dim()];
|
||||||
Some(Self::from_coordinates(coords))
|
Some(Self::from(coords))
|
||||||
} else {
|
} else {
|
||||||
None
|
None
|
||||||
}
|
}
|
||||||
@ -64,12 +64,12 @@ where DefaultAllocator: Allocator<N, D>
|
|||||||
{
|
{
|
||||||
#[inline]
|
#[inline]
|
||||||
fn max_value() -> Self {
|
fn max_value() -> Self {
|
||||||
Self::from_coordinates(VectorN::max_value())
|
Self::from(VectorN::max_value())
|
||||||
}
|
}
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
fn min_value() -> Self {
|
fn min_value() -> Self {
|
||||||
Self::from_coordinates(VectorN::min_value())
|
Self::from(VectorN::min_value())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -80,7 +80,7 @@ where
|
|||||||
{
|
{
|
||||||
#[inline]
|
#[inline]
|
||||||
fn sample<'a, G: Rng + ?Sized>(&self, rng: &mut G) -> Point<N, D> {
|
fn sample<'a, G: Rng + ?Sized>(&self, rng: &mut G) -> Point<N, D> {
|
||||||
Point::from_coordinates(rng.gen::<VectorN<N, D>>())
|
Point::from(rng.gen::<VectorN<N, D>>())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -92,7 +92,7 @@ where
|
|||||||
{
|
{
|
||||||
#[inline]
|
#[inline]
|
||||||
fn arbitrary<G: Gen>(g: &mut G) -> Self {
|
fn arbitrary<G: Gen>(g: &mut G) -> Self {
|
||||||
Point::from_coordinates(VectorN::arbitrary(g))
|
Point::from(VectorN::arbitrary(g))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -132,7 +132,9 @@ macro_rules! from_array_impl(
|
|||||||
($($D: ty, $len: expr);*) => {$(
|
($($D: ty, $len: expr);*) => {$(
|
||||||
impl <N: Scalar> From<[N; $len]> for Point<N, $D> {
|
impl <N: Scalar> From<[N; $len]> for Point<N, $D> {
|
||||||
fn from (coords: [N; $len]) -> Self {
|
fn from (coords: [N; $len]) -> Self {
|
||||||
Point::from_coordinates(coords.into())
|
Point {
|
||||||
|
coords: coords.into()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
)*}
|
)*}
|
||||||
|
@ -33,7 +33,7 @@ where
|
|||||||
{
|
{
|
||||||
#[inline]
|
#[inline]
|
||||||
fn to_superset(&self) -> Point<N2, D> {
|
fn to_superset(&self) -> Point<N2, D> {
|
||||||
Point::from_coordinates(self.coords.to_superset())
|
Point::from(self.coords.to_superset())
|
||||||
}
|
}
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
@ -45,7 +45,7 @@ where
|
|||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
unsafe fn from_superset_unchecked(m: &Point<N2, D>) -> Self {
|
unsafe fn from_superset_unchecked(m: &Point<N2, D>) -> Self {
|
||||||
Point::from_coordinates(Matrix::from_superset_unchecked(&m.coords))
|
Point::from(Matrix::from_superset_unchecked(&m.coords))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -73,7 +73,9 @@ where
|
|||||||
#[inline]
|
#[inline]
|
||||||
unsafe fn from_superset_unchecked(v: &VectorN<N2, DimNameSum<D, U1>>) -> Self {
|
unsafe fn from_superset_unchecked(v: &VectorN<N2, DimNameSum<D, U1>>) -> Self {
|
||||||
let coords = v.fixed_slice::<D, U1>(0, 0) / v[D::dim()];
|
let coords = v.fixed_slice::<D, U1>(0, 0) / v[D::dim()];
|
||||||
Self::from_coordinates(::convert_unchecked(coords))
|
Self {
|
||||||
|
coords: ::convert_unchecked(coords)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -138,3 +140,15 @@ where
|
|||||||
t.to_homogeneous()
|
t.to_homogeneous()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl<N: Scalar, D: DimName> From<VectorN<N, D>> for Point<N, D>
|
||||||
|
where
|
||||||
|
DefaultAllocator: Allocator<N, D>,
|
||||||
|
{
|
||||||
|
#[inline]
|
||||||
|
fn from(coords: VectorN<N, D>) -> Self {
|
||||||
|
Point {
|
||||||
|
coords
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -50,7 +50,7 @@ where DefaultAllocator: Allocator<N, D>
|
|||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
fn neg(self) -> Self::Output {
|
fn neg(self) -> Self::Output {
|
||||||
Point::from_coordinates(-self.coords)
|
Point::from(-self.coords)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -61,7 +61,7 @@ where DefaultAllocator: Allocator<N, D>
|
|||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
fn neg(self) -> Self::Output {
|
fn neg(self) -> Self::Output {
|
||||||
Point::from_coordinates(-&self.coords)
|
Point::from(-&self.coords)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -96,43 +96,43 @@ add_sub_impl!(Sub, sub, ClosedSub;
|
|||||||
add_sub_impl!(Sub, sub, ClosedSub;
|
add_sub_impl!(Sub, sub, ClosedSub;
|
||||||
(D1, U1), (D2, U1) -> (D1) for D1: DimName, D2: Dim, SB: Storage<N, D2>;
|
(D1, U1), (D2, U1) -> (D1) for D1: DimName, D2: Dim, SB: Storage<N, D2>;
|
||||||
self: &'a Point<N, D1>, right: &'b Vector<N, D2, SB>, Output = Point<N, D1>;
|
self: &'a Point<N, D1>, right: &'b Vector<N, D2, SB>, Output = Point<N, D1>;
|
||||||
Self::Output::from_coordinates(&self.coords - right); 'a, 'b);
|
Self::Output::from(&self.coords - right); 'a, 'b);
|
||||||
|
|
||||||
add_sub_impl!(Sub, sub, ClosedSub;
|
add_sub_impl!(Sub, sub, ClosedSub;
|
||||||
(D1, U1), (D2, U1) -> (D1) for D1: DimName, D2: Dim, SB: Storage<N, D2>;
|
(D1, U1), (D2, U1) -> (D1) for D1: DimName, D2: Dim, SB: Storage<N, D2>;
|
||||||
self: &'a Point<N, D1>, right: Vector<N, D2, SB>, Output = Point<N, D1>;
|
self: &'a Point<N, D1>, right: Vector<N, D2, SB>, Output = Point<N, D1>;
|
||||||
Self::Output::from_coordinates(&self.coords - &right); 'a); // FIXME: should not be a ref to `right`.
|
Self::Output::from(&self.coords - &right); 'a); // FIXME: should not be a ref to `right`.
|
||||||
|
|
||||||
add_sub_impl!(Sub, sub, ClosedSub;
|
add_sub_impl!(Sub, sub, ClosedSub;
|
||||||
(D1, U1), (D2, U1) -> (D1) for D1: DimName, D2: Dim, SB: Storage<N, D2>;
|
(D1, U1), (D2, U1) -> (D1) for D1: DimName, D2: Dim, SB: Storage<N, D2>;
|
||||||
self: Point<N, D1>, right: &'b Vector<N, D2, SB>, Output = Point<N, D1>;
|
self: Point<N, D1>, right: &'b Vector<N, D2, SB>, Output = Point<N, D1>;
|
||||||
Self::Output::from_coordinates(self.coords - right); 'b);
|
Self::Output::from(self.coords - right); 'b);
|
||||||
|
|
||||||
add_sub_impl!(Sub, sub, ClosedSub;
|
add_sub_impl!(Sub, sub, ClosedSub;
|
||||||
(D1, U1), (D2, U1) -> (D1) for D1: DimName, D2: Dim, SB: Storage<N, D2>;
|
(D1, U1), (D2, U1) -> (D1) for D1: DimName, D2: Dim, SB: Storage<N, D2>;
|
||||||
self: Point<N, D1>, right: Vector<N, D2, SB>, Output = Point<N, D1>;
|
self: Point<N, D1>, right: Vector<N, D2, SB>, Output = Point<N, D1>;
|
||||||
Self::Output::from_coordinates(self.coords - right); );
|
Self::Output::from(self.coords - right); );
|
||||||
|
|
||||||
// Point + Vector
|
// Point + Vector
|
||||||
add_sub_impl!(Add, add, ClosedAdd;
|
add_sub_impl!(Add, add, ClosedAdd;
|
||||||
(D1, U1), (D2, U1) -> (D1) for D1: DimName, D2: Dim, SB: Storage<N, D2>;
|
(D1, U1), (D2, U1) -> (D1) for D1: DimName, D2: Dim, SB: Storage<N, D2>;
|
||||||
self: &'a Point<N, D1>, right: &'b Vector<N, D2, SB>, Output = Point<N, D1>;
|
self: &'a Point<N, D1>, right: &'b Vector<N, D2, SB>, Output = Point<N, D1>;
|
||||||
Self::Output::from_coordinates(&self.coords + right); 'a, 'b);
|
Self::Output::from(&self.coords + right); 'a, 'b);
|
||||||
|
|
||||||
add_sub_impl!(Add, add, ClosedAdd;
|
add_sub_impl!(Add, add, ClosedAdd;
|
||||||
(D1, U1), (D2, U1) -> (D1) for D1: DimName, D2: Dim, SB: Storage<N, D2>;
|
(D1, U1), (D2, U1) -> (D1) for D1: DimName, D2: Dim, SB: Storage<N, D2>;
|
||||||
self: &'a Point<N, D1>, right: Vector<N, D2, SB>, Output = Point<N, D1>;
|
self: &'a Point<N, D1>, right: Vector<N, D2, SB>, Output = Point<N, D1>;
|
||||||
Self::Output::from_coordinates(&self.coords + &right); 'a); // FIXME: should not be a ref to `right`.
|
Self::Output::from(&self.coords + &right); 'a); // FIXME: should not be a ref to `right`.
|
||||||
|
|
||||||
add_sub_impl!(Add, add, ClosedAdd;
|
add_sub_impl!(Add, add, ClosedAdd;
|
||||||
(D1, U1), (D2, U1) -> (D1) for D1: DimName, D2: Dim, SB: Storage<N, D2>;
|
(D1, U1), (D2, U1) -> (D1) for D1: DimName, D2: Dim, SB: Storage<N, D2>;
|
||||||
self: Point<N, D1>, right: &'b Vector<N, D2, SB>, Output = Point<N, D1>;
|
self: Point<N, D1>, right: &'b Vector<N, D2, SB>, Output = Point<N, D1>;
|
||||||
Self::Output::from_coordinates(self.coords + right); 'b);
|
Self::Output::from(self.coords + right); 'b);
|
||||||
|
|
||||||
add_sub_impl!(Add, add, ClosedAdd;
|
add_sub_impl!(Add, add, ClosedAdd;
|
||||||
(D1, U1), (D2, U1) -> (D1) for D1: DimName, D2: Dim, SB: Storage<N, D2>;
|
(D1, U1), (D2, U1) -> (D1) for D1: DimName, D2: Dim, SB: Storage<N, D2>;
|
||||||
self: Point<N, D1>, right: Vector<N, D2, SB>, Output = Point<N, D1>;
|
self: Point<N, D1>, right: Vector<N, D2, SB>, Output = Point<N, D1>;
|
||||||
Self::Output::from_coordinates(self.coords + right); );
|
Self::Output::from(self.coords + right); );
|
||||||
|
|
||||||
// XXX: replace by the shared macro: add_sub_assign_impl
|
// XXX: replace by the shared macro: add_sub_assign_impl
|
||||||
macro_rules! op_assign_impl(
|
macro_rules! op_assign_impl(
|
||||||
@ -178,10 +178,10 @@ md_impl_all!(
|
|||||||
(R1, C1), (D2, U1) for R1: DimName, C1: Dim, D2: DimName, SA: Storage<N, R1, C1>
|
(R1, C1), (D2, U1) for R1: DimName, C1: Dim, D2: DimName, SA: Storage<N, R1, C1>
|
||||||
where ShapeConstraint: AreMultipliable<R1, C1, D2, U1>;
|
where ShapeConstraint: AreMultipliable<R1, C1, D2, U1>;
|
||||||
self: Matrix<N, R1, C1, SA>, right: Point<N, D2>, Output = Point<N, R1>;
|
self: Matrix<N, R1, C1, SA>, right: Point<N, D2>, Output = Point<N, R1>;
|
||||||
[val val] => Point::from_coordinates(self * right.coords);
|
[val val] => Point::from(self * right.coords);
|
||||||
[ref val] => Point::from_coordinates(self * right.coords);
|
[ref val] => Point::from(self * right.coords);
|
||||||
[val ref] => Point::from_coordinates(self * &right.coords);
|
[val ref] => Point::from(self * &right.coords);
|
||||||
[ref ref] => Point::from_coordinates(self * &right.coords);
|
[ref ref] => Point::from(self * &right.coords);
|
||||||
);
|
);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -198,7 +198,7 @@ macro_rules! componentwise_scalarop_impl(
|
|||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
fn $method(self, right: N) -> Self::Output {
|
fn $method(self, right: N) -> Self::Output {
|
||||||
Point::from_coordinates(self.coords.$method(right))
|
Point::from(self.coords.$method(right))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -208,7 +208,7 @@ macro_rules! componentwise_scalarop_impl(
|
|||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
fn $method(self, right: N) -> Self::Output {
|
fn $method(self, right: N) -> Self::Output {
|
||||||
Point::from_coordinates((&self.coords).$method(right))
|
Point::from((&self.coords).$method(right))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -233,7 +233,7 @@ macro_rules! left_scalar_mul_impl(
|
|||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
fn mul(self, right: Point<$T, D>) -> Self::Output {
|
fn mul(self, right: Point<$T, D>) -> Self::Output {
|
||||||
Point::from_coordinates(self * right.coords)
|
Point::from(self * right.coords)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -243,7 +243,7 @@ macro_rules! left_scalar_mul_impl(
|
|||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
fn mul(self, right: &'b Point<$T, D>) -> Self::Output {
|
fn mul(self, right: &'b Point<$T, D>) -> Self::Output {
|
||||||
Point::from_coordinates(self * &right.coords)
|
Point::from(self * &right.coords)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
)*}
|
)*}
|
||||||
|
@ -428,7 +428,7 @@ quaternion_op_impl!(
|
|||||||
(U4, U1), (U3, U1);
|
(U4, U1), (U3, U1);
|
||||||
self: &'a UnitQuaternion<N>, rhs: &'b Point3<N>,
|
self: &'a UnitQuaternion<N>, rhs: &'b Point3<N>,
|
||||||
Output = Point3<N> => U3, U4;
|
Output = Point3<N> => U3, U4;
|
||||||
Point3::from_coordinates(self * &rhs.coords);
|
Point3::from(self * &rhs.coords);
|
||||||
'a, 'b);
|
'a, 'b);
|
||||||
|
|
||||||
quaternion_op_impl!(
|
quaternion_op_impl!(
|
||||||
@ -436,7 +436,7 @@ quaternion_op_impl!(
|
|||||||
(U4, U1), (U3, U1);
|
(U4, U1), (U3, U1);
|
||||||
self: &'a UnitQuaternion<N>, rhs: Point3<N>,
|
self: &'a UnitQuaternion<N>, rhs: Point3<N>,
|
||||||
Output = Point3<N> => U3, U4;
|
Output = Point3<N> => U3, U4;
|
||||||
Point3::from_coordinates(self * rhs.coords);
|
Point3::from(self * rhs.coords);
|
||||||
'a);
|
'a);
|
||||||
|
|
||||||
quaternion_op_impl!(
|
quaternion_op_impl!(
|
||||||
@ -444,7 +444,7 @@ quaternion_op_impl!(
|
|||||||
(U4, U1), (U3, U1);
|
(U4, U1), (U3, U1);
|
||||||
self: UnitQuaternion<N>, rhs: &'b Point3<N>,
|
self: UnitQuaternion<N>, rhs: &'b Point3<N>,
|
||||||
Output = Point3<N> => U3, U4;
|
Output = Point3<N> => U3, U4;
|
||||||
Point3::from_coordinates(self * &rhs.coords);
|
Point3::from(self * &rhs.coords);
|
||||||
'b);
|
'b);
|
||||||
|
|
||||||
quaternion_op_impl!(
|
quaternion_op_impl!(
|
||||||
@ -452,7 +452,7 @@ quaternion_op_impl!(
|
|||||||
(U4, U1), (U3, U1);
|
(U4, U1), (U3, U1);
|
||||||
self: UnitQuaternion<N>, rhs: Point3<N>,
|
self: UnitQuaternion<N>, rhs: Point3<N>,
|
||||||
Output = Point3<N> => U3, U4;
|
Output = Point3<N> => U3, U4;
|
||||||
Point3::from_coordinates(self * rhs.coords);
|
Point3::from(self * rhs.coords);
|
||||||
);
|
);
|
||||||
|
|
||||||
// UnitQuaternion × Unit<Vector>
|
// UnitQuaternion × Unit<Vector>
|
||||||
|
@ -89,7 +89,7 @@ where DefaultAllocator: Allocator<N, D, D> + Allocator<N, D>
|
|||||||
{
|
{
|
||||||
#[inline]
|
#[inline]
|
||||||
fn inverse_transform_point(&self, pt: &Point<N, D>) -> Point<N, D> {
|
fn inverse_transform_point(&self, pt: &Point<N, D>) -> Point<N, D> {
|
||||||
Point::from_coordinates(self.inverse_transform_vector(&pt.coords))
|
Point::from(self.inverse_transform_vector(&pt.coords))
|
||||||
}
|
}
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
|
@ -220,7 +220,7 @@ complex_op_impl_all!(
|
|||||||
[val val] => &self * &rhs;
|
[val val] => &self * &rhs;
|
||||||
[ref val] => self * &rhs;
|
[ref val] => self * &rhs;
|
||||||
[val ref] => &self * rhs;
|
[val ref] => &self * rhs;
|
||||||
[ref ref] => Point2::from_coordinates(self * &rhs.coords);
|
[ref ref] => Point2::from(self * &rhs.coords);
|
||||||
);
|
);
|
||||||
|
|
||||||
// UnitComplex × Vector
|
// UnitComplex × Vector
|
||||||
|
Loading…
Reference in New Issue
Block a user