Skip to content

Commit 23ea2c9

Browse files
committed
Remove ToQuaternion
1 parent 1350181 commit 23ea2c9

File tree

3 files changed

+26
-37
lines changed

3 files changed

+26
-37
lines changed

src/matrix.rs

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ use approx::ApproxEq;
2929
use array::{Array1, Array2, FixedArray};
3030
use num::{BaseFloat, BaseNum};
3131
use point::{Point, Point3};
32-
use quaternion::{Quaternion, ToQuaternion};
32+
use quaternion::Quaternion;
3333
use vector::{Vector, EuclideanVector};
3434
use vector::{Vector2, Vector3, Vector4};
3535

@@ -1337,44 +1337,44 @@ impl<S: BaseFloat> From<Matrix3<S>> for Matrix4<S> {
13371337
}
13381338
}
13391339

1340-
impl<S: BaseFloat> ToQuaternion<S> for Matrix3<S> {
1340+
impl<S: BaseFloat> From<Matrix3<S>> for Quaternion<S> {
13411341
/// Convert the matrix to a quaternion
1342-
fn to_quaternion(&self) -> Quaternion<S> {
1342+
fn from(mat: Matrix3<S>) -> Quaternion<S> {
13431343
// http://www.cs.ucr.edu/~vbz/resources/quatut.pdf
1344-
let trace = self.trace();
1344+
let trace = mat.trace();
13451345
let half: S = cast(0.5f64).unwrap();
13461346

13471347
if trace >= zero::<S>() {
13481348
let s = (one::<S>() + trace).sqrt();
13491349
let w = half * s;
13501350
let s = half / s;
1351-
let x = (self[1][2] - self[2][1]) * s;
1352-
let y = (self[2][0] - self[0][2]) * s;
1353-
let z = (self[0][1] - self[1][0]) * s;
1351+
let x = (mat[1][2] - mat[2][1]) * s;
1352+
let y = (mat[2][0] - mat[0][2]) * s;
1353+
let z = (mat[0][1] - mat[1][0]) * s;
13541354
Quaternion::new(w, x, y, z)
1355-
} else if (self[0][0] > self[1][1]) && (self[0][0] > self[2][2]) {
1356-
let s = (half + (self[0][0] - self[1][1] - self[2][2])).sqrt();
1355+
} else if (mat[0][0] > mat[1][1]) && (mat[0][0] > mat[2][2]) {
1356+
let s = (half + (mat[0][0] - mat[1][1] - mat[2][2])).sqrt();
13571357
let w = half * s;
13581358
let s = half / s;
1359-
let x = (self[0][1] - self[1][0]) * s;
1360-
let y = (self[2][0] - self[0][2]) * s;
1361-
let z = (self[1][2] - self[2][1]) * s;
1359+
let x = (mat[0][1] - mat[1][0]) * s;
1360+
let y = (mat[2][0] - mat[0][2]) * s;
1361+
let z = (mat[1][2] - mat[2][1]) * s;
13621362
Quaternion::new(w, x, y, z)
1363-
} else if self[1][1] > self[2][2] {
1364-
let s = (half + (self[1][1] - self[0][0] - self[2][2])).sqrt();
1363+
} else if mat[1][1] > mat[2][2] {
1364+
let s = (half + (mat[1][1] - mat[0][0] - mat[2][2])).sqrt();
13651365
let w = half * s;
13661366
let s = half / s;
1367-
let x = (self[0][1] - self[1][0]) * s;
1368-
let y = (self[1][2] - self[2][1]) * s;
1369-
let z = (self[2][0] - self[0][2]) * s;
1367+
let x = (mat[0][1] - mat[1][0]) * s;
1368+
let y = (mat[1][2] - mat[2][1]) * s;
1369+
let z = (mat[2][0] - mat[0][2]) * s;
13701370
Quaternion::new(w, x, y, z)
13711371
} else {
1372-
let s = (half + (self[2][2] - self[0][0] - self[1][1])).sqrt();
1372+
let s = (half + (mat[2][2] - mat[0][0] - mat[1][1])).sqrt();
13731373
let w = half * s;
13741374
let s = half / s;
1375-
let x = (self[2][0] - self[0][2]) * s;
1376-
let y = (self[1][2] - self[2][1]) * s;
1377-
let z = (self[0][1] - self[1][0]) * s;
1375+
let x = (mat[2][0] - mat[0][2]) * s;
1376+
let y = (mat[1][2] - mat[2][1]) * s;
1377+
let z = (mat[0][1] - mat[1][0]) * s;
13781378
Quaternion::new(w, x, y, z)
13791379
}
13801380
}

src/quaternion.rs

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -37,12 +37,6 @@ use vector::{Vector3, Vector, EuclideanVector};
3737
#[derive(Copy, Clone, PartialEq, RustcEncodable, RustcDecodable)]
3838
pub struct Quaternion<S> { pub s: S, pub v: Vector3<S> }
3939

40-
/// Represents types which can be expressed as a quaternion.
41-
pub trait ToQuaternion<S: BaseFloat> {
42-
/// Convert this value to a quaternion.
43-
fn to_quaternion(&self) -> Quaternion<S>;
44-
}
45-
4640
impl<S: Copy + BaseFloat> Array1<S> for Quaternion<S> {
4741
#[inline]
4842
fn map<F>(&mut self, mut op: F) -> Quaternion<S> where F: FnMut(S) -> S {
@@ -389,18 +383,13 @@ impl<S: BaseFloat> From<Quaternion<S>> for Basis3<S> {
389383
fn from(quat: Quaternion<S>) -> Basis3<S> { Basis3::from_quaternion(&quat) }
390384
}
391385

392-
impl<S: BaseFloat> ToQuaternion<S> for Quaternion<S> {
393-
#[inline]
394-
fn to_quaternion(&self) -> Quaternion<S> { self.clone() }
395-
}
396-
397386
impl<S: BaseFloat + 'static> Rotation<S, Vector3<S>, Point3<S>> for Quaternion<S> {
398387
#[inline]
399388
fn identity() -> Quaternion<S> { Quaternion::identity() }
400389

401390
#[inline]
402391
fn look_at(dir: &Vector3<S>, up: &Vector3<S>) -> Quaternion<S> {
403-
Matrix3::look_at(dir, up).to_quaternion()
392+
Matrix3::look_at(dir, up).into()
404393
}
405394

406395
#[inline]

src/rotation.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ use matrix::Matrix2;
2020
use matrix::Matrix3;
2121
use num::{BaseNum, BaseFloat};
2222
use point::{Point, Point2, Point3};
23-
use quaternion::{Quaternion, ToQuaternion};
23+
use quaternion::Quaternion;
2424
use ray::Ray;
2525
use vector::{Vector, Vector2, Vector3};
2626

@@ -86,7 +86,7 @@ pub trait Rotation2<S>: Rotation<S, Vector2<S>, Point2<S>>
8686
pub trait Rotation3<S: BaseNum>: Rotation<S, Vector3<S>, Point3<S>>
8787
+ Into<Matrix3<S>>
8888
+ Into<Basis3<S>>
89-
+ ToQuaternion<S>{
89+
+ Into<Quaternion<S>> {
9090
/// Create a rotation using an angle around a given axis.
9191
fn from_axis_angle(axis: &Vector3<S>, angle: Rad<S>) -> Self;
9292

@@ -255,9 +255,9 @@ impl<S: BaseFloat> From<Basis3<S>> for Matrix3<S> {
255255
fn from(b: Basis3<S>) -> Matrix3<S> { b.mat }
256256
}
257257

258-
impl<S: BaseFloat + 'static> ToQuaternion<S> for Basis3<S> {
258+
impl<S: BaseFloat + 'static> From<Basis3<S>> for Quaternion<S> {
259259
#[inline]
260-
fn to_quaternion(&self) -> Quaternion<S> { self.mat.to_quaternion() }
260+
fn from(b: Basis3<S>) -> Quaternion<S> { b.mat.into() }
261261
}
262262

263263
impl<S: BaseFloat + 'static> Rotation<S, Vector3<S>, Point3<S>> for Basis3<S> {

0 commit comments

Comments
 (0)