Added Debug, Display, and Default to Vectors and Quaternions.
This also adds an example for Vectors and Quaternions.
This commit is contained in:
parent
9306a73f9a
commit
e64c3b0fbe
14
examples/quaternion.rs
Normal file
14
examples/quaternion.rs
Normal file
@ -0,0 +1,14 @@
|
||||
extern crate sigils;
|
||||
|
||||
|
||||
|
||||
use sigils::quaternion::{Quaternion};
|
||||
|
||||
|
||||
pub fn main()
|
||||
{
|
||||
let quat: Quaternion<f64>;
|
||||
|
||||
quat = Quaternion::<f64>::default();
|
||||
println!("Quaternion: {}", quat);
|
||||
}
|
22
examples/vector.rs
Normal file
22
examples/vector.rs
Normal file
@ -0,0 +1,22 @@
|
||||
extern crate sigils;
|
||||
|
||||
|
||||
|
||||
use sigils::vector::{Vector2, Vector3, Vector4};
|
||||
|
||||
|
||||
pub fn main()
|
||||
{
|
||||
let vec2: Vector2<f64>;
|
||||
let vec3: Vector3<f64>;
|
||||
let vec4: Vector4<f64>;
|
||||
|
||||
vec2 = Vector2::<f64>::default();
|
||||
println!("Vector2: {}", vec2);
|
||||
|
||||
vec3 = Vector3::<f64>::default();
|
||||
println!("Vector3: {}", vec3);
|
||||
|
||||
vec4 = Vector4::<f64>::default();
|
||||
println!("Vector4: {}", vec4);
|
||||
}
|
@ -1,4 +1,5 @@
|
||||
use std::cmp::PartialEq;
|
||||
use std::fmt::{Debug, Display};
|
||||
use std::mem::size_of;
|
||||
use std::ops::{Add, Sub, Mul, Div, Rem};
|
||||
use std::str::FromStr;
|
||||
@ -12,7 +13,7 @@ use ::bounded::Bounded;
|
||||
/// a number.
|
||||
pub trait Number: Zero + One + Add<Output=Self> + Sub<Output=Self> +
|
||||
Mul<Output=Self> + Div<Output=Self> + Rem<Output=Self> +
|
||||
PartialEq + Copy + Clone
|
||||
PartialEq + Copy + Clone + Debug + Display
|
||||
{
|
||||
type StrRadixError;
|
||||
|
||||
|
@ -3,6 +3,7 @@
|
||||
//!
|
||||
//! [1]: https://en.wikipedia.org/wiki/Quaternion
|
||||
//! [2]: https://en.wikipedia.org/wiki/Dual_quaternion
|
||||
use std::fmt::{Error, Formatter, Debug, Display};
|
||||
use std::ops::{Add, Sub, Mul, Div, Neg};
|
||||
|
||||
use ::zero::Zero;
|
||||
@ -275,6 +276,34 @@ impl<T> Quaternion<T> where T: Real
|
||||
// TODO: Add binary operations for editing self.
|
||||
}
|
||||
|
||||
// Implement the Debug trait for the Quaternion.
|
||||
impl<T> Debug for Quaternion<T> where T: Real
|
||||
{
|
||||
fn fmt(&self, formatter: &mut Formatter) -> Result<(), Error>
|
||||
{
|
||||
write!(formatter, "[{:?}, {:?}]", self.scalar, self.vector)
|
||||
}
|
||||
}
|
||||
|
||||
// Implement the Display trait for the Quaternion.
|
||||
impl<T> Display for Quaternion<T> where T: Real
|
||||
{
|
||||
fn fmt(&self, formatter: &mut Formatter) -> Result<(), Error>
|
||||
{
|
||||
write!(formatter, "[{}, {}]", self.scalar, self.vector)
|
||||
}
|
||||
}
|
||||
|
||||
// Implement a default value for Quaternions which
|
||||
// returns the identity quaternion.
|
||||
impl<T> Default for Quaternion<T> where T: Real
|
||||
{
|
||||
fn default() -> Quaternion<T>
|
||||
{
|
||||
Quaternion::identity()
|
||||
}
|
||||
}
|
||||
|
||||
// Implement the Zero and One traits for the Quaternion.
|
||||
impl<T> Zero for Quaternion<T> where T: Real
|
||||
{
|
||||
|
@ -1,6 +1,7 @@
|
||||
//! This module defines 2, 3, and 4 component [Vector][1] structures.
|
||||
//!
|
||||
//! [1]: https://en.wikipedia.org/wiki/Vector_(mathematics_and_physics)
|
||||
use std::fmt::{Error, Formatter, Debug, Display};
|
||||
use std::ops::{Add, Sub, Mul, Div, Rem, Neg};
|
||||
|
||||
use ::zero::Zero;
|
||||
@ -10,11 +11,13 @@ use ::real::Real;
|
||||
use ::trig::{acos, atan2};
|
||||
|
||||
|
||||
|
||||
/// A trait that defines the minimum set of
|
||||
/// functions a [Vector][1] must implement.
|
||||
///
|
||||
/// [1]: https://en.wikipedia.org/wiki/Vector_(mathematics_and_physics)
|
||||
pub trait Vector<T> : Clone where T: Number
|
||||
pub trait Vector<T>: Debug + Display + Clone + Default + Zero + One
|
||||
where T: Number
|
||||
{
|
||||
// Creation functions.
|
||||
/// Create a Vector from a single value.
|
||||
@ -638,6 +641,63 @@ macro_rules! define_vector
|
||||
}
|
||||
}
|
||||
|
||||
// Implement the Debug trait for the Vector.
|
||||
impl<T> Debug for $structName<T> where T: Number
|
||||
{
|
||||
fn fmt(&self, formatter: &mut Formatter) -> Result<(), Error>
|
||||
{
|
||||
let mut count: u8;
|
||||
|
||||
// Use the size of the Vector to
|
||||
// pretty up the printing.
|
||||
count = self.get_size();
|
||||
|
||||
write!(formatter, "<");
|
||||
$(
|
||||
write!(formatter, "{:?}", self.$field);
|
||||
if count > 0
|
||||
{
|
||||
write!(formatter, ", ");
|
||||
}
|
||||
count -= 1;
|
||||
)*
|
||||
write!(formatter, ">")
|
||||
}
|
||||
}
|
||||
|
||||
// Implement the Display trait for the Vector.
|
||||
impl<T> Display for $structName<T> where T: Number
|
||||
{
|
||||
fn fmt(&self, formatter: &mut Formatter) -> Result<(), Error>
|
||||
{
|
||||
let mut count: u8;
|
||||
|
||||
// Use the size of the Vector to
|
||||
// pretty up the printing.
|
||||
count = self.get_size();
|
||||
|
||||
write!(formatter, "<");
|
||||
$(
|
||||
write!(formatter, "{}", self.$field);
|
||||
if count > 1
|
||||
{
|
||||
write!(formatter, ", ");
|
||||
}
|
||||
count -= 1;
|
||||
)*
|
||||
write!(formatter, ">")
|
||||
}
|
||||
}
|
||||
|
||||
// Implement the Default trait for the Vector.
|
||||
impl<T> Default for $structName<T> where T: Number
|
||||
{
|
||||
fn default() -> $structName<T>
|
||||
{
|
||||
$structName::identity()
|
||||
}
|
||||
}
|
||||
|
||||
// Implement the Zero and One traits for the Vector.
|
||||
impl<T> Zero for $structName<T> where T: Number
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user