Advertisement
Guest User

Untitled

a guest
Apr 20th, 2019
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.68 KB | None | 0 0
  1. #[derive(Copy, Clone)]
  2. struct Vector {
  3. pub i: f64,
  4. pub j: f64,
  5. pub k: f64,
  6. }
  7.  
  8. impl Vector {
  9. pub fn new(i: f64, j: f64, k: f64) -> Self {
  10. Self { i, j, k }
  11. }
  12. pub fn get_i(&self) -> Self {
  13. Self { i: 1.0, j: 0.0, k: 0.0 }
  14. }
  15. pub fn get_j(&self) -> Self {
  16. Vector { i: 0.0, j: 1.0, k: 0.0 }
  17. }
  18. pub fn get_k(&self) -> Self {
  19. Self { i: 0.0, j: 0.0, k: 1.0 }
  20. }
  21. pub fn get_magnitude(&self) -> f64 {
  22. (self.i.powi(2) + self.j.powi(2) + self.k.powi(2)).sqrt()
  23. }
  24. pub fn add(&self, mut v: Self) -> Self {
  25. v.i += self.i;
  26. v.j += self.j;
  27. v.k += self.k;
  28. v
  29. }
  30. pub fn multiply_by_scalar(&self, s: f64) -> Self {
  31. Self {
  32. i: self.i * s,
  33. j: self.j * s,
  34. k: self.k * s
  35. }
  36. }
  37. pub fn dot(&self, v: Self) -> f64 {
  38. self.i * v.i + self.j * v.j + self.k * v.k
  39. }
  40. pub fn cross(&self, v: Self) -> Self {
  41. Self {
  42. i: self.j * v.k - v.j * self.k,
  43. j: self.k * v.i - v.k * self.i,
  44. k: self.i * v.j - v.i * self.j
  45. }
  46. }
  47. fn is_zero(&self, eps: f64) -> bool {
  48. self.i < eps && self.j < eps && self.k < eps
  49. }
  50. pub fn is_parallel_to(&self, v: Self) -> bool {
  51. !v.is_zero(1e-8) && self.cross(v).is_zero(1e-8)
  52. }
  53. pub fn is_perpendicular_to(&self, v: Self) -> bool {
  54. self.dot(v) < 1e-8
  55. }
  56. pub fn normalize(&self) -> Self {
  57. let m = self.get_magnitude();
  58. Self {
  59. i: self.i / m,
  60. j: self.j / m,
  61. k: self.k / m
  62. }
  63. }
  64. pub fn is_normalized(&self) -> bool {
  65. (self.get_magnitude() - 1.0) < 1e-8
  66. }
  67. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement