Added Debug, Display, and Default to Vectors and Quaternions.
This also adds an example for Vectors and Quaternions.
This commit is contained in:
		
							
								
								
									
										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::cmp::PartialEq; | ||||||
|  | use std::fmt::{Debug, Display}; | ||||||
| use std::mem::size_of; | use std::mem::size_of; | ||||||
| use std::ops::{Add, Sub, Mul, Div, Rem}; | use std::ops::{Add, Sub, Mul, Div, Rem}; | ||||||
| use std::str::FromStr; | use std::str::FromStr; | ||||||
| @ -12,7 +13,7 @@ use ::bounded::Bounded; | |||||||
| /// a number. | /// a number. | ||||||
| pub trait Number: Zero + One + Add<Output=Self> + Sub<Output=Self> + | pub trait Number: Zero + One + Add<Output=Self> + Sub<Output=Self> + | ||||||
|                   Mul<Output=Self> + Div<Output=Self> + Rem<Output=Self> + |                   Mul<Output=Self> + Div<Output=Self> + Rem<Output=Self> + | ||||||
|                   PartialEq + Copy + Clone |                   PartialEq + Copy + Clone + Debug + Display | ||||||
| { | { | ||||||
|    type StrRadixError; |    type StrRadixError; | ||||||
|  |  | ||||||
|  | |||||||
| @ -3,6 +3,7 @@ | |||||||
| //! | //! | ||||||
| //! [1]: https://en.wikipedia.org/wiki/Quaternion | //! [1]: https://en.wikipedia.org/wiki/Quaternion | ||||||
| //! [2]: https://en.wikipedia.org/wiki/Dual_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 std::ops::{Add, Sub, Mul, Div, Neg}; | ||||||
|  |  | ||||||
| use ::zero::Zero; | use ::zero::Zero; | ||||||
| @ -275,6 +276,34 @@ impl<T> Quaternion<T> where T: Real | |||||||
|    // TODO: Add binary operations for editing self. |    // 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. | // Implement the Zero and One traits for the Quaternion. | ||||||
| impl<T> Zero for Quaternion<T> where T: Real | impl<T> Zero for Quaternion<T> where T: Real | ||||||
| { | { | ||||||
|  | |||||||
| @ -1,6 +1,7 @@ | |||||||
| //! This module defines 2, 3, and 4 component [Vector][1] structures. | //! This module defines 2, 3, and 4 component [Vector][1] structures. | ||||||
| //! | //! | ||||||
| //! [1]: https://en.wikipedia.org/wiki/Vector_(mathematics_and_physics) | //! [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 std::ops::{Add, Sub, Mul, Div, Rem, Neg}; | ||||||
|  |  | ||||||
| use ::zero::Zero; | use ::zero::Zero; | ||||||
| @ -10,11 +11,13 @@ use ::real::Real; | |||||||
| use ::trig::{acos, atan2}; | use ::trig::{acos, atan2}; | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /// A trait that defines the minimum set of | /// A trait that defines the minimum set of | ||||||
| /// functions a [Vector][1] must implement. | /// functions a [Vector][1] must implement. | ||||||
| /// | /// | ||||||
| /// [1]: https://en.wikipedia.org/wiki/Vector_(mathematics_and_physics) | /// [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. |    // Creation functions. | ||||||
|    /// Create a Vector from a single value. |    /// 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. |       // Implement the Zero and One traits for the Vector. | ||||||
|       impl<T> Zero for $structName<T> where T: Number |       impl<T> Zero for $structName<T> where T: Number | ||||||
|       { |       { | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user